2011-01-06 21 views
12

Estoy tratando de configurar el servidor WAMP. Tengo Apache funcionando correctamente y he instalado mod_wsgi sin problemas.Ejecutando Python desde un virtualenv con Apache/mod_wsgi, en Windows

El problema es que estoy usando entornos virtuales (usando virtualenv) para mis proyectos. Obviamente, mod_wsgi está teniendo problemas para localizar mi instalación de Django.

Estoy tratando de entender cómo puedo hacer que mod_wsgi funcione bien con los virtualenvs. La documentación parece pensar que esto no es posible:

Tenga en cuenta que la directiva WSGIPythonHome solo se puede usar en sistemas UNIX y no está disponible en sistemas Windows. Esto se debe a que en los sistemas Windows, la ubicación de la DLL de Python parece ser lo que dicta dónde buscará Python los archivos de la biblioteca de Python. En este momento, no se sabe cómo se podría crear un entorno de línea base independiente de la instalación principal de Python en Windows.

Desde aquí: mod_wsgi + virtualenv docs.

¿Alguien tiene alguna idea sobre cómo hacer que esto funcione?

+2

Ese comentario sobre WSGIPythonHome en Windows es realmente incorrecto. La restricción se levantó, posiblemente en mod_wsgi 3.X (no estoy seguro). El comentario ha sido eliminado. –

Respuesta

12

Puede activar el entorno programáticamente desde Python y agregar esto a su archivo .wsgi antes de importar cualquier otra cosa.

De virtualenv's docs:

A veces no pueden o no quieren usar el intérprete de Python creado por la virtualenv. Por ejemplo, en un entorno mod_python o mod_wsgi, , solo hay un intérprete.

Afortunadamente, es fácil. Debe utilizar el intérprete de Python personalizado para instalar las bibliotecas . Pero para usar las bibliotecas, usted solo tiene que estar seguro de que la ruta es correcta. Un script está disponible para corregir la ruta. Puede configurar el entorno como:

activate_this = '/path/to/env/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 

Esto cambiará sys.path e incluso cambio sys.prefix, sino que también permiten que utilizar un intérprete existente. Los elementos de su entorno se mostrarán primero en en sys.path, antes de los elementos globales. Sin embargo, esto no puede deshacer la activación de otros entornos o los módulos que se han importado. Usted no debe intentar, por ejemplo, activar un entorno antes de una solicitud web ; debe activar un entorno tan pronto como sea posible, y no volver a hacerlo en ese proceso.

+0

Esto se ve bien, lo probaré. Pero parece que usará el intérprete de Python "principal" en mi sistema, no el que se creó usando virtualenv, ¿verdad? Esto significa que solo puedo usar una versión de Python en mi sistema. (Esto solo sería un problema menor). –

+0

Utilizará el intérprete mod_wsgi se incrusta en apache, pero se asegurará de que sys.ruta se llena correctamente con las bibliotecas instaladas en los buscadores virtualenv – albertov

+2

- puede ver esto implementado aquí: http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/ hacia la parte inferior que muestra cómo para activar y establecer las variables de ruta en su wsgi.py – Mendhak

Cuestiones relacionadas