当我尝试部署我的django页面时,uWSGI告诉:
...
added /env/project/ to pythonpath.
Traceback (most recent call last):
File "/env/project/project/wsgi.py", line 27, in <module>
from django.core.wsgi import get_wsgi_application
File "/env/lib/python2.7/site-packages/Django-1.5.1-py2.7.egg/django/core/wsgi.py", line 1, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/env/lib/python2.7/site-packages/Django-1.5.1-py2.7.egg/django/core/handlers/wsgi.py", line 1, in <module>
from __future__ import unicode_literals
ImportError: No module named __future__
unable to load app 0 (mountpoint='') (callable not found or import error)
我试过
django-admin.py startproject project
用新项目测试,但它也不起作用。我还使用project.ini玩了一下并重新安装了virtualenv(试过:2.7 3.0 3.3)。什么都没有帮助。
Nginx和uWSGI正在一个chrooted监狱中运行。 Django在virtualenv-2.7中安装了easy_install-2.7。
我真的不明白这里发生了什么。我认为这与django 1.5版的更新有关。
有人有想法吗?
答案 0 :(得分:2)
可能有几个原因。最有可能是权限问题。 uwsgi
以对虚拟环境中的python文件没有读取访问权限的用户身份运行。
无论如何,第一步是获取virtualenv并检查导入是否有效。
. /path/to/venv/activate/script
python -c 'import __future__'
如果这行得通,则说明您的virtualenv状况良好。
现在,错误被隔离到uwsgi对virtualenv的使用。运行以下代码片段,找到__future__
模块的位置。
python -c 'import __future__; print __future__.__file__'
当uwsgi运行python时,它必须以用户身份并在环境中运行。如果环境错误,python将无法找到其模块。确保__future__
模块的位置在python的模块搜索路径中。
# Open /env/project/project/wsgi.py and add the following lines to the
# beginning.
import sys; print sys.path
重新启动uwsgi并查找该打印的目录列表。您应该发现这些目录之一包含__future__
模块的路径。如果没有,那么您需要弄清楚如何纠正该路径。
确保存在目录,您需要确保文件许可权允许uwsgi加载该模块。
sudo -u <uwsgi user> -c python /path/to/__future__/module.py
罪魁祸首是uwsgi用户没有权限。