【问题标题】:Python Flask using mod_wsgi in Apache; how to get venv to work?在 Apache 中使用 mod_wsgi 的 Python Flask;如何让venv工作?
【发布时间】:2018-05-24 18:50:07
【问题描述】:

我一直在尝试让它工作,并且到处搜索并阅读页面向上和向下页面,但似乎没有找到答案。

我有带有 mod_wsgi 的 Apache 和一个简单的测试 Flask 应用程序。

我使用它来工作: https://www.jakowicz.com/flask-apache-wsgi/

然后不知怎么发现Apache mod_wsgi用的是系统python,我想用venv(https://docs.python.org/3/library/venv.html)。

我的应用程序位于具有正常 venv 目录结构的目录中,但是如何让我的应用程序使用它?

我发现了这个: http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html

但是如果我把 python-home 我的应用程序失败了。

几个问题: 如何找到我的应用正在使用的 Python 版本? 如何找到我的 mod_wsgi 版本? 如何让我的应用使用我的 venv?

我是 Python 和 WSGI 的新手,我主要使用 PHP。

希望有人可以向我解释该怎么做...

-- 罗尼

【问题讨论】:

  • 当前 Python 版本由which python 获得。至于 mod_wsgi 版本,我很确定。最后,关于虚拟环境的信息在这里:virtualenv.pypa.io/en/stable。您可以使用 pip 安装 virtualenv:pip install virtualenv。安装后,您可以使用以下命令简单地创建一个虚拟环境:virtualenv venv 将创建一个名为“venv”的虚拟环境文件夹。创建 venv 后,您需要激活它:. /venv/bin/activate。现在,如果您输入which python,您会注意到它是本地副本!
  • 嗨,Adam,我已经安装并配置了 Python venv 并拥有一个美德环境,但我不知道如何将它与 Apache 和 mod_wsgi 一起使用。这也是我如何查看 Apache、mod_wsgi 使用的 Python 版本,如何执行命令以在 Apache、mod_wsgi 和 Flask 创建的网页上显示 Python 版本;我知道的 venv 是 3.5
  • 我已经发布了更详细的答案

标签: python flask mod-wsgi wsgi python-venv


【解决方案1】:

如何找到我的应用正在使用的 Python 版本?

查看文档:

它为您提供了一个可以使用的测试。

如何找到我的 mod_wsgi 版本?

使用 WSGI environ 字典中的 mod_wsgi.version 键。请参阅以下内容中的参考:

你也可以使用:

import mod_wsgi
print(mod_wsgi.version)

如何让我的应用使用我的 venv?

有关使用虚拟环境的文档可在以下位置找到:

如其所述,如果您的 mod_wsgi 使用系统 Python 并且您想使用不同的 Python 安装或版本,则不能强制它使用其他安装或版本。 mod_wsgi 二进制文件必须针对您要使用的特定 Python 版本进行编译。

因为系统 mod_wsgi 包通常是古老的,并且不适用于您要使用的 Python 版本,所以您应该卸载系统 mod_wsgi 包并根据您要使用的 Python 版本从源代码安装 mod_wsgi。为此,最简单的安装方法是使用pip install mod_wsgi。见:

【讨论】:

  • 仅仅使用最新版本似乎需要做很多工作。我发现通过 Apache 将请求代理到 Flask 应用程序要容易一些。主要是因为它只是第一次工作。以一种方式或另一种方式这样做有什么优点/缺点吗?
  • 您也可以只使用pip install mod_wsgi,然后使用您的 Flask 应用程序运行 mod_wsgi-express start-server 并将其代理给它。所以不要在你的主 Apache 中运行它。 Flask 内置开发服务器不应用于生产站点。
【解决方案2】:

在您问题的评论部分继续讨论:

假设在/venv文件夹中创建了一个虚拟环境如下目录:

- main.py
- /static
  - /js
  - /html
  - /css
- /venv
  - /bin
    - activate

要激活虚拟环境,从而使用 Python 的本地副本(而不是全局副本),必须使用以下命令:

. /venv/bin/activate

. 本质上告诉终端窗口必须执行位于/venv/binactivate 文件(假设我们位于上述目录的顶层)。当您在终端窗口的新行开头看到字符串 (venv) 时,您将知道该命令成功。

现在,which 命令将确认您现在正在使用 Python 的本地副本:

which python

现在您的虚拟环境已激活,您可以使用 pip 将您希望本地安装到此虚拟环境的任何模块。如果您愿意,您可以指定安装某个版本的模块,或者只获取最新版本。您安装的 Flask 或 Apache 的版本取决于在安装时指定的内容。

最后,命令python --version 将告诉您此 Python 2 副本的版本。python3 --version 将对 Python 3 执行相同操作。每当您使用此 Python 本地副本执行脚本时,它将使用此蟒蛇版本。

从脚本中获取 Python 版本:

from sys import version_info   
print version_info

输出(取决于您的版本,但看起来像这样):

sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0)

【讨论】:

  • 感谢您帮助我让 python 3.x 工作并确认它。
【解决方案3】:

我发现最好和最优雅的方法是简单地指定位于环境本身的 python 解释器。只需使用以下命令开始您的 wsgi 文件:

#!/path/to/your/venv/bin/python

等等。

【讨论】:

  • 我在至少 3 个不同的问题中注意到了你的这个答案 - 遗憾的是它对我不起作用,经过一些研究,它也不建议依赖它......
  • @ningelsohn 很好(并且仍然)对我有用。我想每种情况都有不同的解决方案。
猜你喜欢
  • 2015-08-19
  • 2012-03-29
  • 2012-03-26
  • 1970-01-01
  • 2012-09-18
  • 2017-01-30
  • 2011-08-13
  • 2013-09-21
  • 2016-08-12
相关资源
最近更新 更多