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