一尘不染

让Flask使用Python3(Apache / mod_wsgi)

flask

我已经运行了一个基本的“ hello world” Flask应用程序。

我在使用Apache 2.4的Ubuntu 14.04上。我已经安装了mod_wsgi。

我创建了一个~/web/piFlask/venv/以容纳安装了flask的virtualenv创建的Python2。

但是,我希望我的flaskapp导入我编写的Python3.x模块。

我需要怎么做才能做到这一点?

我尝试创建一个~/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中进行设置

但是我在某处找到一条指令,说你必须为Py3编译mod_wsgi,而最底层很快就会解决此问题。


阅读 614

收藏
2020-04-05

共1个答案

一尘不染

正确,mod_wsgi需要针对特定​​的Python版本进行编译,因为它实际上不会执行“ python”可执行文件。相反,Python库链接到mod_wsgi。

最终结果是你无法在使用Python 2解释器运行的应用程序中混合使用Python 3代码。

你必须考虑使代码在Python 2和3下都可运行,然后可以选择要使用的代码,并使用为选择使用的版本编译的mod_wsgi版本。

2020-04-05