Cómo duplicar virtualenv

130

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

Lo que quiero hacer es duplicar este entorno, así que tengo otro entorno con exactamente los mismos paquetes pero una versión más nueva de Django. ¿Cómo puedo hacer esto?

dolma33
fuente
3
Pip congelaría todos sus requisitos en un archivo 'require.txt' y crearía otro virtualenv y ejecutaría pip install require.txt
Calvin Cheng
Si la versión de Python del entorno virtual 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_venvy luego usar el requirements.txtque generó despuéspip freeze
GiriB

Respuestas:

183

La forma más fácil es usar 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 que ya ha instalado en caso de archivo generado por pip), y en qué versiones están.

Para generar un archivo de requisitos, vaya a su virtualenv original y ejecute:

pip freeze > requirements.txt

Esto generará el requirements.txt archivo 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.xdecir Django==1.3(o cualquier versión que desee instalar en su nuevo virtualenv).

Por último, active su nuevo virtualenv y ejecute:

pip install -r requirements.txt

Y PIP se descargará e instalará automáticamente todos los módulos de Python que figuran en su requirements.txt archivo, a cualquier versiones que ha especificado!

rdegges
fuente
3
¡Gracias! Mientras que buscando en Google encontré tantos ruidosos, sucios y confuso páginas ... Su solución es tan limpio y sencillo ... que hizo que mi día;)
dolma33
¿Qué pasa si copio la carpeta y luego la pego en otra máquina? Funcionaria? Suponiendo, por supuesto, que se resolvieron las dependencias de apt-get
Tales Pádua
De hecho, no es así, como estoy descubriendo hace un momento.
horcle_buzz
Veo muchos mensajes Could not find a version that satisfies the requirement a_package=#.#.#¿Puedo resolverlo fácilmente? Eliminé una línea o cambié la igualdad a la desigualdad.
Cambia el mundo el
Funciona para pyenvtambién. Impresionante respuesta.
Leonard
29

Otra opción es usar el virtualenv-clonepaquete:

Un script para clonar un virtualenv no reubicable.

alecxe
fuente
Hola, estoy en lo cierto al suponer que esto me permite copiar un entorno Python ENTERO en un archivo. Entonces yo sólo hay que cargar este archivo en un ordenador nuevo / OS y me gustaría tener todos mis paquetes instalados sitio vuelta
aceminer
2
"virtualenv-clone source / target /" funcionó de maravilla gracias!
ajankuv
asegúrese de instalar virtualenv-clonedespués de activar virtualenv
4givN
15

virtualenvwrapperproporciona un comando para duplicar virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]
Raymond
fuente
77
Realmente no es una buena idea. "La copia de entornos virtuales no está bien soportada. Cada virtualenv tiene información de ruta codificada, y puede haber casos en los que el código de copia no sabe que necesita actualizar un archivo en particular. Úselo con precaución".
Temak
5

Si está utilizando Anaconda , puede ejecutar:

conda create --name myclone --clone myenv

Esto se copiará myenven el entorno recién creado llamado myclone.

Jordán
fuente
4

La opción más fácil es usar el virtualenv-clonepaquete.

Para duplicar venv1a venv2, siga estos pasos:

  1. Instalar virtualenv-cloneen venv1un entorno virtual ficticio o en uno venv_dummy. Para crear venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. Para instalar virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. Para duplicar venv1a venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/
Safwan
fuente
el aviso en bash no es cambios, tiene que editar bin / activar, y no está 100% claro cómo
MrR
@MrR ... no tiene que editar bin/activatesi sigue esta respuesta. ¿Por qué tienes que editar bin/activate?
Safwan
Después de clonar, mi mensaje en bash tenía el nombre original del entorno, debido a la sección de PS1 dentro debin/activate
MrR
1

¿No puedes simplemente:

  • Copie el directorio virtual virtual existente a uno nuevo
  • Actualización a la nueva Django?
Hombre espacial
fuente
77
Algunas veces uso este enfoque, pero tiene el inconveniente de tener que actualizar algunas rutas dentro del script bin / activar.
Armando Pérez Marqués
3
¿Es el cambio una simple búsqueda y reemplazo en las referencias al nombre del entorno, o es más complicado que eso?
Greg
1
En mi caso, simplemente actualizando la ruta en la constante VIRTUAL_ENV en bin / activar hizo el truco
bryanph
1
Por otro lado, cambiar bin / activar es un gran truco, y uno debe preguntarse si esto puede romper cosas en algún momento. Especialmente cuando se utilizan entornos virtuales en entornos de producción.
Herbert
2
Rompe muchas cosas. Es más fácil recrear o clonar virtualenv. Intenté hacer esto (mientras esperaba que se abriera un servidor proxy para poder reinstalar todos los paquetes necesarios y comenzar desde cero), ¡y no funciona! Pensé que estaba siendo inteligente, pero, por desgracia, se necesitará mucho pirateo para que esto funcione y, sinceramente, hay cosas mucho mejores que hacer.
horcle_buzz