[英]Python Flask using mod_wsgi in Apache; how to get venv to work?
我一直在努力让它发挥作用,到处搜索,上下翻页,但似乎没有找到答案。
我有带有 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版本?
请参阅文档:
它为您提供了可以使用的测试。
我如何找到我的mod_wsgi版本?
使用WSGI environ
词典中的mod_wsgi.version
键。 请参阅以下内容中的参考:
您还可以使用:
import mod_wsgi
print(mod_wsgi.version)
如何获得我的应用程序以使用我的venv?
可以在以下位置找到有关使用虚拟环境的文档:
如状态所示,如果您的mod_wsgi使用系统Python,并且您想使用其他Python安装或版本,则不能强制其使用其他安装或版本。 必须针对要使用的特定Python版本编译mod_wsgi二进制文件。
由于系统mod_wsgi软件包通常是较旧的版本,而不是您要使用的Python版本,因此您应卸载系统mod_wsgi软件包,并针对要使用的Python版本从源代码安装mod_wsgi。 为此,最简单的安装方法是使用pip install mod_wsgi
。 看到:
继续问题的评论部分中的讨论:
假设以下目录具有在/venv
文件夹中创建的虚拟环境:
- main.py
- /static
- /js
- /html
- /css
- /venv
- /bin
- activate
要激活虚拟环境,从而使用Python的本地副本(而不是全局副本),必须使用以下命令:
. /venv/bin/activate
的.
本质上是告诉终端窗口必须执行位于/venv/bin
(假设我们在上述目录的顶层)中的activate
文件。 当您在终端窗口中的新行的开头看到字符串(venv)
时,您将知道命令成功。
现在, which
命令将确认您正在使用Python的本地副本:
which python
现在您的虚拟环境已激活,您可以使用pip在该虚拟环境中本地安装所需的任何模块。 您可以根据需要指定安装模块的特定版本,也可以仅安装最新版本。 瓶或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 解释器。 只需使用以下命令启动您的 wsgi 文件:
#!/path/to/your/venv/bin/python
等等。
我写了一篇关于这个主题的博客文章,希望它能有所帮助。 最重要的是,与mod_wsgi关联的python版本需要匹配pip虚拟环境中使用的python版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.