2011-09-15 15 views
78

Tengo un entorno existente en virtualenv, con muchos paquetes, pero una versión antigua de Django.Duplicate virtualenv

¿Qué pasa si quiero duplicar este entorno,
para que pueda tener otro entorno en el que puedo instalar una nueva versión de Django,
pero manteniendo todos los paquetes que ya están en el otro ambiente?

+3

Me pip congelar todas sus necesidades en un archivo 'requirements.txt' y crear otra virtualenv y ejecutar pip instalar requirements.txt –

+0

Si la versión del pitón de lo virtual el entorno que desea copiar es diferente de su entorno de python predeterminado, puede configurar el nuevo entorno como 'virtualenv -p/path/to/older/venv/bin/python new_venv' y luego usar' requirements.txt' que usted generado después de 'pip freeze' – GiriB

Respuesta

116

La manera más fácil es utilizar pip para generar un archivo de requisitos. Un archivo de requisitos es básicamente un archivo que contiene una lista de todos los paquetes de Python que desea instalar (o ya se ha instalado en el caso de un archivo generado por pip), y en qué versiones están.

Para generar un archivo de requisitos, entra en tu virtualenv original, y ejecute:

pip freeze > requirements.txt 

Esto generará el archivo requirements.txt para usted. Si abre ese archivo en su editor de texto favorito, verá algo como:

Django==1.3 
Fabric==1.0.1 
etc... 

Ahora, edite la línea que dice Django==x.x decir Django==1.3 (o lo que sea la versión que desea instalar en su nueva virtualenv) .

Por último, activar su nueva virtualenv, y ejecutar:

pip install -r requirements.txt 

y PIP se descarga e instala todos los módulos de Python que figuran en el archivo de requirements.txt, en cualquier versiones que ha especificado de forma automática!

+1

¡Gracias! Mientras busqué en Google encontré tantas páginas ruidosas, desordenadas y confusas ... Su solución es tan simple y clara ... me alegraba el día;) – dolma33

+0

¿Qué sucede si copio la carpeta y luego la pego en otra máquina? Funcionaría? Suponiendo, por supuesto, que las dependencias apt-get se resolvieron –

+0

No funcionaría =) – rdegges

2

Puede usted no simplemente:

  • Copiar el directorio env virtual existente a uno nuevo
  • actualización a la nueva Django?
+5

Algunas veces utilizo este enfoque, pero tengo la inconveniencia de tener que actualizar algunas rutas dentro del script bin/activate. –

+3

¿El cambio es simple de encontrar y reemplazar en las referencias al nombre env, o es más complicado que eso? – Greg

+1

En mi caso, simplemente actualizando la ruta en la constante VIRTUAL_ENV en bin/activate hizo el truco – bryanph

17

Otra opción es utilizar virtualenv-clone paquete:

Un guión para la clonación de un virtualenv no reubicable.

+0

Hola, estoy en lo cierto al suponer que esto me permite copiar un entorno completo de python en un archivo. Entonces solo tendría que cargar este archivo en una nueva computadora/sistema operativo y obtendría todos mis paquetes de sitio instalados de nuevo – aceminer

8

virtualenvwrapper proporciona una command to duplicate virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME] 
+0

No es realmente una buena idea. "Copiar entornos virtuales no está bien soportado. Cada virtualenv tiene información de ruta codificada en él, y puede haber casos en que el código de copia no sepa que necesita actualizar un archivo en particular. Use con precaución". – Temak