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=…
yWSGIPythonPath
] se usaron para especificar la ubicación del entorno virtual de Python. Específicamente, se utilizaron para agregar elsite-packages directory
desite-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 directivaWSGIDaemonProcess
para el modo daemon o la directivaWSGIPythonHome
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.
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
.