Virtualenv y control de versiones fuente

84

Recientemente comencé un proyecto de Django y rápidamente me di cuenta de que virtualenv será realmente útil por muchas razones. Configuré virtualenv y mi proyecto, pero ahora me pregunto qué archivo debo agregar a mi control de código fuente (en mi caso, Mercurial). ¿Debo agregar todos los archivos en la carpeta venv? ¿Cómo me aseguro de que un colega pueda clonar y empezar a trabajar inmediatamente sin tener que configurar el entorno de nuevo?

Martín
fuente
18
No recomendaría poner el virtualenv bajo control de código fuente; no será portátil en versiones de Python, sistemas operativos o plataformas de 32/64 bits. En su lugar, solo use ~/path/to/virtualenv/bin/pip freeze > ~/path/to/repo/requirements.txt. Otros desarrolladores tendrán que configurar su propia virtualenv, pero es literalmente dos comandos - virtualenv ~/path/to/env, ~/path/to/env/bin/pip install -r ~/path/to/requirements.txt.
AdamKG
1
Estimado
usuario de Google

Respuestas:

106

Generas un archivo de "requisitos" (normalmente requirements.txt) que comprometes con tu proyecto:

pip freeze > requirements.txt

Luego, cada desarrollador configurará su propio virtualenv y ejecutará:

pip install -r requirements.txt
Chris Pratt
fuente
6

¡Todos estos problemas del entorno son algo comunes cuando estás desarrollando python / django! ¡Pasé por todos estos problemas y he probado algunas soluciones! Cosas que he probado:

  1. Proyecto en ejecución local
  2. Proyecto en ejecución en virtualenv
  3. Proyecto en ejecución en una VM
  4. Proyecto que se ejecuta en una máquina virtual, usando vagrant

¡La mejor solución que encontré fue la # 4! porque en la empresa en la que solía trabajar, cada persona del equipo tiene un sistema operativo diferente, todo tipo de ventanas, mac y linux, ¡y para instalar todas las dependencias para cada entorno se necesita tiempo! Así que decidimos probar virtualenv, ¡que es realmente bueno! pero aún así, cada persona tiene que configurar su propio entorno. ¡El problema en virtualenv es que todas las fuentes de Python están dentro del entorno que usted crea! ¡Así que no enviaría esos archivos a un control de versión de origen! La mejor solución fue la n. ° 4, porque eso era exactamente lo que necesitaba, Vagrant usa Chef para configurar su entorno, por lo que solo tiene que escribir algunas recetas y dejar que vagrant las ejecute por usted. Luego, envíe esas recetas a SCM, luego, cuando la próxima persona obtenga los archivos de SCM y vuelva a cargar la VM, ¡todas las dependencias se instalarán automáticamente!

Tengo una publicación de blog que explica más sobre el tema y también he creado un proyecto de Django Blank en github para que pueda tener un punto de inicio de su proyecto usando vagrant.

http://arthurnn.com/blog/2011/11/25/easy-django-quickstart/ (el enlace ya no está activo, por lo que está vinculado a Wayback Machine)

EDITAR

La solución de Chris Pratt también es buena, sin embargo, algunas bibliotecas no son tan sencillas de instalar en todos los sistemas operativos, por ejemplo, muchas personas en Mac tienen problemas cuando quieren instalar MySQLdb-python. que es una biblioteca muy común, pero si todos en su equipo tienen que dedicar tiempo a resolver estos problemas, ¡no es nada bueno!

Arthur Neves
fuente
MySQLdb-pythonEsta es una muy buena razón para usar un entorno completo, pero ¿no se puede lograr esto también con pip / requirements.txt?
kbuilds