Esta pregunta no es un duplicado.
No solo se trata de cambiar el nombre de un entorno virtual, sino de moverlo a un directorio diferente, incluido, potencialmente, el directorio de un usuario diferente.
Esto no es lo mismo que simplemente cambiar el nombre de un entorno virtual, especialmente para las personas que no están familiarizadas con los virtualenvs.
Si creo un virtualenv y lo muevo a una carpeta diferente, ¿seguirá funcionando?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... más tarde ese día, el entorno virtual SE MOVIÓ ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Pregunta:
esto funcionara?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Me refiero a esto como una pregunta menos sobre la sabiduría de intentar esto (a menos que esa sabiduría sea graciosa, por supuesto), y más sobre si es posible. Realmente quiero saber si es posible hacerlo en Python 3, o si solo tengo que absorberlo y clonarlo.
¿Puedo simplemente mv
un virtualenv
así sin tristeza? Quiero evitar la tristeza.
fuente
Scripts
directorio (equivalente abin
en * nix) y dice algo comoactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
básicamente quejarse de que el hash-bang en el archivo El encabezado no es el python.exe actual de virtualenv, es del que lo moví, fácil de arreglar. Miré en ese elegante guión y de todos modos ya descubre su propio camino, bueno. Algunos de los otros scripts tampoco se basan en rutas (por ejemplo, deactivate.bat), así que en resumen, esto funciona.activate.ps1 cannot be made relative
puede ignorarse porque ese script ya es relativo. El mensaje no es útil en Windows, porque los scripts no usan#!
directivas como en Linux para decirle al shell qué aplicación debe ejecutarlo. Elactivate.bat
no quede modificada, pero no se utiliza (al menos en las ventanas 10, llamando aactivate
los lanzamientos de la secuencia de comandos Posh) por lo que no yo no tenía necesidad de editar las secuencias de comandos. El problema espip.exe
cuál tiene una ruta a Python codificada y necesita ser editada con un editor hexadecimal, o simplemente una reinstalación.pip freeze
un archivo de requisitos para que pueda reinstalar fácilmente todos sus paquetes, docker (funciona bien con virtualenv instalado), conda, pyenv o algunas otras herramientas. Debería poder crear y destruir entornos como una infraestructura inmutable, no deberían ser valiosos.Para Python 3.3+ (con un nuevo
venv
módulo integrado)Respuesta corta (independientemente de la versión):
Respuesta larga:
A partir de Python v3.3, se
virtualenv
ha convertido en un módulo incorporado llamadovenv
.La
--relocatable
opción mencionada en otras respuestas no se ha incluido envenv
, y actualmente no existe una forma buena y segura que conozca 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, 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 esos también funcionan
venv
.Nota: En esa respuesta, se centra en
virtualenv
, en lugar devenv
. Vea a continuación cómo traducir.venv
vsvirtualenv
sintaxis de comando anteriorEl comando a utilizar
venv
es: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:python
py
opy -3.7
similar ( Python Launcher para Windows para Python 3.3+ y Windows solo por el momento)python3
(convención para entornos linux que instalan de forma dual python 2 y 3)c:\program files\python37\python.exe
Si no está seguro de qué versión se está ejecutando, siempre puede
python --version
averiguarlo.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 un rato con ellos. 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.
Úselo
python --version
con el entorno virtual activado para ver qué versión de Python está usando.Úselo
python -m pip freeze > requirements.txt
para crear la lista de dependencias de paquetes actuales y colocarlas en elrequirements.txt
archivo. 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.
Haga su nuevo venv.
python
como comandopython.exe
en la carpeta del entorno virtualpython -m venv my_new_venv
para crear un nuevo entorno virtual en el directorio de trabajo actual en una nuevamy_new_venv
carpeta.Instale sus dependencias desde el
requirements.txt
archivo.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
-v
opción o "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, del 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.
fuente
pip wheel . -w wheels
y luego reinstalar los paquetes en el nuevo entorno virtual conpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
El
--relocatable
argumento devirtualenv
parece permitirle hacer esto.fuente
virtualenv --relocatable my-python-venv
DESPUÉS de que el entorno ya exista.--help
:This fixes up scripts and makes all .pth files relative
. No, no va a hacer bibliotecas independientes de la plataforma. Si desea moverlo a una plataforma diferente, deberá reinstalarlo en función de la Python local.PERO AY:
No, simplemente no puedes
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 $
... presiona
enter
mucho con frustración, y lo siguiente funcionaExcepto que no es de
my-python-venv
, ergo tristeza.¿Quieres
mv
tuvirtualenv
y usarlo, de lo contrario sin modificar?Respuesta corta:
Bueno, no puedes .
fuente
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
asumir que su bin y lib están en su carpeta venv actual. Utilizo esto como una forma rápida y sucia de copiar y mover envs virtuales python3 con muchos paquetes pip instalados.--relocatable
? Además, Nathan, gran pregunta pero esta es una respuesta terrible. Aceptar tu propia respuesta siempre es un poco sesgado, a menos que esté bien escrito y enumere claramente las opciones, pero determinar que tú mismo sería subjetivo de todos modos.mv
un venv?", Y la respuesta es "nomv
, simplemente no puedes , hay soluciones pero podría ser más fácil de reinstalar". Si esta fuera la respuesta principal, nos ahorraría a otros y a mí algo de tiempo.Sí, esto debería ser posible si no ha hecho nada que dependa del directorio actual del virtualenv.
Sin embargo, si tiene la opción, lo mejor que puede hacer es crear un nuevo virtualenv y comenzar a usar el nuevo virtualenv en su lugar. Esta es la opción más segura y menos probable que cause problemas más adelante.
La documentación menciona que :
Por ejemplo, si ha ejecutado
setvirtualenvproject
, no podrá cambiar al directorio correcto después de ejecutar,workon ...
por lo que en ese caso deberá corregirlo manualmente.En general, un virtualenv es poco más que un directorio con los archivos de intérprete de Python necesarios más los paquetes que necesita.
fuente
Usando respuestas de este y otros hilos sobre temas similares, hice un script bash que, ubicado y ejecutado dentro del directorio virtualenv , ayudará con sus movimientos virtualenv.
Después de hacerlo
virtualenv --relocatable yourenv
, deberá cambiar suVIRTUAL_ENV
variable cada vez que mueva el directorio, por lo que si no desea cambiarlo manualmente, use esto.#!/bin/bash \n DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate) NEWDIR=VIRTUAL_ENV=\"$DIR\" sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate source bin/activate
Espero que ayude.
fuente
¡SÍ TU PUEDES! (En
windows
)La solución es fácil, simplemente mueva su entorno virtual a cualquier lugar y luego edite
activate.bat
dentroscripts\
:Mover al entorno virtual al directorio deseado
Haga clic derecho y edite
activate.bat
ubicado envenv_folder\scripts
.Cambiar
VIRTUAL_ENV
variable de:dentro
Guarde el archivo por lotes editado, ¡y listo!
NOTA: Mi solución debería funcionar y guardar la
windows users
configuración de nuevos entornos virtuales, dudo que esto funcione en otro sistema operativo ya que.bat
es deMS-DOS
fuente
old_directory
aold_directory
- ¿es un error tipográfico?