mod_wsgi correr con python django mod-wsgi wsgi

correr - ¿Dónde debería apuntar WSGIPythonPath en mi virtualenv?



django apache windows (3)

Tengo una carpeta llamada python2.7 dentro de lib en el entorno virtual.

Después de leer media docena de tutoriales, no puedo entender exactamente lo que se supone que debo apuntar a WSGIPythonPath. He visto algunos apuntando a site-packages pero algunos han sido dos puntos : lista separada.

Syntax error on line 1019 of /etc/httpd/conf/httpd.conf: WSGIPythonPath cannot occur within <VirtualHost> section

¿Dónde debería apuntar WSGIPythonPath en mi virtualenv?


Aquí está la documentación oficial: https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#using-a-virtualenv

Usando un virtualenv¶

Si instala las dependencias de Python de su proyecto dentro de un virtualenv, también deberá agregar la ruta de acceso al directorio de paquetes de sitio de este virtualenv a su ruta de Python. Para hacer esto, agregue una ruta adicional a su directiva WSGIPythonPath, con varias rutas separadas por dos puntos (:) si usa un sistema similar a UNIX, o un punto y coma (;) si usa Windows. Si alguna parte de una ruta de directorio contiene un carácter de espacio, debe citarse la cadena de argumento completa a WSGIPythonPath:

> WSGIPythonPath > /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages

Asegúrese de proporcionar la ruta correcta a su virtualenv y reemplace python3.X con la versión correcta de Python (por ejemplo, python3.4).


Recibirá el error porque la directiva WSGIPythonPath no se puede usar dentro del contexto de VirtualHost . Tienes que declararlo dentro de tu archivo de configuración principal de Apache. Si aún desea apuntar a los directorios en su virtualenv dentro del contexto de VirtualHost, use la Directiva WSGIDaemonProcess en su lugar, tiene una opción de ruta de acceso a python para que declare sus directorios de python relevantes.

Por ejemplo: el archivo de configuración de su host virtual debería verse así:

<VirtualHost *:80> ServerName example.com CustomLog logs/example.com-access_log common ErrorLog logs/example.com-error_log WSGIDaemonProcess example.com python-path=/virtualenvpathto/site-packages:/pathto/exampleprojecthome WSGIProcessGroup example.com ... </VirtualHost>

Los dos puntos completos : se utilizan cuando tiene más de un directorio de Python que desea agregar a la variable de entorno $ PYTHON_PATH para que diga que import example.foo funciona bien. En el ejemplo anterior, hay dos directorios, podrían ser más o menos dependiendo de cómo haya configurado su proyecto.

Si estás en windows, usa punto y coma; en lugar de colon completo.

Espero que esto ayude.


tl; dr: Use WSGIDaemonProcess python-home=… . Las alternativas que usan WSGIPythonPath o WSGIDaemonProcess python-path=… ( -path no -path ) ya no se recomiendan.

El viejo y el nuevo camino.

Como lo menciona @kaykae, WSGIPythonPath no se puede usar en un contexto de VirtualHost pero WSGIDaemonProcess python-path=… es el equivalente. Sin embargo, aunque esto todavía puede funcionar, ya no es la forma recomendada de configurar Apache mod_wsgi con entornos virtuales de Python:

Tenga en cuenta que la práctica anterior fue que estas formas de configurar la ruta de búsqueda del módulo de Python [a saber, WSGIDaemonProcess …python-path=… y WSGIPythonPath ] se usaron para especificar la ubicación del entorno virtual de Python. Específicamente, se utilizaron para agregar el site-packages directory de site-packages directory del entorno virtual de Python. No deberías hacer eso.

La mejor manera de especificar la ubicación del entorno virtual de Python es usar la opción python-home de la directiva WSGIDaemonProcess para el modo daemon o la directiva WSGIPythonHome para el modo integrado. Estas formas de especificar el entorno virtual de Python han estado disponibles desde que mod_wsgi 3.0 y las distribuciones de Linux no han enviado una versión tan antigua de mod_wsgi desde hace bastante tiempo. Si está utilizando la forma anterior, por favor actualice sus configuraciones.

(Fuente: WSGI Docs: Guías de usuario: entornos virtuales )

Como hacerlo de la nueva manera.

El hecho de que intentes configurar mod_wsgi dentro de un contexto de VirtualHost muestra que usas la versión de configuración "modo demonio". De acuerdo con la cita anterior, la forma recomendada de incluir su entorno virtualenv en su ruta de Python sería una sección como esta en su sección de VirtualHost (aunque también puede definirse fuera, ya que se puede hacer referencia con el identificador myapp1 para el faemon). grupo de proceso que elija):

<IfModule mod_wsgi.c> WSGIDaemonProcess myapp1 user=user1 group=group1 threads=5 python-home=/path/to/project/venv </IfModule>

Tenga en cuenta que /path/to/project/venv es la ruta base de su entorno virtualenv . Sería un subdirectorio venv en el directorio donde llamó a virtualenv venv para crearlo.

También tenga en cuenta que puede agregar otras rutas a su ruta de Python para que sus instrucciones de import funcionen para paquetes que no se administran a través de PIP o similar. Por ejemplo, puede agregar python-path=/path/to/project . Simplemente no use ese mecanismo para contarle a wsgi sobre la configuración virtualenv completa, para eso introdujeron python-home .