Python ImportError:uwsgi没有名为django.core.wsgi的模块
我在Django(版本=1.4)项目中使用uwsgi,但是如果我运行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
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