25

我正在为我的 Django(version =1.4) 项目使用 uwsgi,但是如果我运行则会出现错误

uwsgi --ini django.ini
从 django.core.wsgi 导入 get_wsgi_application
    ImportError:没有名为 django.core.wsgi 的模块

但我可以按如下方式导入 django.core.wsgi:

>>> import django.core.wsgi

django.ini 文件:

[uwsgi]
chdir=/path/to/my/app
模块=app.wsgi:应用程序
大师=真
真空=真
最大请求数=5000
套接字=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()
4

6 回答 6

25

如果您在两者上都安装了 gunicornsudo apt-get install gunicorn(venv) pip install gunicorn,请使用sudo apt-get remove gunicorn并重新启动您的虚拟环境。这样,它对我有用。

于 2017-07-09T19:22:47.570 回答
24

ImportError: No module named django.core.wsgi当 uwsgi 尝试读取 wsgi.py 文件时,通常会出现该错误,并出现以下行:

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)

令人惊讶的是,设置 $VIRTUAL_ENV 对 PYTHONPATH 没有影响

奇怪的是,如果你不使用 --virtualenv 参数,环境变量$VIRTUAL_ENV将被正确设置。通过插入 wsgi.py 进行测试:

print os.environ['VIRTUAL_ENV']

这将打印:

/home/jdoe/myvirtualenv

但是 PYTHONPATH设置正确,并且不包含来自 virtualenv 的任何内容。

我无法解释为什么会这样。

于 2014-12-19T15:25:41.907 回答
14

如果你使用 virtualenv 尝试添加home到 django.ini:

home=/path/to/venv/

通过网络浏览器对其进行测试:

uwsgi --ini django.ini --protocol=http
于 2013-01-07T12:42:11.117 回答
3

就我而言,我为 Python3 安装了 Django 应用程序和其他所有东西,但 uwsgi 使用的是 Python2。运行uwsgi的时候检查一下log是用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]

于 2016-05-31T08:44:16.310 回答
0

由于您接受了提到的答案virtualenv,因此您似乎在使用它。在这种情况下,请确保它django已安装在您的virtualenv目录中(例如venv)。

pip您可以从下单独安装它virtualenv或手动创建符号链接(如果您在类 Unix 系统上)到venv的站点包

ln -s /usr/path_to_django venv/lib/python2.7/site-packages/django
于 2015-04-17T09:42:54.073 回答
0

我收到此错误是因为我在不允许符号链接的 virtualbox 共享文件夹中创建了虚拟环境。我收到了一些错误,但似乎一切正常,所以我继续,直到我收到这个错误。当我重新创建我的虚拟环境,确保没有错误并将 uwsgi 指向该文件夹时,问题就解决了。

于 2016-09-25T01:40:02.173 回答