我正在使用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()
答案 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)
奇怪的是,如果不使用--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
)。
您可以在pip
下virtualenv
单独安装,也可以手动创建符号链接(如果您使用的是类Unix系统)到venv
的site-packages
ln -s /usr/path_to_django venv/lib/python2.7/site-packages/django
答案 5 :(得分:0)
我收到此错误是因为我在virtualbox的共享文件夹中创建了虚拟环境,该文件夹不允许使用符号链接。我收到了一些错误,但一切似乎都有效,所以我继续,直到我收到此错误。当我重新创建我的虚拟环境时,问题得到了解决,确保没有错误并将uwsgi指向该文件夹。