ImportError: нет модуля с именем django.core.wsgi Apache + VirtualEnv + AWS + WSGI
Я пытаюсь опубликовать свой сайт на экземпляре Amazon EC2, и я продолжаю получать ошибку 500. Я действительно не знаю почему.
//Файлы журнала
[Sun Feb 17 23:12:48.066802 2013] mod_wsgi (pid=2102): Target WSGI script '/srv/www/app/poka/apache/wsgi.py' cannot be loaded as Python module.
[Sun Feb 17 23:12:48.066840 2013] mod_wsgi (pid=2102): Exception occurred processing WSGI script '/srv/www/app/poka/apache/wsgi.py'.
[Sun Feb 17 23:12:48.066864 2013] Traceback (most recent call last):
[Sun Feb 17 23:12:48.066889 2013] File "/srv/www/mysite/poka/apache/wsgi.py", line 26, in <module>
[Sun Feb 17 23:12:48.066920 2013] from django.core.wsgi import get_wsgi_application
[Sun Feb 17 23:12:48.066945 2013] ImportError: No module named django.core.wsgi
//Файлы конфигурации Apache
WSGIScriptAlias / /srv/www/app/mysite/apache/wsgi.py
WSGIDaemonProcess mysite python-path=/srv/www/app/mysite:/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages
WSGIProcessGroup mysite
<Directory /srv/www/app/mysite/apache/>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
<Directory /srv/www/app/mysite/apache/>
Order deny,allow
Allow from all
</Directory>
<Directory /home/ec2-user/app/mysite/static>
Order deny,allow
Allow from all
</Directory>
<Directory /home/ec2-user/app/mysite/media>
Order deny,allow
Allow from all
</Directory>
//wsgi.py
import os
import sys
import site
site.addsitedir('/home/ec2-user/.virtualenvs/mysite-main/lib/python2.7/site-packages')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
path = '/srv/www/app/mysite'
if path not in sys.path:
sys.path.append(path)
Ответы
Ответ 1
Я знаю, что это старый поток, но я только что столкнулся с той же проблемой, и я не думаю, что это вызвано отсутствующим пакетом. Поскольку основной дистрибутив Django содержит корректный обработчик wsgi уже.
Проблема заключается в том, что при выполнении wsgi.py он пропускает пакеты пакетов сайта из вашего virtualenv. (Если вы активировали свой virtualenv и сделали pip install django, тогда все в порядке. У вас есть необходимые пакеты django).
Насколько я могу судить, я исправил проблему с изменением sys.path в файле Path/to/Project/Project/wsgi.py.
Вам нужно добавить каталог проекта и ваши виртуальные сайты-сайты в список sys.path.
Вот мой файл wsgi.py, содержащийся в моем проекте (Разговор о wsgi.py, созданный с помощью django-admin.py start-project)..., который мне пришлось изменить, чтобы он работал с Apache
# =====================
# wsgi.py file begin
import os, sys
# add the hellodjango project path into the sys.path
sys.path.append('<PATH_TO_MY_DJANGO_PROJECT>/hellodjango')
# add the virtualenv site-packages path to the sys.path
sys.path.append('<PATH_TO_VIRTUALENV>/Lib/site-packages')
# poiting to the project settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# wsgi.py file end
# ===================
Убедитесь, что:
-
вы добавили mod_wsgi в модули Apache dir
mod_wsgi должен быть скомпилирован для ОС, версии Apache и Python у вас есть
-
добавлена команда загрузочного модуля в ваш httpd.conf для загрузки модуля mod_wsgi
LoadModule wsgi_module modules/mod_wsgi.so
-
настроил специфику Django в вашем httpd.conf или любом conf, который вы включили в свой httpd.conf
На основе документации Как использовать Django с Apache и mod_wsgi
WSGIScriptAlias / <PATH_TO_PROJECT>/hellodjango/hellodjango/wsgi.py
WSGIPythonPath <PATH_TO_PROJECT>:<PATH_TO_VIRTUALENV>/Lib/site-packages
<Directory <PATH_TO_PROJECT>/hellodjango/hellodjango>
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>
Надеюсь, это поможет. Это сработало для меня.
Ответ 2
Добавьте это в конфигурационный файл Apache:
WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
Ответ 3
Для меня это показало, что Django не был установлен на сервере. Исправлено с помощью
pip install Django
Ответ 4
У меня была аналогичная ошибка только сейчас. Оказывается, наш код Django был разработан на python 3.5, но по некоторым причинам люди, которые развернули наш сервер, установили virtualEnv с помощью python 2.7. Мы перераспределились с помощью python 3.5, и все сработало для нас
Ниже появилось сообщение об ошибке:
$ python serviceStartup.py
Traceback (most recent call last):
File "serviceStartup.py", line 10, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
Надеюсь, это поможет любому, кто увидит подобное сообщение об ошибке!
Ответ 5
Вы очень хорошо настроили моего друга, просто нужно предоставить пользователю apache разрешение на доступ к проектам и виртуальным серверам.
Пример:
sudo chown -R www-data:www-data /home/ubuntu/projects
sudo chown -R www-data:www-data /home/ubuntu/virtualenv
Это решило мою проблему с ImportError: No module named django.core.wsgi
(папки virtualenvs) и ImportError: No module named <project-name>.settings
(папки проектов)
Ответ 6
На первый взгляд, я сожалею о своем английском. Я также столкнулся с этой проблемой, и я решил ее, изменив файл wsgi.py на:
import os
import django
from django.core.handlers.wsgi import WSGIHandler
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eisentask.settings.production")
django.setup(set_prefix=False)
application = WSGIHandler()
Ответ 7
Для меня это были некоторые переменные, которые нужно было установить (для окон):
set PYTHONHOME=F:\path\to\python
set PYTHONPATH=F:\path\to\python
Ответ 8
Убедитесь, что вы используете модуль uwsgi, установленный внутри virtualenv, например:
/home/ubuntu/venv/bin/uwsgi --ht :8000 --module mysite.wsgi