Подтвердить что ты не робот

ImportError: нет модуля с именем django.core.handlers.wsgi в установке django mod_wsgi config на apache

Я попытался установить 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

4b9b3361

Ответ 1

Я решил проблему, добавив местоположение сайтов-пакетов, где я сохранил подкаталог 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

Ответ 2

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

Run:

ldd mod_wsgi.so

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

Ответ 3

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

Ответ 4

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

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 не загружал джанго должным образом.

Ответ 5

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

/home/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()

Ответ 6

Проверьте права доступа к файлу сайта. Ни одно из вышеперечисленных решений не работало для меня, пока я не исправил права доступа к файлам. Вот что в моем файле 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 as apache.user и запускаю python как root, вижу, что пакеты просто прекрасны, но мои права не были правильно настроены (чтобы читать все), и почему httpd не смог прочитать пакеты.

Ответ 7

Эта строка, безусловно, неверна:

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

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

Ответ 8

Я знаю, что это несколько старый вопрос, но я думал, что буду звонить будущим пользователям 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/для mod_wsgi.so → mod_wsgi.so-2.6 и измените его на mod_wsgi.so → mod_wsgi.so-2.7.

Достаточно легко.

Ответ 9

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

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

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

[[email protected] Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

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

Ответ 10

Hello!

Если вы используете deb-distributive 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

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