ImportError: нет модуля с именем django.core.wsgi для uwsgi - программирование

ImportError: нет модуля с именем django.core.wsgi для uwsgi

Я использую uwsgi для моего проекта Django (version = 1.4), но есть ошибка, если я запускаю

uwsgi --ini django.ini
from django.core.wsgi import get_wsgi_application
    ImportError: No module named django.core.wsgi

но я мог бы импортировать django.core.wsgi следующим образом:

>>> import django.core.wsgi

файл 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 development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
4b9b3361

Ответ 1

Если вы используете virtualenv, попробуйте добавить home в django.ini:

home=/path/to/venv/

Проверить его через веб-браузер:

uwsgi --ini django.ini --protocol=http

Ответ 2

Ошибка ImportError: No module named django.core.wsgi обычно возникает, когда uwsgi пытается прочитать файл wsgi.py и подходит к строке:

from django.core.wsgi import get_wsgi_application

Он не может найти эти модули, потому что Django не установлен, или если он установлен, он не находится в PYTHONPATH.

Если ваш проект находится в виртуальном пространстве, а Django установлен только в этом виртуальном пространстве, то путь к модулям 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]))

Если вы запустите локальную версию uwsgi, установленную в virtualenv, то путь будет установлен правильно, но если вы запустите глобальную версию 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.

Я не могу объяснить, почему это так.

Ответ 3

В моем случае я установил приложение Django и все остальное для Python3, но uwsgi использовал Python2. Просто проверьте журнал во время работы uwsgi, использует ли он Python2 или Python3, и переустановите uwsgi, если он несовместим. Найдите строку, похожую на строку ниже, в журнал запуска uwsgi.

Python version: 3.4.3 (default, Oct 14 2015, 20:31:36) [GCC 4.8.4] В.С. Python version: 2.7.6 (default, Jun 22 2015, 18:01:27) [GCC 4.8.2]

Ответ 4

Если вы установили gunicorn на sudo apt-get install gunicorn и (venv) pip install gunicorn, используйте sudo apt-get remove gunicorn и перезапустите свою виртуальную среду. Таким образом, это сработало для меня.

Ответ 5

Поскольку вы приняли ответ, который упоминает virtualenv, кажется, что вы его используете. В этом случае убедитесь, что django установлен в вашем каталоге virtualenv (скажем venv).

Вы можете отдельно установить его из pip под virtualenv или вручную создать символическую ссылку (если вы используете Unix-подобную систему) в venv site-packages

ln -s /usr/path_to_django venv/lib/python2.7/site-packages/django

Ответ 6

Я получил эту ошибку, потому что создал виртуальную среду в общей папке виртуального бокса, которая не допускала символических ссылок. Я получил некоторые ошибки, но все, казалось, работало, поэтому я продолжил, пока не получил эту ошибку. Проблема была решена, когда я воссоздал свою виртуальную среду, убедился, что ошибок не было и указал uwsgi на папку.