加载wsgi时,flask app失败,但与dev服务器

时间:2016-12-12 21:10:47

标签: python apache flask mod-wsgi

当我像这样运行它时,我的开发应用程序与开发服务器的工作效果非常好:

python manage.py runserver

但是当我尝试用wsgi运行它时,我得到各种“模块未安装”错误,甚至是语法错误。奇怪的是,每次我点击app路径时都会显示不同的错误。

关于一些错误,从apache错误日志的输出中,我可以看到它正在尝试运行2.7版本的软件包,当我使用3.4时。

File "/usr/lib/python2.7/dist-packages/requests/__init__.py", line 55, in <module>

我不知道为什么会这样,python 3是服务器上的默认设置

$ python --version
Python 3.4.2

是系统中每个用户的输出。我使用virtualenv,但我确实按照这些说明使用virtualenv设置mod_wsgi:http://flask.pocoo.org/docs/0.11/deploying/mod_wsgi/

我的wsgi文件如下所示:

import sys

activate_this = '/home/flask-dev/es_app/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

print(sys.path)

from searchapp import app as application

并且当我像'python run.wsgi'那样运行时,print(sys.path)输出这个:

['/home/flask-dev/es_app/venv/lib/python3.4/site-packages', '/home/flask-dev/es_app', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/lib/python3/dist-packages']

即。 2.7包的路径无处可见。此外,我的virtualenv中安装了所有必需的模块 ,这就是为什么它在运行开发服务器时工作正常。

完全被这个困扰了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

你需要告诉Apache应该使用哪个Python可执行文件来启动python进程。如果没有显式配置,Apache可能会在系统路径中出现第一个'python'。 (实际上没有,请参阅下面的注释。使用分发默认python。

不幸的是,看起来您需要重新编译mod_wsgi,因为python exe只能由configure脚本更改。

http://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#multiple-python-versions

在您的情况下:./configure --with-python=/home/flask-dev/es_app/venv/bin/python

对于应该简单的事情来说,这是很多工作。通常我只是在反向代理模式下使用Apache(感谢mod_proxy),并将其指向外部WSGI服务器,如Gunicorn(http://gunicorn.org/)或Waitress(http://docs.pylonsproject.org/projects/waitress/en/latest/)。