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

Python Flask using mod_wsgi in Apache; how to get venv to work?

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

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

我用这个让它工作: https://www.jakowicz.com/flask-apache-wsgi/

然后不知怎么发现Apachemod_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。

希望有人能告诉我该怎么做...

-- 罗尼

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

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

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

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

. /venv/bin/activate

. 本质上告诉终端 window activate 文件位于 /venv/bin (假设我们在上述目录的顶层) ,必须执行。当您在终端 window.

的新行的开头看到字符串 (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)

如何找到我的应用程序使用的 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 包并安装 mod_wsgi从您要使用的 Python 版本的源代码。为此,最简单的安装方法是使用 pip install mod_wsgi。参见:

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

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

Et voilà.