¿Necesito virtualenv?

Para cada proyecto y cada etapa (dev, prod, …) utilizo un usuario de linux diferente. Puedo usar pip y la opción --user , para instalar paquetes en $ HOME.

Mi entorno aislado viene de diferentes usuarios de linux.

¿Qué beneficios podría obtener de virtualenv? Hasta ahora, no veo ninguna razón para usar virtualenv. Pero tal vez me esté perdiendo algo.

Los nombres de usuarios de Linux se construyen así: project_name_S y S es la etapa (dev, qual, prod, testing). Cada etapa puede estar en un host diferente.

Actualizar:

Más de tres años después de hacer esta pregunta: uso virtualenv ahora. El entorno de usuario estaba buggy. Tal vez tenga mejor soporte ahora. Pero nada te impide crear un virtualenv en $ HOME 🙂

Crear un virtualenv debería ser más rápido y más fácil que crear un nuevo usuario. No recomendaría cambiar para proyectos existentes, pero considérelo para nuevos proyectos.

Virtualenv son excelentes para la gestión de dependencias. Los archivos de configuración (o archivos de configuración) son muy buenos para administrar las diferencias de variables entre entornos. (por ejemplo, db location e.tc)

La guía de los autostopistas de Python es muy buena y vale la pena leerla durante 20 minutos. http://docs.python-guide.org/en/latest/index.html

Vea esta sección en envs virtuales.

http://docs.python-guide.org/en/latest/dev/virtualenvs/

Si solo desea utilizar diferentes variables de modo de inicio o modo env, puede configurarlo antes de ejecutar el código de Python.

  PROD_MODE=PROD python example.py 

example.py buscaría la variable PROD_MODE como tal.

 import os print os.environ['PROD_MODE'] 

Entonces, ¿necesitas un virtualenv?

Lo recomendaría mucho. Así que tienes a Django trabajando y has importado otras bibliotecas (también recomiendo encarecidamente pip) y todo funciona en tu máquina. Su ruta está configurada y su código se puede resolver con el código utilizando PATH y PYTHON_PATH. ¡Brillante!

Ahora viene a implementarlo en otra máquina (quizás aws, un servidor Linux o similar) o un desarrollador que quiera ayudar a codificar su proyecto. ¿Cómo se aseguran de que la env en la máquina esté configurada de la misma manera que la suya y cómo se asegura de implementar con la misma env con la que probó todo su nuevo código shiny? Un virtualenv hace esto por ti! Solo tiene que portar o volver a crear el entorno virtual en la nueva máquina, todo funciona de la misma manera que se lo probó / construyó.

En resumen, un env virtual lo ayuda a asegurarse de que no tiene un dolor de cabeza al recordar todas sus importaciones, instalaciones y configuraciones de ruta cuando libera / implementa el código.

Algunas cosas que obtiene con virtualenv que no obtiene con el usuario o los esquemas de inicio:

  1. Capacidad para usar diferentes versiones de paquetes, por ejemplo, django stable y django dev para diferentes sitios, sin contaminar la instalación de Python en todo el sistema (o la instalación de Python de su usuario).

  2. Capacidad para congelar los requisitos de paquetes y replicar fácilmente el entorno de ejecución. Posiblemente podría hacer esto con el esquema de instalación alternativo, pero estaría muy limitado a lo que puede hacer (en términos de paquetes para instalar), tendría que realizar un seguimiento manual de su archivo de requisitos.

En general, le recomendaría que vuelva a visitar virtualenv para su próximo proyecto.