ImportError: Нет модуля с именем django.core.wsgi Apache + VirtualEnv + AWS + WSGI

Я пытаюсь опубликовать свой сайт на экземпляре EC2 Amazon, но постоянно получаю ошибку 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)

person abisson    schedule 17.02.2013    source источник


Ответы (11)


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

Проблема здесь в том, что при выполнении wsgi.py отсутствуют пакеты пакетов сайта из вашего virtualenv. (Если вы активировали свой virtualenv и выполнили pip install django, тогда все в порядке. У вас есть необходимые пакеты django).

Что касается меня, я исправил проблему, изменив sys.path в моем файле Path/to/Project/Project/wsgi.py.

Вы должны добавить каталог своего проекта и пакеты сайтов virtualenv в список sys.path. Вот мой файл wsgi.py, содержащийся в моем проекте (речь о wsgi.py, созданном с помощью стартового проекта django-admin.py)... который мне пришлось изменить, чтобы заставить его работать с 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
# ===================

Удостовериться:

  1. вы добавили mod_wsgi в модули Apache; директория mod_wsgi должна быть скомпилирована для вашей версии ОС, Apache и Python.

  2. добавил команду загрузки модуля в ваш httpd.conf для загрузки модуля mod_wsgi LoadModule wsgi_module modules/mod_wsgi.so

  3. настроенные особенности Django в вашем httpd.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>

Надеюсь это поможет. Это сработало для меня.

person Rabah B    schedule 18.03.2014
comment
Обновление wsgi.py, кажется, исправляет это для меня, за исключением того, что у моего site-packages был другой путь (и не с заглавной буквы L в lib): lib/python3.6/site-packages. Ваш путь может быть другим, fx. если у вас другая версия Python, я предлагаю проверить это. Также я не уверен, что означает PATH_TO_PROJECT/hellodjango. Предполагается ли, что это каталог, в котором находится settings.py? - person miyalys; 15.03.2017
comment
идеально!! после стольких ответов, говорящих одно и то же, т.е. Django не установлен в текущем virtualenv, наконец-то что-то стоящее - person coda; 31.03.2019

Я была такая же проблема. Мой libapache2-mod-wsgi был python 2.x, а не python 3.x

нашел решение здесь: https://stackoverflow.com/a/28118284/2489042

кредиты для @nima

$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3

Предупреждение от @alxs перед копированием/вставкой этих команд: если на сервере запущены проекты Python 2, использующие wsgi и apache, приведенные выше команды эффективно закроют их.

person hanesh    schedule 14.11.2019
comment
Из отзыва: Привет, хотя ссылки и являются отличным способом обмена знаниями, они на самом деле не ответят на вопрос, если они сломаются в будущем. Добавьте к своему ответу основное содержание ссылки, которая отвечает на вопрос. Если содержание слишком сложное или слишком большое, чтобы поместиться здесь, опишите общую идею предлагаемого решения. Не забывайте всегда сохранять ссылку на веб-сайт оригинального решения. См.: Как написать хороший ответ? - person sɐunıɔןɐqɐp; 14.11.2019

Добавьте это в файл конфигурации Apache:

WSGIPythonHome /home/ec2-user/.virtualenvs/mysite-main
person Matt Deacalion    schedule 17.02.2013
comment
Это не сработало.... однако я сделал ldd mod_wsgi.so, и он указывает на Python 2.6, но моя виртуальная среда - Python 2.7... - person abisson; 18.02.2013

У меня была похожая ошибка только что. Получается, что наш код 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

Надеюсь, это поможет тем, кто увидит подобное сообщение об ошибке!

person Lingster    schedule 10.10.2017
comment
Я получил эту ошибку после установки WSGI с libapache2-mod-wsgi в Debian. При использовании Python 3 правильный пакет — libapache2-mod-wsgi-py3. - person datagutten; 22.06.2019

Для меня это означало, что Django не был установлен на сервере. Исправлено через

pip install Django
person Zags    schedule 18.11.2014
comment
Это противоречит цели использования virtualenv. - person kjyv; 03.01.2015
comment
Часто не все так просто: рассмотрим пример общего сервера разработки или промежуточного сервера, где несколько веток проекта django должны выполняться на разных виртуальных хостах, каждая из которых отлично работает в виртуальной среде. - person fiacre; 16.08.2015
comment
Была такая же проблема на Amazon ec2, Django был установлен под именем пользователя Ubuntu, но по какой-то причине его нужно было установить под root, чтобы Apache2 мог его подобрать. - person Alex Stewart; 10.10.2017

Вы все очень хорошо настроили, мой друг, просто нужно дать пользователю apache разрешение на доступ к каталогам проекта и virtualenv.

Пример:

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 (папки проектов)

person Cássio    schedule 26.11.2015

На первый взгляд, мне жаль мой английский. Я также столкнулся с этой проблемой и решил ее, изменив файл 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()
person user9205618    schedule 11.01.2018

Я использую Centos, nginx и gunicorn для своего проекта... У меня была эта проблема... файл wsgi недоступен, может быть, это bcz вашего текущего каталога. Я изменил свой текущий каталог, и это сработало... имя моего проекта Кода, поэтому я набрал

cd coda

а потом

gunicorn --bind  0.0.0.0:8001 coda.wsgi
person emeh    schedule 15.06.2020

На случай, если кто-то зашел сюда, используя битнами AWS Lightsail..

Проблема в том, что «установочные пакеты python в каталоге, который apache не видит».

Итак: пакеты устанавливаются в '/home/bitnami/.local/lib/python3.8/site-packages/', а Apache ищет в '/opt/bitnami/python/lib/python3.8/site-packages/'.

Временное решение, которое я использовал, - это копирование пакетов в папку Apache eyes с помощью этой команды 'cp -r /home/bitnami/.local/lib/python3.8/site-packages/* /opt/bitnami/python/lib/python3.8 /сайт-пакеты/'

person Mohamed Sayed    schedule 24.11.2020

Привет, у меня такая же проблема на сервере Ubuntu 20.04. Я исправил это, установив apache2-dev

sudo apt-get install apache2-dev

В документации mod_wsgi важно иметь оба apache2 и apache2-dev установлены.

person Karthikaeyan    schedule 09.01.2021

Для меня это были некоторые переменные, которые нужно было установить (для окон):

set PYTHONHOME=F:\path\to\python
set PYTHONPATH=F:\path\to\python
person Stephane L    schedule 26.05.2017