ImportError: нет модуля с именем django.ядро.тут WSGI для на uwsgi

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

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

но я могу импортировать django.ядро.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's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

6 ответов


Если вы используете virtualenv попробуйте добавить home в Джанго.ini:

home=/path/to/venv/

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

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

ошибка 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]))

если вы запустите локальную версию 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.

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


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


в моем случае я установил приложение 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]


так как вы приняли ответ, в котором упоминается virtualenv, Кажется, вы его используете. В этом случае убедитесь, что django установлен в С

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

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