ImportError: Нет модуля с именем django.core.handlers.wsgi в конфигурации установки django mod_wsgi на apache - PullRequest
33 голосов
/ 27 августа 2010

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

ImportError: No module named django.core.handlers.wsgi,

Я читал, что это может быть ошибка пользователя ...

На консоли (ssh) с доступом с правами root у меня нет проблем с доступом к django.core.handlers.wsgi, но когда apache запрашивает доступ к нему, он не может

Мой django.wsgi:

import os
import sys

sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_EGG_CACHE'] = '/tmp'


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

Мой vhost.conf:

Alias /media/ my/rep/parents/of/my/projet/montest/media/

<Directory my/rep/parents/of/my/projet/montest/media>
    Order deny,allow
    Allow from all
</Directory>

WSGIScriptAlias /montest my/rep/parents/of/my/projet/django.wsgi

<Directory my/rep/parents/of/my/projet>
    Order deny,allow
    Allow from all
</Directory>

РЕДАКТИРОВАТЬ:

Хорошо, мой результат для ldd mod_wsgi.so

linux-gate.so.1 => (0x0013c000) 
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000) 
libdl.so.2 => /lib/libdl.so.2 (0x0023b000) 
libutil.so.1 => /lib/libutil.so.1 (0x00420000) 
libm.so.6 => /lib/libm.so.6 (0x00110000) 
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000) 

Поэтому я решил проверить мою установку mod_wsgi с помощью test.wsgi

test.wsgi

def application(environ, start_response): 
    status = '200 OK'
    output = 'Hello world, I am a wsgi app!' 
    response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output]

my vhost.conf:

WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs/test.wsgi 
<Directory /var/www/vhosts/mydomain.fr/subdomains/django/httpdocs> 
    Order allow,deny 
    Allow from all 
    Options +ExecCGI 
</Directory> 

Теперь это работает ... дальше я попробую свой конфиг django.wsgi

Ответы [ 10 ]

16 голосов
/ 29 января 2013

Я решил проблему, добавив расположение пакетов сайта, где я сохранил подкаталог django (/Library/python/2.7/site-packages) в WSGIDaemonProcess:

WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP} 
    python-path=/Library/python/2.7/site-packages

Если вы используете режим встроенного сервера, используйте в httpd.conf:

WSGIPythonPath /Library/python/2.7/site-packages
4 голосов
/ 28 августа 2010

Почему вы даже пытаетесь добавить каталог site-packages в sys.path? Если ваш mod_wsgi скомпилирован с Python 2.4, он должен уже выглядеть в каталоге site-packages. Похоже, ваш mod_wsgi даже не скомпилирован с Python 2.4.

Пробег:

ldd mod_wsgi.so

против вашего установленного файла mod_wsgi.so, чтобы определить, для какой версии Python он скомпилирован, и опубликовать результат.

3 голосов
/ 06 октября 2013

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

WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7

Справа:

WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7

Я потратил слишком много времени, пытаясь понять, почему мой virtualenv не загружал django правильно.

3 голосов
/ 27 августа 2010

У меня была эта проблема раньше, и это было потому, что процесс Apache / mod_wsgi не имел разрешения на чтение модулей. Вы можете сделать свой каталог site-packages / django читабельным для всех или добавить другие соответствующие права пользователя / группы.

2 голосов
/ 13 января 2012

Я решил эту проблему, добавив родительский каталог, содержащий мою установку django, в sys.path в wsgi.py. Вот мои настройки, FWIW:

/ дома / banjer / MyProject / wsgi.py

import os, sys
sys.path.append('/home/banjer/django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
1 голос
/ 21 июля 2013

Проверьте ваши права доступа к файлу пакета сайта. Ни одно из приведенных выше решений не работало для меня, пока я не установил права доступа к файлам. Вот что в моем файле ssl_error_log:

mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'. 
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last):   File "/data/http/osqa/osqa.wsgi", line 14, in <module>
            import django.core.handlers.wsgi  ImportError: No module named django.core.handlers.wsgi

Но я решил это на моем сервере. Если вы можете сделать это в командной строке, то это решение для вас:

python
>>> import django.core.handlers.wsgi
>>>

Что сработало, так это то, что я chmod go + rx site-packages libpython * (это может быть излишним, но это сработало для меня.)

Я работаю как httpd как apache.user, и запускаю python как root, мог видеть пакеты просто отлично, но мои права доступа были настроены неправильно (для чтения всеми), и поэтому httpd не мог читать пакеты .

0 голосов
/ 18 октября 2013

Hello!

Если вы используете deb-дистрибутив Linux (Debian, Ubuntu и т. Д.), Отредактируйте файл

/etc/apache2/modules/wsgi.load

Этот файл содержит путь к правильной библиотеке wsgi (дляактивная версия Python интерпретатор).Если вы используете Python2.6, измените строку

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.7

на

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-2.6

Также вы можете изменить программную ссылку на модуль mod_wsgi:

cd /usr/lib/apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so

Не забудьтеизменить ссылку на файл в / etc / apache2 / modules / wsgi.load и перезапустить сервер apache

service apache2 restart

PS Извините за мой плохой английский

0 голосов
/ 08 сентября 2012

Было бы лучше, если вы удалите django из вашей старой библиотеки python ..

[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/django

.. и переустановите его в папке 'site-packages' текущего используемого вами питона:

[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

Это то, что я сделал, и я больше не получаю эту ошибку!

0 голосов
/ 10 июня 2011

Я знаю, что это довольно старый вопрос, но я подумал, что буду вмешиваться для будущих пользователей SO, которые могут найти этот вопрос:

Ваш mod_wsgi связан с python2.6, но вы используетеpython 2.4 для запуска django в соответствии с вашей конфигурацией?

Я собираюсь предположить, что ваш / usr / bin / python указывает на что-то отличное от 2.6, против чего скомпилирован mod_wsgi.Это также может быть связано с тем, что вы используете django против 2.4.Я получил ту же ошибку, когда загружал mod_wsgi, связанный с python2.6, когда django использовал python2.7.В версии mod_wsgi, которую я установил, она поддерживала оба python2. [6-7], поэтому все, что мне нужно было сделать, это удалить символическую ссылку в / usr / lib / apache2 / modules / for mod_wsgi.so -> mod_wsgi.so-2.6 и измените его на mod_wsgi.so -> mod_wsgi.so-2.7.

Достаточно просто.

0 голосов
/ 27 августа 2010

Эта строка определенно неверна:

sys.path.append('/usr/lib/python2.4/site-packages/django')

Установите Django с / для версии Python, против которой был создан mod_wsgi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...