ImportError:uwsgi没有名为django.core.wsgi的模块

use*_*717 20 python django uwsgi

我正在使用uwsgi作为我的Django(版本= 1.4)项目,但是如果我运行则会出错

uwsgi --ini django.ini
Run Code Online (Sandbox Code Playgroud)
from django.core.wsgi import get_wsgi_application
    ImportError: No module named django.core.wsgi

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

>>> import django.core.wsgi
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

Mad*_*ern 18

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

from django.core.wsgi import get_wsgi_application
Run Code Online (Sandbox Code Playgroud)

它找不到这些模块,因为没有安装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]))
Run Code Online (Sandbox Code Playgroud)

如果你运行virtualenv中安装的uwsgi的本地版本,那么路径将被设置正确,但如果你运行uwsgi的全局版本,它通常不会正确设置PYTHONPATH.

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

uwsgi --http :8001 --module wsgi --virtualenv /home/jdoe/myvirtualenv
Run Code Online (Sandbox Code Playgroud)

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

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

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

print os.environ['VIRTUAL_ENV']
Run Code Online (Sandbox Code Playgroud)

这将打印:

/home/jdoe/myvirtualenv
Run Code Online (Sandbox Code Playgroud)

但是PYTHONPATH 设置正确,并且不包含virtualenv中的任何内容.

我无法解释为什么会这样.


Gök*_*şçı 16

如果安装gunicorn上都sudo apt-get install gunicorn(venv) pip install gunicorn,使用sudo apt-get remove gunicorn和重新启动您的虚拟环境.这样,它对我有用.

  • 哇这对我有用,谢谢!我使用 pip3 install gunicorn 而不是 sudo apt-get install gunicorn 重新安装了 Gunicorn (2认同)

sne*_*awo 10

如果您使用virtualenv尝试添加home到django.ini:

home=/path/to/venv/
Run Code Online (Sandbox Code Playgroud)

要通过Web浏览器进行测试:

uwsgi --ini django.ini --protocol=http
Run Code Online (Sandbox Code Playgroud)

  • "django.ini"在哪里? (2认同)