我正在尝试使用nginx + uwsgi部署Django应用程序。 我创建了一个虚拟环境(virtualenv),并在虚拟环境中安装了uwsgi和Django(即本地到虚拟环境)。我没有全球Django和uwsgi。当我运行uwsgi --ini project.ini时,我遇到了'ImportError:没有名为django.core.wsgi的模块'异常:
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 5987)
spawned uWSGI worker 1 (pid: 5988, cores: 1)
spawned uWSGI worker 2 (pid: 5989, cores: 1)
spawned uWSGI worker 3 (pid: 5990, cores: 1)
spawned uWSGI worker 4 (pid: 5991, cores: 1)
根据我的搜索,如果您使用的是Django1.5或更低版本,建议将env和pythonpath变量放在ini中。但是,我使用的是Django 1.7,所以我不再放置它们了。这是我的project.ini:
#project.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /root/virtualenv/project
# Django wsgi file
module = project.wsgi:application
# the virtualenv (full path)
home = /root/virtualenv
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe
socket = /root/virtualenv/project/project.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
chown-socket = root:root
# clear environment on exit
vacuum = true
# other config options
uid = root
gid = root
processes = 4
daemonize = /var/log/uwsgi/project.log
no-site = True
我将如何解决这个问题?我已经坚持了一天了。 任何想法都非常感谢。 提前谢谢!
答案 0 :(得分:2)
你的模块是指向你的项目,不应该指向你的项目主应用程序,它可以找到wsgi文件吗?
所以我的INI文件看起来像这样。
在我的特定情况下,我使用的是虚拟环境,django 1.7和uwsgi。
vhost = true
plugins = python
socket = /tmp/noobmusic.sock
master = true
enable-threads = true
processes = 2
wsgi-file = /home/myname/webapps/music/music/music/wsgi.py
virtualenv = /home/myname/webapps/music/musicenv/
chdir = /home/myname/webapps/music/music/
这是我设置uwsgi的唯一网站,因为我通常使用mod-wsgi而且遗憾的是不记得所有步骤。
答案 1 :(得分:1)
我有类似的问题。通过确保使用与virtualenv的python版本相同的python版本(2/3)安装uwsgi来解决它 - 在数小时之后。否则它将不会使用你的virtualenv因此开始抛出'找不到模块xyz'的错误。要在python3下安装uwsgi,你必须使用pip3(反过来可能需要安装类似'apt-get install python-pip3'的东西)。在cli或.ini文件上调用uwsgi时,你需要引用你的virtualenv提到完整路径(它在/ bin /所在的文件夹上方结束一个文件夹级别;所以/ example / myvenv / bin / activate表示完整路径是/ example / myvenv。
我把uwsgi安装全局设置在我的virtualenv之外。我认为上面适用/也可以在virtualenv中安装uwsgi时使用,但还没有尝试过(还)。
答案 2 :(得分:0)
我在配置中看不到任何问题(虽然我不是很擅长这些主题)。我可以尝试建议一些步骤来解决问题。
测试uwsgi 而不使用virtualenv
。请注意,虚拟目录只是一个目录,因此请将其添加到PYTHONPATH
并运行uwsgi
。
在此之前你可以尝试
python -c 'import django.core.wsgi'
如果可行,则问题出在uwsgi virtualenv配置中。
测试virtualenv 。运行它并检查是否可以导入模块。
如果可行,则问题出在uwsgi
。转到上一个案例。
答案 3 :(得分:0)
在系统范围内uwsgi
与虚拟环境python保持相同版本。
在我的环境中,我的虚拟环境是python3.7,但是系统默认的python是python3.6。
卸载uWSGI
,并使用python3.7重新安装系统范围的uWSGI
之后,问题已解决。
sudo pip uninstall uwsgi
sudo -H python3.7 -m pip install uwsgi