2

当我尝试部署我的 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 在 chroot 监狱中运行。Django 在 vi​​rtualenv-2.7 中安装了 easy_install-2.7。

我真的不明白这里发生了什么。我认为这与 django 1.5 版的更新有关。

有人有想法吗?

4

1 回答 1

2

这可能有几个原因。很可能是权限问题。uwsgi以对 virtualenv 中的 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__'s 模块的路径。如果没有,那么您需要弄清楚如何更正该路径。

检查 uwsgi 是否具有读取/访问模块的权限

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

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

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

于 2018-10-16T22:28:18.340 回答