我已经运行了一个基本的“ hello world” Flask应用程序。
我在使用Apache 2.4的Ubuntu 14.04上。我已经安装了mod_wsgi。
我创建了一个~/web/piFlask/venv/以容纳安装了flask的virtualenv创建的Python2。
~/web/piFlask/venv/
但是,我希望我的flaskapp导入我编写的Python3.x模块。
我需要怎么做才能做到这一点?
我尝试创建一个~/web/piFlask/venv3/并修改~/web/piFlask/piFlask.wsgi:
~/web/piFlask/venv3/
~/web/piFlask/piFlask.wsgi:
import os, sys PROJECT_DIR = '/home/pi/web/piFlask' activate_this = os.path.join(PROJECT_DIR, 'venv3/bin', 'activate_this.py') execfile(activate_this, dict(__file__=activate_this)) sys.path.insert(0, PROJECT_DIR) from piFlask import app as application application.debug = True
但是我认为这还不够。这个.wsgi实际上是一个将由mod_wsgi执行的Python文件,我确定它将使用Py2.x解释器来执行。
因此,如果我正确理解,则mod_wsgi会启动系统Python以执行此.wsgi,这反过来会启动我的~/web/piFlask/venv/解释器以实际处理请求。
我想我可以说服mod_wsgi使用系统Python3或我自己的venv3 / …通过WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages在/etc/apache2/mods-available/wsgi.conf中进行设置
WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages
/etc/apache2/mods-available/wsgi.conf
但是我在某处找到一条指令,说你必须为Py3编译mod_wsgi,而最底层很快就会解决此问题。
正确,mod_wsgi需要针对特定的Python版本进行编译,因为它实际上不会执行“ python”可执行文件。相反,Python库链接到mod_wsgi。
最终结果是你无法在使用Python 2解释器运行的应用程序中混合使用Python 3代码。
你必须考虑使代码在Python 2和3下都可运行,然后可以选择要使用的代码,并使用为选择使用的版本编译的mod_wsgi版本。