uwsgi + nginx + Django:ImportError:没有名为django.core.wsgi的模块

时间:2015-02-03 10:17:55

标签: django nginx uwsgi

我正在尝试使用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

我将如何解决这个问题?我已经坚持了一天了。 任何想法都非常感谢。 提前谢谢!

4 个答案:

答案 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