Django/Apache/mod _wsgi :Нет модуля с именем importlib

После работы с сервером разработки django в течение последних двух месяцев наконец пришло время перейти на apache + mod _wsgi.

Проблема в том, что когда я захожу на свой сайт (, назовем его junux ), на URL-адрес, сопоставленный с приложением django, похоже, что-то не работает. При запуске сервера разработки на сервере все работает правильно.

Нижняя -строка ошибки мне дана в журнале ошибок apache _:

ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib

Я знаю, что это похоже на многие другие вопросы по этому вопросу (их так много, что я даже не буду их здесь цитировать ), но я так и не нашел ответа. Я прочитал довольно много руководств по переходу на производство, в том числе документацию по развертыванию django, руководства по моду _wsgi, некоторые презентации pycon и весь день гуглил эту проблему...

Много интересных и интересных подробностей ниже.

Любая помощь будет оценена. Заранее спасибо.


Конфигурация:

  • Apache 2.2.15 с модом _wsgi на CentOS 6
  • Python 2.7.3 скомпилирован из исходников
  • Сайт использует виртуальную среду

Это страница ошибки, которую возвращает apache:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Apache/2.2.15 (CentOS) Server at junux.net Port 80

Apache error_logпоказывает следующую информацию:

mod_wsgi (pid=22502): Create interpreter 'junux.net|/dev'.
mod_wsgi (pid=22502): Exception occurred processing WSGI script '/var/www/junux_dev/junux_site/wsgi.py'.
Traceback (most recent call last):
  File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__
    self.load_middleware()
  File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware
    for middleware_path in settings.MIDDLEWARE_CLASSES:
  File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
    self._setup()
  File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
    self._wrapped = Settings(settings_module)
  File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib

Соответствующийwsgi.py:

import os
import sys
import site

# use our virtual environment
SITE_DIR = os.path.dirname(__file__)
PROJECT_ROOT = os.path.dirname(SITE_DIR)
site_packages = os.path.join(PROJECT_ROOT, 'venv/lib/python2.7/site-packages')
site.addsitedir(os.path.abspath(site_packages))
sys.path.insert(0, SITE_DIR)
sys.path.insert(1, PROJECT_ROOT)

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

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Иhttpd.conf: (здесь больше материала из файла конфигурации apache по умолчанию)


        ServerName junux.net
        ServerAlias junux.net
        ServerAdmin admin@junux.net

        WSGIScriptAlias /test /var/www/test/hello.py
        WSGIScriptAlias /dev /var/www/junux_dev/junux_site/wsgi.py

        
        Order allow,deny
        Allow from all
        

        
        Options FollowSymLinks
        Order allow,deny
        Allow from all
        



LogLevel info

Есть WSGIScriptAlias- /test, чтобы обеспечить работоспособность -проверки того, что мод _wsgi действительно работает. Оно делает. При открытии этого URL (очень простое )приложение работает (как типичный hello world ).

Я установил разрешения chmod o+rдля моего файла wsgi и chmod o+rxдля всего каталога /var/www/junux_dev, как указано в презентации pycon -sydney -2010, на которую ссылается здесь .

10
задан scooz 15 July 2012 в 14:23
поделиться