【问题标题】:uwsgi + nginx + Django : ImportError: No module named django.core.wsgiuwsgi + nginx + Django:ImportError: No module named django.core.wsgi
【发布时间】:2015-04-02 12:02:25
【问题描述】:

我正在尝试使用 nginx + uwsgi 部署 Django 应用程序。 我创建了一个虚拟环境(virtualenv),并在虚拟环境中安装了 uwsgi 和 Django(即虚拟环境的本地)。我没有全局 Django 和 uwsgi。当我运行 uwsgi --ini project.ini 时,出现“ImportError: No module named 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

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

【问题讨论】:

  • 但是你是如何运行 uwsgi 的?您通常只需要在运行之前激活 virtualenv。
  • 这是我的问题;如何运行uwsgi...我确实激活了虚拟环境然后运行uwsgi。但如前所述,我得到了上面的错误
  • 但是当你遇到这个错误时你做了什么?请显示您输入的命令的确切顺序。
  • 1.) 安装 python2.7 (带有 pip 和 virtualenv) 2.) virtualenv 3.) source bin/activate 4.) 安装 Django 5. 安装 uWSGI 6.) 修改 project.wsgi 7. ) 运行 uwsgi --ini project.ini

标签: django nginx uwsgi


【解决方案1】:

你的模块指向你的项目,不应该指向你的项目主应用程序,这样它就可以找到 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,不幸的是不记得所有步骤。

【讨论】:

  • 那是哪个变量?
  • # Django wsgi 文件模块 = project.wsgi:application
  • 我认为它可以找到我的 wsgi 文件,因为 chdir 设置为 /root/virtualenv/project。进入此目录后,wsgi.py 位于项目中(即 /root/virtualenv/project/project/wsgi.py)。还是谢谢
  • 我更新了我的答案以提供我的 .ini 文件的示例。不幸的是,我没有在 virtualenv 后面运行 uwsgi 的经验。但我确实让这个网站成功运行。
【解决方案2】:

我在您的配置中看不到任何问题(尽管我不太擅长这些主题)。我可以尝试建议一些步骤来定位问题。

  • 测试 uwsgi 不使用 virtualenv。请注意,虚拟目录只是一个目录,因此将其添加到您的PYTHONPATH 并运行uwsgi

    在此之前你可以尝试

    python -c 'import django.core.wsgi'

    如果可行,那么问题出在 uwsgi virtualenv 配置中。

  • 测试 virtualenv。运行它并检查模块是否可以导入。

    如果可行,那么问题出在uwsgi。转到上一个案例。

【讨论】:

    【解决方案3】:

    我有类似的问题。通过确保使用与您的 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 时上述适用/也可以工作,但还没有尝试过。

    【讨论】:

      【解决方案4】:

      保持系统范围的uwsgi 与您的虚拟环境python 的版本相同。 在我的环境中,我的虚拟环境是python3.7,但是系统默认的python是python3.6。 在我卸载uWSGI,并用python3.7重新安装系统范围的uWSGI后,问题已经解决了。

      sudo pip uninstall uwsgi
      sudo -H python3.7 -m pip install uwsgi
      

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        • 2013-06-27
        • 2015-05-08
        • 1970-01-01
        • 2013-08-13
        • 2013-05-12
        相关资源
        最近更新 更多