当我像这样运行它时,我的开发应用程序与开发服务器的工作效果非常好:
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中安装了所有必需的模块 ,这就是为什么它在运行开发服务器时工作正常。
完全被这个困扰了。任何帮助表示赞赏。
答案 0 :(得分:1)
你需要告诉Apache应该使用哪个Python可执行文件来启动python进程。如果没有显式配置,Apache可能会在系统路径中出现第一个'python'。 (实际上没有,请参阅下面的注释。使用分发默认python。)
不幸的是,看起来您需要重新编译mod_wsgi,因为python exe只能由configure
脚本更改。
在您的情况下:./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/)。