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
Ответы
Ответ 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. Извините за мой плохой английский