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à.
我一直在努力让它发挥作用,到处搜索并翻页阅读,但似乎没有找到答案。
我有带 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à.