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 в папку.