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)
奇怪的是,如果你不使用--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
和重新启动您的虚拟环境.这样,它对我有用.
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)