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 mvun virtualenvasí sin tristeza? Quiero evitar la tristeza.
fuente

Scriptsdirectorio (equivalente abinen * 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 relativepuede 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.batno quede modificada, pero no se utiliza (al menos en las ventanas 10, llamando aactivatelos 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.execuál tiene una ruta a Python codificada y necesita ser editada con un editor hexadecimal, o simplemente una reinstalación.pip freezeun 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
venvmódulo integrado)Respuesta corta (independientemente de la versión):
Respuesta larga:
A partir de Python v3.3, se
virtualenvha convertido en un módulo incorporado llamadovenv.La
--relocatableopció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.venvvsvirtualenvsintaxis de comando anteriorEl comando a utilizar
venves: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:pythonpyopy -3.7similar ( 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.exeSi no está seguro de qué versión se está ejecutando, siempre puede
python --versionaveriguarlo.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 --versioncon el entorno virtual activado para ver qué versión de Python está usando.Úselo
python -m pip freeze > requirements.txtpara crear la lista de dependencias de paquetes actuales y colocarlas en elrequirements.txtarchivo. 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.
pythoncomo comandopython.exeen la carpeta del entorno virtualpython -m venv my_new_venvpara crear un nuevo entorno virtual en el directorio de trabajo actual en una nuevamy_new_venvcarpeta.Instale sus dependencias desde el
requirements.txtarchivo.python -m pip install -r requirements.txtEs 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-vopció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 wheelsy luego reinstalar los paquetes en el nuevo entorno virtual conpip install --no-index --find-links /path/to/wheels/ -r requirements.txtEl
--relocatableargumento devirtualenvparece permitirle hacer esto.fuente
virtualenv --relocatable my-python-venvDESPUÉ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
entermucho con frustración, y lo siguiente funcionaExcepto que no es de
my-python-venv, ergo tristeza.¿Quieres
mvtuvirtualenvy 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.mvun 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_ENVvariable 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/activateEspero 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.batdentroscripts\:Mover al entorno virtual al directorio deseado
Haga clic derecho y edite
activate.batubicado envenv_folder\scripts.Cambiar
VIRTUAL_ENVvariable de:dentro
Guarde el archivo por lotes editado, ¡y listo!
NOTA: Mi solución debería funcionar y guardar la
windows usersconfiguración de nuevos entornos virtuales, dudo que esto funcione en otro sistema operativo ya que.bates deMS-DOSfuente
old_directoryaold_directory- ¿es un error tipográfico?