Saltar al contenido

¿Puedo mover un virtualenv?

Ya no tienes que investigar más por todo internet porque estás al lugar perfecto, contamos con la respuesta que quieres encontrar y sin liarte.

Solución:

Si. Es posible moverlo en la misma plataforma. Puedes usar --relocatable en un entorno existente.

De --help:

–relocatable – Hacer que un entorno virtual EXISTENTE sea reubicable. Esto corrige los scripts y hace que todos los archivos .pth sean relativos.

SIN EMBARGO, esto NO parece cambiar el activate script, y más bien solo cambia el pip* y easy_install* guiones. En el activate guión, el $VIRTUAL_ENV variable de entorno codificada como la original /path/to/original/venv. los $VIRTUAL_ENV La variable se utiliza para establecer el PATH de su entorno activo también, por lo que debe cambiarse en función de la nueva ubicación para llamar python y pip etc. sin camino absoluto.

Para solucionar este problema, puede cambiar el $VIRTUAL_ENV variable de entorno en el activate script (por ejemplo, usando sed), y todo debería estar listo.

Un ejemplo de uso:

$ cd ~/first
$ virtualenv my-venv
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV="/home/username/first/my-venv"
$ virtualenv --relocatable my-venv
Making script my-venv/bin/easy_install relative
Making script my-venv/bin/easy_install-2.7 relative
Making script my-venv/bin/pip relative
Making script my-venv/bin/pip2 relative
Making script my-venv/bin/pip2.7 relative
### Note that `activate` has not been touched
$ mkdir ~/second
$ mv my-venv ~/second
$ cd ~/second
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate
VIRTUAL_ENV=/home/username/first/my-venv
### (This variable hasn't been changed, it still refers to the old, now non-existent directory!)
$ sed -i -e 's|username/first|username/second|' my-venv/bin/activate
## sed can be used to change the path.
## Note that the `-i` (in place) flag won't work on all machines. 
$ source my-venv/bin/activate 
(my-venv) $ pip install foass
...
(my-venv) $ python 
[...]
> import foass

Hurra, ahora puede instalar cosas y cargarlas en su entorno virtual recién ubicado.

Para Python 3.3+ (con nuevo venv módulo incorporado)

Respuesta corta (independientemente de la versión):

  • No existe una forma limpia y directa de mover un entorno virtual
  • ¡Recrea, es fácil!


Respuesta larga:

A partir de Python v3.3, virtualenv se ha convertido en un módulo incorporado llamado venv.

los --relocatable La opción mencionada en otras respuestas no se ha incluido en venv, y actualmente no existe una forma buena y segura que yo sepa de cambiar el nombre o reubicar un entorno virtual de Python.

Sin embargo, existe una forma bastante sencilla de simplemente recrear un entorno virtual, con todos sus paquetes instalados actualmente. Consulte esta respuesta o consulte la sección a continuación para obtener información sobre cómo recrear un entorno virtual. Durante el proceso, puede recrear el nuevo entorno en cualquier lugar y con el nombre que desee. O consulte la sección a continuación para conocer el proceso.

En esa respuesta, sí menciona algunos otros paquetes de terceros que pueden admitir cambios de nombre o movimientos directos. Si está decidido a buscar una forma de mover un entorno virtual intacto, podría investigar si funcionan con venv así como.

Nota: En esa respuesta, se centra en virtualenv, en vez de venv. Vea a continuación cómo traducir.


venv vs. mayores virtualenv sintaxis de comandos

El comando a usar venv es:

python -m venv

en lugar de solo virtualenv, que se instala como un comando en el paquete original. Donde “python” se refiere a cómo ejecuta su ejecutable de Python, que podría ser una variedad de cosas, como:

  1. python
  2. py o py -3.7 o similar (el Lanzador de Python para Windows para Python 3.3+ y Windows solo por el momento)
  3. python3 (convención para entornos linux que instalan de forma dual python 2 y 3)
  4. Si tiene problemas, use la ruta absoluta al ejecutable de Python que desea ejecutar: p. c:program filespython37python.exe

Si no está seguro de qué versión se está ejecutando, siempre puede python --version descubrir.


Cómo recrear un entorno virtual

Crear / recrear un entorno virtual es fácil y debería convertirse en algo natural después de trabajar con ellos por un tiempo. Este proceso refleja lo que haría para distribuir su script como un paquete (con sus dependencias) en la primera mitad, y luego lo que haría alguien para instalar su script / paquete para un mayor desarrollo.

Primero, obtenga una lista actualizada de lo que hay en el entorno virtual. Con él activo, obtenga la versión de Python que usa y guarde la lista de dependencias en un archivo.

  1. Usar python --version con el entorno virtual activado para ver qué versión de Python está usando.

    • Esto es para mayor claridad: es posible que desee actualizar la versión de Python por varias razones, al menos a la última versión del parche
    • Por ejemplo, si el venv existente está usando Python v3.7.4, pero ahora v3.7.6 está fuera, use v3.7.6 en su lugar, que debería incluir solo seguridad y correcciones de errores sin interrupciones.
  2. Usar python -m pip freeze > requirements.txt para crear la lista de dependencias de paquetes actuales y ponerlas en el requirements.txt expediente. Este comando funciona en Linux o Git Bash con seguridad, no estoy 100% seguro de Powershell o Command Line en Windows.

Ahora cree un nuevo entorno virtual y luego agregue las dependencias del anterior.

  1. Haga su nuevo venv.

    • Asegúrese de estar utilizando la versión correcta de Python que desea instalar en venv.
    • Si desea que sea exactamente la misma versión de Python:
      • Ejecute Python directamente desde el entorno virtual actual (con él activado) y solo use python como el comando
      • O usa una ruta absoluta con python.exe en la carpeta del entorno virtual
    • Para la nueva entrada de la carpeta venv en el comando:
      • Agregue una ruta absoluta o relativa a la ubicación de la carpeta final deseada.
      • Usar python -m venv my_new_venv para crear un nuevo entorno virtual en el directorio de trabajo actual en un nuevo my_new_venv carpeta.
      • El nombre de la carpeta venv será el nombre del venv (lo que aparece en el indicador cuando se activa).
  2. Instale sus dependencias desde el requirements.txt expediente.

    • python -m pip install -r requirements.txt

Es posible que deba reinstalar los paquetes locales que están en modo de desarrollo.

Tenga en cuenta que si alguna vez necesita ver la ubicación específica en la que está instalado un paquete, use:

  • python -m pip list -v
  • los -v o la opción “verbose” agregará información adicional sobre cada paquete que está instalado, incluida la ruta en la que está instalado. Esto es útil para asegurarse de que mantiene los paquetes instalados virtuales, de usuario y del sistema en orden.

En este punto, puede eliminar la antigua carpeta venv y todo el contenido. Recomiendo usar una GUI para eso: las eliminaciones de archivos a menudo son permanentes desde la línea de comandos de Linux, y un pequeño error tipográfico puede ser una mala noticia.

PERO AY:

No, no puedes simplemente mv. Existen soluciones alternativas, pero podría ser más fácil de reinstalar.

(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas
zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory
(my-python-venv)$ deactivate
$ 

… prensas enter mucha frustración, y lo siguiente funciona

$
$
$ pip3 search foaas

Excepto que no es de my-python-venv, ergo tristeza.

Querer mv tu virtualenv y usarlo, de otra manera sin modificar?

Respuesta corta:

Dejaré que Boromir lo diga, para que pueda dejarlo claro:

Bueno ya hipocresía.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *