python - instalar - ¿Puedo mover un virtualenv?
virtualenv install (4)
Esta pregunta no es un duplicado.
Se trata no solo de cambiar el nombre de un entorno virtual, sino de moverlo realmente a un directorio diferente, incluido, potencialmente, un directorio de usuario diferente.
Esto no es lo mismo que simplemente renombrar un entorno virtual, especialmente para personas que no están familiarizadas con 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 MUDÓ ...
(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 menor sobre la sabiduría de intentar esto (a menos que esa sabiduría sea humorística, 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 hacer un
virtualenv
así sin tristeza?
Quiero evitar la tristeza.
El argumento
--relocatable
a
virtualenv
parece permitirte hacer esto.
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
$
... las prensas
enter
mucho en frustración, y lo siguiente funciona
$
$
$ pip3 search foaas
Excepto que no es de
my-python-venv
, ergo tristeza.
¿Quiere hacer un
mv
su
virtualenv
y usarlo, de lo contrario no modificado?
Respuesta corta:
Bueno, ya no puedes .
Sí, esto debería ser posible si no ha hecho nada que dependa del directorio actual de 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. Esta es la opción más segura y menos probable que cause problemas más adelante.
La documentación menciona que :
Cada virtualenv tiene información de ruta codificada,
Por ejemplo, si ha ejecutado
setvirtualenvproject
entonces no podrá cambiar al directorio correcto después de ejecutar
workon ...
así que en ese caso necesitaría arreglarlo manualmente.
En general, un virtualenv es poco más que un directorio con los archivos necesarios de intérprete de Python más los paquetes que necesita.
Sí.
Es posible moverlo en la misma plataforma.
Puede usar
--relocatable
en un entorno existente.
De
--help
:
--relocatable - Haga que un entorno virtualenv EXISTENTE sea reubicable. Esto corrige los scripts y hace que todos los archivos .pth sean relativos.
SIN EMBARGO, esto NO parece cambiar la secuencia de comandos de
activate
, sino que solo cambia las
easy_install*
comandos
pip*
y
easy_install*
.
En el script de
activate
, la variable de entorno
$VIRTUAL_ENV
codificada como original
/path/to/original/venv
.
La variable
$VIRTUAL_ENV
se usa para establecer la
PATH
de su entorno activo, por lo que debe cambiarse en función de la nueva ubicación para llamar a
python
y
pip
etc. sin ruta absoluta.
Para solucionar este problema, puede cambiar la variable de entorno
$VIRTUAL_ENV
en el script de
activate
(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 puedes instalar cosas y cargarlas en tu entorno virtual recién ubicado.