2012-01-09 24 views

Respuesta

0

Normalmente puede copiar el .egg-info de la carpeta lib/site-packages de virtualenv a lib/site-packages del otro entorno.

35

Mientras que los está moviéndose de un virtualenv a otro en la misma máquina , fácilmente se podría simplemente hacer:

$ cp -r [env1]/lib/pythonX.X/site-packages/* [env2]/lib/pythonX.X/site-packages/ 

Sin embargo, si los ambientes son en diferentes máquinas o utilizando diferentes versiones de pitón o alguna otra diferencia importante, probablemente no sea una buena idea. En general, es mucho más seguro generar un requirements.txt y luego usarlo para cargar todos los mismos módulos en el otro entorno. Puede crear el archivo manualmente si lo desea, pero es más fácil simplemente usar pip.

$ pip freeze -E [env1] > requirements.txt 

O, si su virtualenv se activa ya, sólo tiene que hacer:

$ pip freeze > requirements.txt 

Luego, en el otro ambiente, que puede hacer:

$ pip install -E [env2] -r /path/to/requirements.txt 
+0

algo va mal si intento copiar * un paquete como ¿esta? – Claudiu

+0

El problema no está en la * cantidad * de paquetes copiados, sino en cualquier diferencia en las versiones de Python, arquitecturas de sistema, etc., entre el origen y el destino. Si el origen y el destino están en la misma máquina, deberías estar bien; si están en máquinas diferentes, debes usar 'pip freeze'. –

2

estoy trabajando en una máquina de 64 bits con Ubuntu-14.04-64. Recopilé e instalé python-3.4.3 a /opt/python3.4/ y creé un vitualenv basado en este pitón.

mkvirtualenv -p /opt/python3.4/bin/python venv1 

también para facilidad:

sudo apt-get install virtualenvwrapper 

Con la Venv instalado y funcionando con éxito PyQt5 (el bit dura) más numpy, scipy, etc. ipython He instalado virtualenv-clon:

workon myvenv 
pip install virtual-clone 
deactivate 

y luego corrieron:

virtualenv-clone venv1 venv2 

PyQt5 funciona de esta manera. El indicador de línea de comandos todavía nombres venv1 tan activo pero dentro ~/.virtualenv/venv2

cat activate* | grep "venv1" 

muestra 3 entradas dentro de los tres archivos activan, activate.csh y Activar. peces

En desactivar, cambiar

if [ "x(myvenv1) " != x ] ; then 
     PS1="(myvenv1) $PS1" 
else 

a

... 
     PS1="(myvenv2) $PS1" 
... 

En Activar.CSH cambio

if ("venv1" != "") then 
     set env_name = "venv1" 
else 

a

... 
    set env_name = "venv2" 
... 

En activate.fish cambio

if test -n "(venv1) " 
     printf "%s%s%s" "(venv1) " (set_color normal) (_old_fish_prompt) 
     return 
end 

a

... 
    printf "%s%s%s" "(venv2) " (set_color normal) (_old_fish_prompt) 
... 

Ahora, cuando source ~/.virtualenv/venv2/bin/activate o workon venv2 el símbolo del sistema mostrará correctamente su entorno (la copia clonada de venv1).

Editar: esto no responde a la pregunta "Cómo copiar los módulos de uno a otro virtualenv", pero estoy bastante seguro de que el resultado es en muchos casos la deseada, a saber, la creación de una nueva basada Venv en uno previamente creado que incluye (todos) los módulos previamente instalados.

0

parece que no podemos simplemente copiar un virtualenv como otro. , incluso si domina el $ VIRTUAL_ENV en el archivo de activación, todavía actúa como en el origen virtualenv y pip instalará todos los paquetes en el sitio de origen-packages/

Cuestiones relacionadas