Целевой скрипт WSGI не может быть загружен как модуль Python - PullRequest
45 голосов
/ 23 июня 2011

Я пытаюсь развернуть mod_wsgi с apache для запуска приложения django, но получаю ошибку 500 внутренняя ошибка сервера Журналы apache показывают:

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/apache/django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named django.core.handlers.wsgi

Мой виртуальный хост apache выглядит следующим образом:

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory>

WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages


    WSGIProcessGroup bms

    WSGIScriptAlias / /home/user/bms/apache/django.wsgi

</VirtualHost>

И указанный файл wsgi в каталоге моего приложения с разрешениями 0777:

import os
import sys

path = '/home/user/bms'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'bms.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Я слышал, что это может быть из-за того, что пользователь apache не имеет правильных разрешений.Однако я понятия не имею, как это исправить.Я также попытался запустить deamon с пользователем www-data, но это не решило проблему.

EDIT :

Я решил это, скопировав файл виртуальных хостов впо умолчанию, а затем отключение старого с помощью a2dissite.Я понятия не имею, как я могу сделать это "должным образом" и настроить его так, чтобы apache перешел к виртуальному хосту, который я хочу, хотя.

Ответы [ 15 ]

48 голосов
/ 23 января 2015

Для меня проблема заключалась в несовпадении версии wsgi python. Я использовал Python 3, так что:

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

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

18 голосов
/ 01 ноября 2013

Для меня проблема заключалась в том, что скрипт WSGI не был исполняемым.

sudo chmod a+x django.wsgi

или просто

sudo chmod u+x django.wsgi

, если у вас есть правильный владелец

5 голосов
/ 08 апреля 2015

У меня была такая же проблема, и сначала я не осознавал, что могу прокрутить дальше вниз и увидеть фактическое сообщение об ошибке. В моем случае это была ошибка импорта:

ImportError: No module named bootstrap3

После установки через pip (pip install django-bootstrap3) я перезапустил Apache, и он заработал.

5 голосов
/ 25 апреля 2012

У меня была похожая проблема с этим сообщением об ошибке в журналах:

Целевой сценарий WSGI '/home/web2py/wsgihandler.py' не может быть загружен как модуль Python.

Решением было удаление неправильной директивы WSGIPythonHome (указывающей на каталог приложения) из /etc/httpd/conf.d/wsgi.conf

Я в RedHat с использованием репозиториев CentOS.

Рекомендовать следовать Грэму Дамплтонуинструкция по установке / настройке.Тестирование конфигурации с приложением helloworld показало, что mod_wsgi работает, и конфигурация была ошибочной.

Однако сообщение об ошибке не дало подсказки относительно того, что было не так.

2 голосов
/ 01 ноября 2015

Я знаю, что этот вопрос довольно старый, но я боролся с этим около восьми часов только сейчас. Если у вас есть система с включенным SELinux и вы поместили свой virtualenv в определенные места, mod_wsgi не сможет добавить указанный вами python-path в пакеты сайта. Это также не вызовет никаких ошибок; оказывается, механизм, который он использует для добавления указанных python-path к пакетам сайта, связан с модулем Python site, в частности site.adduserdir(). Этот метод не вызывает никаких ошибок, если каталог отсутствует или недоступен, поэтому mod_wsgi также не вызывает никаких ошибок.

В любом случае, попробуйте отключить SELinux с помощью

sudo setenforce 0

или убедившись, что процесс, на котором вы запускаете Apache as, имеет соответствующие списки ACL с SELinux для доступа к каталогу, в котором находится virtualenv.

1 голос
/ 06 августа 2018

Добавление пути в wsgi.py - это направление, но вместо добавления django добавление пути sys.path.append("/path/to/virtual/environment/lib/pythonX.X/site-packages") исправило мой случай.

Это для проекта django, использующего python2.7 в Ubuntu 16.04.

1 голос
/ 29 августа 2016

В моем собственном случае в Windows в xampp я неправильно загружал путь к приложению в файле wsgi.py, например:

Неправильно :

import sys

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "advisory_portal.settings")

application = get_wsgi_application()
sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')

Вместо:

Правильно:

import sys

sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "advisory_portal.settings")

application = get_wsgi_application()

Не забудьте импортировать пакет sys python

1 голос
/ 23 июня 2011

Вы пробовали это без опции WSGIDaemonProcess?

У меня не было проблем с настройкой mod_wsgi дома, но я сделал это без опции демона.Вы упомянули решение, перемещаясь по файлам виртуальных хостов, и я отмечаю это предостережение в документации для WSGIDaemonProcess:

Также обратите внимание, что имя группы процессов демона должно быть уникальным для всего сервера.То есть нельзя использовать одно и то же имя группы процессов демона на разных виртуальных хостах.

Не знаю, совпадение ли это.

0 голосов
/ 21 декабря 2018

Я получаю эту ошибку.Я использую python 3 в виртуальной среде, обнаружил это в моих журналах apache

[Пт 21 декабря 08: 01: 43.471561 2018] [mpm_prefork: note] [pid 21786] AH00163: Apache / 2.4.6 (Red Hat Enterprise Linux) mod_wsgi / 3.4 Python / 2.7.5 настроен - возобновление нормальной работы

Я установил wsgi с помощью yum -y install mod_wsgi.Для этого был установлен mod_wsgi, скомпилированный для python 2. Поэтому я удалил его

yum remove mod_wsgi

и установил mod_wsgi, скомпилированный для python 3, используя

yum install python35u-mod_wsgi

После этого он работал

0 голосов
/ 21 ноября 2018

Решение, которое наконец-то сработало для меня, после неудачной попытки многих из этих опций, было простым, но неуловимым, потому что я изо всех сил пытался выяснить, какие реальные пути использовать.

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

/var/www/mysite$ python3 -m venv ./venv
/var/www/mysite$ source ./venv/bin/activate
(venv) /var/www/mysite$ mezzanine-project mysite
(venv) /var/www/mysite$ cd mysite
(venv) /var/www/mysite/mysite$

Теперь путь к файлу wsgi.py:

/var/www/mysite/mysite/mysite/wsgi.py

Директивы, которые работали для этой установки в моем /etc/apache2/sites-available/mysite.conf file follow:

...<VirtualHost...>
    ...
    WSGIDaemonProcess mysite python-home=/var/www/mysite/venv python-path=/var/www/mysite/mysite
    WSGIProcessGroup mysite
    WSGIScriptAlias / /var/www/mysite/mysite/mysite/wsgi.py process-group=accounting
    <Directory /var/www/mysite/mysite/mysite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    ...
</VirtualHost>...

Я пробовал многочисленные версии python-home и python-path и неоднократно получал ошибку OP.Использование правильных путей также должно выполнять те же действия, что и @ ответ Dev без добавления путей в файле wsgi.py (предоставляется мезонином , и в моем случае редактирование не требуется).).

...