在Apache中使用mod_wsgi的Python Flask;如何让venv工作?

时间:2018-05-24 18:50:07

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

我一直在努力让它发挥作用,并在各处搜索并阅读页面并向下翻页,但似乎没有找到答案。

我有一个带有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。

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

- Ronni

2 个答案:

答案 0 :(得分:2)

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

参见文档:

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

如何找到我的mod_wsgi版本?

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

您也可以使用:

import mod_wsgi
print(mod_wsgi.version)

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

有关使用虚拟环境的文档,请访问:

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

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

答案 1 :(得分:0)

继续讨论你的问题的评论部分:

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

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

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

. /venv/bin/activate

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

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

which python

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

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

从脚本中获取Python版本:

from sys import version_info   
print version_info

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

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