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

时间:2013-01-07 11:19:57

标签: python django uwsgi

我正在使用uwsgi来处理我的Django(版本= 1.4)项目,但是如果我运行则会出现错误

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()

6 个答案:

答案 0 :(得分:16)

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

from django.core.wsgi import get_wsgi_application

它找不到这些模块,因为没有安装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中的任何内容。

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

答案 1 :(得分:13)

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

答案 2 :(得分:10)

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

home=/path/to/venv/

通过网络浏览器进行测试:

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

答案 3 :(得分:2)

就我而言,我安装了Django应用程序以及Python3的所有其他内容,但uwsgi使用的是Python2。只需在运行uwsgi时检查日志,无论是使用Python2还是Python3,如果不一致,请重新安装uwsgi。在uwsgi启动日志中查找类似于以下行的行。

Python version: 3.4.3 (default, Oct 14 2015, 20:31:36) [GCC 4.8.4] VS Python version: 2.7.6 (default, Jun 22 2015, 18:01:27) [GCC 4.8.2]

答案 4 :(得分:0)

既然您接受了提及virtualenv的答案,那么您似乎就是在使用它。在这种情况下,请确保django目录中已安装virtualenv(例如venv)。

您可以在pipvirtualenv单独安装,也可以手动创建符号链接(如果您使用的是类Unix系统)到venv的site-packages

ln -s /usr/path_to_django venv/lib/python2.7/site-packages/django

答案 5 :(得分:0)

我收到此错误是因为我在virtualbox的共享文件夹中创建了虚拟环境,该文件夹不允许使用符号链接。我收到了一些错误,但一切似乎都有效,所以我继续,直到我收到此错误。当我重新创建我的虚拟环境时,问题得到了解决,确保没有错误并将uwsgi指向该文件夹。