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

Python ImportError:uwsgi没有名为django.core.wsgi的模块,python,django,uwsgi,Python,Django,Uwsgi,我在Django(版本=1.4)项目中使用uwsgi,但是如果我运行 uwsgi --ini django.ini 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 如果使用virtualenv,请尝试将home添加到django.ini: home=/path/to/ven

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

uwsgi --ini django.ini
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
如果使用virtualenv,请尝试将
home
添加到django.ini:

home=/path/to/venv/
要通过web浏览器进行测试,请执行以下操作:

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

错误
ImportError:当uwsgi尝试读取wsgi.py文件时,通常会出现没有名为django.core.wsgi的模块的错误,并出现以下行:

from django.core.wsgi import get_wsgi_application
它在这些模块中找不到这个,因为Django没有安装,或者如果安装了,它不在PYTHONPATH中

如果您的项目位于virtualenv中,而Django仅安装在此virtualenv中,那么Django模块的路径不在中,因此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的路径,它将找到正确的Python路径。只需使用
--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
的答案,你似乎在使用它。在这种情况下,确保
django
安装在
virtualenv
目录中(比如
venv

您可以从
virtualenv
下的
pip
单独安装它,或者手动创建一个符号链接(如果您在类Unix系统上)到
venv
的站点软件包

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

在我的例子中,我为Python3安装了Django应用程序和其他所有东西,但uwsgi使用的是Python2。只要在运行uwsgi时检查日志是否使用Python2或Python3,如果不一致,请重新安装uwsgi。在uwsgi启动日志中查找类似于下一行的行

Python版本:3.4.3(默认,2015年10月14日,20:31:36)[GCC 4.8.4]
VS
Python版本:2.7.6(默认值,2015年6月22日,18:01:27)[GCC 4.8.2]

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

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

你有本地的
django.py
文件吗?django.ini在哪里?看看接收:没有名为“encodings”的模块,它正在工作,我也是先用apt-get-install-gunicorn安装,然后用pip安装的。我把sudo移走了。它工作得很好。谢谢这对我有用,谢谢!我用pip3安装Gunicorn而不是sudo-apt-get安装Gunicorn重新安装了Gunicorn
——virtualenv
是关键!感谢您的完美分析@mads skjern
print os.environ['VIRTUAL_ENV']
/home/jdoe/myvirtualenv
ln -s /usr/path_to_django venv/lib/python2.7/site-packages/django