导入错误:未找到uwsgi的django.core.wsgi模块

2024-04-23 21:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django(version=1.4)项目中使用uwsgi,但是如果运行

uwsgi --ini django.ini
from django.core.wsgi import get_wsgi_application
    ImportError: No module named django.core.wsgi

但我可以导入django.core.wsgi,如下所示:

>>> import django.core.wsgi

django.ini文件:

[uwsgi]
chdir=/path/to/my/app
module=app.wsgi:application
master=True
vacuum=True
max-requests=5000
socket=127.0.0.1:9000

wsgi.py公司

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Tags: todjangofromcoreimporttrueappwsgi
3条回答

当uwsgi尝试读取wsgi.py文件时,通常会出现以下错误ImportError: No module named django.core.wsgi

from django.core.wsgi import get_wsgi_application

它找不到这些模块,因为没有安装Django,或者如果安装了Django,它就不在PYTHONPATH中。

如果您的项目位于virtualenv中,而Django仅安装在此virtualenv中,则Django模块的路径不在PYTHONPATH中,因此Python找不到它。

如果您感兴趣,可以将以下代码插入wsgi.py文件,并查看PYTHONPATH:

import os
print '===== sys.path / PYTHONPATH ====='
for k in sorted(os.environ.keys()):
    v = os.environ[k]
    print ('%-30s %s' % (k,v[:70]))

如果运行安装在virtualenv中的本地版本的uwsgi,则路径设置将正确,但如果运行全局版本的uwsgi,则通常不会正确设置PYTHONPATH。

你可以告诉uWSGI到virtualenv的路径,它会找出正确的PYTHONPATH。只需使用--virtualenv命令行参数,例如:

uwsgi --http :8001 --module wsgi --virtualenv /home/jdoe/myvirtualenv

(以下参数的作用与--virtualenv完全相同:--venv,--home,-H)

令人惊讶的是,设置$VIRTUAL_ENV对PYTHONPATH没有影响

奇怪的是,如果不使用--virtualenv参数,环境变量$VIRTUAL_ENV将被正确设置。通过插入wsgi.py进行测试:

print os.environ['VIRTUAL_ENV']

这将打印:

/home/jdoe/myvirtualenv

但是PYTHONPATH的设置不正确,并且不包含来自virtualenv的任何内容。

我无法解释这是为什么。

如果使用virtualenv,请尝试将home添加到django.ini:

home=/path/to/venv/

要通过web浏览器进行测试,请执行以下操作:

uwsgi --ini django.ini --protocol=http

如果在sudo apt-get install gunicorn(venv) pip install gunicorn上都安装了gunicorn,请使用sudo apt-get remove gunicorn并重新启动虚拟环境。这样,对我有效。

相关问题 更多 >