2012-05-10 9 views
11

Quiero crear uno virtualenv usando otro como punto de partida, ¿es esto posible?¿Puede un virtualenv heredar de otro?

tengo que usar los casos en mente:

  1. Digamos que tengo dos virtualenv uno para producción y otro para el desarrollo. El entorno de desarrollo requiere los mismos paquetes que el entorno de producción, pero requiere otros que no quiero en el entorno de producción. No quiero instalar los paquetes comunes dos veces.

  2. Quiero experimentar con una versión de desarrollo de un paquete, digamos matplotlib por ejemplo. La versión de desarrollo del paquete tiene los mismos requisitos que la versión estable. Así que creo un virtualenv llamado matplotib_stable e instalo los requisitos y la versión estable. Luego creo un segundo virtualenv llamado matplotlib_dev y uso matplotlib_stable como punto de partida (para los requisitos matplotlib) pero luego instalo la versión de desarrollo.

How do I install from a local cache with pip? parece abordar la cuestión de la descarga de paquetes, pero no creo que se trata de modificar sys.path.

Respuesta

12

Una solución es usar el comando virtualenvwrapper de add2virtualenv.

Agrega los directorios especificados a la ruta de acceso de Python para el virtualenv actualmente activo.

Así que si tengo dos virtualenv, ENV1 y ENV2, y quiero ENV2 acceder a los paquetes de ENV1, entonces necesitará:

  1. activar ENV2:

    workon ENV2

  2. agregar el paquete del sitio ENV1 s directorio utilizando add2virtualenv:

    add2virtualenv $WORKON_HOME/ENV1/lib/python2.6/site-packages

Lo anterior presupone $WORKON_HOME es la ubicación de los directorios virtualenv, y que está utilizando python2.6, así que obviamente ajustar los consecuencia.

Si bien esto proporciona acceso a los paquetes, no ajusta la ruta del shell. En otras palabras, los scripts instalados en el directorio bin no son accesibles usando este método.

+0

Cuando instalé el mismo paquete con diferentes versiones de ambos virtualenvs, descubrí el env exterior (ENV1) estaba tomando precedencia sobre el env interno (ENV2). Parece que add2virtualenv coloca sus rutas antes en la lista de importación sys.path. Una solución fácil es seguir el comando anterior con este: 'add2virtualenv $ WORKON_HOME/ENV2/lib/python2.6/site-packages' y luego funciona como un amuleto. – Yonatan

+0

@Yann Gracias Yann! Instalo pylint en ENV1, luego 'add2virtualenv $ WORKON_HOME/ENV1/lib/python3.4/site-packages', pero pylint no funciona! – HelloNewWorld

+1

@HelloNewWorld No he utilizado 'virtualenv' y' vertualenvwrapper' en un momento, ¿por qué no publicar una nueva pregunta sobre este tema? – Yann

-1

Lo siguiente parece funcionar para mí. Suponga que un antiguo entorno virtual del que desea heredar se llama old.Ya que se puede especificar la versión de Python para usar al crear un nuevo entorno, basta con hacer:

virtualenv -p path_to_venvs/old/bin/python --system-site-packages new_env 
+0

Lamentablemente, no puede heredar virtualenvs de esta manera. Observe el mensaje en la salida de su comando: ** Usando el prefijo base '/ usr' ** – allprog

+0

Hmm tiene usted razón, recibo este mensaje. Sin embargo, para todos los fines prácticos, todavía funciona para mí: puedo importar los paquetes del viejo virtualenv mientras uso el nuevo. ¡Voy a investigar esto! – Lisa

+0

¿Estás seguro de que estás utilizando el viejo env? Instale algo que no tenga en la instalación del sistema e intente importarlo. – allprog

Cuestiones relacionadas