uwsgi和django:ImportError:没有名为__future__的模块

时间:2013-08-08 19:08:15

标签: django python-2.7 nginx virtualenv uwsgi

当我尝试部署我的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版的更新有关。

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

可能有几个原因。最有可能是权限问题。 uwsgi以对虚拟环境中的python文件没有读取访问权限的用户身份运行。

检查虚拟环境

无论如何,第一步是获取virtualenv并检查导入是否有效。

. /path/to/venv/activate/script
python -c 'import __future__'

如果这行得通,则说明您的virtualenv状况良好。

检查模块是否在python的模块搜索路径中

现在,错误被隔离到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是否具有读取/访问模块的权限

确保存在目录,您需要确保文件许可权允许uwsgi加载该模块。

sudo -u <uwsgi user> -c python /path/to/__future__/module.py

罪魁祸首是uwsgi用户没有权限。