2012-02-18 11 views
70

Siempre he estado usando virtualenv para probar mi aplicación en localhost ya que tengo un entorno aislado y puedo probar de forma segura nuevas versiones de paquetes.¿Se recomienda virtualenv para el servidor de producción django?

Ahora llega el momento en que tengo que implementar mi aplicación en un servidor de producción. Me pregunto si también debería usar virtualenv para servidor de producción o simplemente lo debería hacer la instalación normal. Dado que es un servidor de producción, siempre puedo usar la versión correcta que probé en el servidor de desarrollo (en virtual-env)

+3

Tenga en cuenta que la documentación oficial de Django menciona el uso de virtualenv en producción: https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-a-virtualenv –

+0

Recomendé el tutorial de @ bartek [La Hermosa Simplicidad de un nginx y despliegue de uWSGI] (http://bartek.im/blog/2012/07/08/simplicity-nginx-uwsgi-deployment.html) –

+0

Heroku lo recomienda: https: // devcenter. heroku.com/articles/deploying-python –

Respuesta

42

Lo haría de esa manera si alguna vez crees que ejecutarás más de un proyecto en el servidor web. Tan pronto como tenga dos proyectos, correrá el riesgo de una futura actualización de cualquier paquete de Python que rompa el otro sitio.

+1

Esto plantea la pregunta de si se debe usar virtualenv cuando sepa que este servidor existe únicamente para servir una sola aplicación. –

+4

No se puede garantizar que DevOps no desarrolle algo que requiera dependencias de Python. Debe estar separado en todo momento. –

9

Sí, creo que se debe utilizar para desplegar virtualenv en la producción. Hace que todo sea mucho más fácil y más limpio para usted, especialmente si planea implementar varios servicios, p. sitios web basados ​​en django u otros proyectos de Python. No desea que cada uno de ellos esté contaminando el entorno python global con sus paquetes.

Creo que virtualenv lo ayudará a administrar todas sus dependencias limpiamente.

para actualizar su env producción de todo lo que tiene que hacer es:

pip -r name_of_your_requirements_file.txt 

utilizo virtualenvs en la producción, y se puede utilizar uWSGI para servir a las aplicaciones, la Cherokee como un servidor web.

Para utilizar su virtualenv en producción, deberá agregar su ruta a su PYTHONPATH.

Por ejemplo si su env tiene la ruta "/ home/www/mi_proyecto/env /", la ruta para añadir sería:

/home/www/env/lib/python2.7/site-packages/ 

Usted puede configurar esto de muchas maneras diferentes, pero si se está generando su FCGI o interfaz uWSGI través manage.py, sólo tiene que añadir lo siguiente en la parte superior de su manage.py (antes que el resto):

import os 
my_virtualenv_path = "/home/www/my_project/env/lib/python2.7/site-packages/" 
# Add it to your PYTHONPATH 
os.path.append(my_virtualenv_path) 

puede adaptar este a su configuración, por si caso también podría hacer lo siguiente en el shell:

export PYTHONPATH:$PYTHONPATH:/home/www/my_project/env/lib/python2.7/site-packages/ 

También necesitará agregar el directorio que contiene su archivo settings.py a PYTHONPATH, para que Django pueda descubrirlo. Simplemente proceda de una manera similar para hacerlo.

14

¿Se recomienda virtualenv para el servidor de producción django?

Sí, hace que su proyecto no dependa de ciertos aspectos del entorno del sistema y también le permite hacer el proceso de implementación más claro y configurable.

Uso fabric, pip y virtualenv para implementar todos mis proyectos de Django.

+0

No creo que "poco confiable" sea la palabra que quería (¿el sistema no puede depender de su proyecto?). Lenguaje clarificado –

3

En la mayoría de los casos, estoy de acuerdo en que es mejor tener un virtualenv incluso si no parece que lo necesita cuando configura el servidor por primera vez. Dicho esto, si estás utilizando algún tipo de servicio en la nube y haciendo funcionar los servidores para una tarea específica durante un tiempo corto, entonces no veo el sentido de usar un virtualenv.

0

El uso de contenedores Docker para el despliegue de desarrollo y producción es bastante popular ahora, por lo que si está considerando seguir esta tendencia, ya no necesitará virtualenv.

Cuestiones relacionadas