Django / Apache / mod_wsgi: No hay un módulo llamado importlib

Después de trabajar con el servidor dev de django durante los últimos dos meses, finalmente llegó el momento de pasar a apache + mod_wsgi.

El problema es que cuando voy a mi sitio (llamémoslo junux), a la URL asignada a la aplicación django, las cosas no parecen funcionar. Cuando se ejecuta el servidor dev en el servidor, las cosas funcionan correctamente.

La línea inferior del error se me da en el apache error_log:

ImportError: No se pudieron importar las configuraciones 'junux_site.settings' (¿Está en sys.path?): No hay un módulo llamado importlib

Soy consciente de que esto es similar a muchas otras preguntas al respecto (hay tantas que ni siquiera las citaré aquí), pero aún no he encontrado la respuesta. He leído bastantes guías sobre cómo pasar a producción, incluidos los documentos de implementación de django, las guías mod_wsgi, algunas presentaciones de pycon y he estado buscando en Google el problema todo el día ...

Un montón de diversión y detalles emocionantes a continuación.

Cualquier ayuda será apreciada. Gracias por adelantado.

La configuración:

Apache 2.2.15 con mod_wsgi en CentOS 6Python 2.7.3 compilado desde la fuenteEl sitio utiliza un virtualenv

Esta es la página de error que devuelve 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

El apacheerror_log revela la siguiente información:

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

Lo relevantewsgi.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()

Yhttpd.conf: (más cosas aquí desde el archivo de configuración de apache predeterminado)

<VirtualHost *:80>
        ServerName junux.net
        ServerAlias junux.net
        ServerAdmin [email protected]

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

        <Directory /var/www/test >
        Order allow,deny
        Allow from all
        </Directory>

        <Directory /var/www/junux_dev >
        Options FollowSymLinks
        Order allow,deny
        Allow from all
        </Directory>

</VirtualHost>

LogLevel info

Hay unaWSGIScriptAlias a/test para proporcionar una prueba de validez que mod_wsgi de hecho funciona. Lo hace. Al abrir esa URL, la aplicación (muy simple) funciona (un típico mundo de saludo).

He establecido permisos parachmod o+r en mi archivo wsgi ychmod o+rx en general/var/www/junux_dev dir, como se indica en la presentación de pycon-sydney-2010 a la que se hace referencia desdeaquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta