activate - virtualenv python 3
Cambiar el nombre de una carpeta virtualenv sin romperla (8)
Creé una carpeta e inicialé una instancia de Virtualenv en ella.
$ mkdir myproject
$ cd myproject
$ virtualenv env
Cuando ejecuto (env)$ pip freeze
, muestra los paquetes instalados como debería.
Ahora quiero renombrar myproject/
a project/
.
$ mv myproject/ project/
Sin embargo, ahora cuando corro
$ . env/bin/activate
(env)$ pip freeze
dice que pip no está instalado. ¿Cómo cambio el nombre de la carpeta del proyecto sin romper el entorno?
(dentro de la carpeta del proyecto)
cd bin
sed -i ''s/old_dir_name/new_dir_name/g'' *
No olvides desactivar y activar
Lo que creo es que "knowing why" matters more than "knowing how"
. Entonces, este es otro enfoque para arreglar esto.
Cuando corres:
$ . env/bin/activate
en realidad ejecuta los siguientes comandos:
(Probé esto en /tmp
)
VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV
Sin embargo, acaba de cambiar el nombre de myproject
a project
, por lo que el comando no se pudo ejecutar. Es por eso que dice que pip is not installed
, porque ni usted ha instalado pip
en el entorno global del sistema ni su pip
virtualenv es de origen correcto.
Si quieres arreglar esto manualmente, esa es la forma:
modifique
/tmp/project/env/bin/activate
con su editor de favoritos como Vim, generalmente en laLine 42
VIRTUAL_ENV=''/tmp/myproject/env''
=>VIRTUAL_ENV=''/tmp/project/env''
modify
/tmp/project/env/bin/pip
en laLine 1
#!/tmp/myproject/env/bin/python
=>#!/tmp/project/env/bin/python
Después de eso, active su env
ambiente virtual nuevamente, y verá que su pip
ha regresado.
Necesita ajustar su instalación para usar rutas relativas. virtualenv
proporciona esto con la opción --relocatable
. De los documentos :
Normalmente los entornos están vinculados a una ruta específica. Eso significa que no puede mover un entorno o copiarlo a otra computadora. Puede arreglar un entorno para que sea reubicable con el comando:
$ virtualenv - ENV reubicables
NOTA: ENV es el nombre del entorno virtual y debe ejecutarlo desde fuera del directorio ENV.
Esto hará que algunos de los archivos creados por setuptools o distribuyan use rutas relativas, y cambiará todos los scripts para usar activate_this.py en lugar de usar la ubicación del intérprete de Python para seleccionar el entorno.
Nota: debe ejecutar esto después de haber instalado cualquier paquete en el entorno. Si hace que un entorno sea reubicable, entonces instale un nuevo paquete, debe ejecutar virtualenv --relocatable nuevamente.
Otra forma de hacerlo que funcionó muchas veces sin problemas es virtualenv-clone :
pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env
Puede solucionar su problema siguiendo estos pasos:
- renombra tu directorio
- vuelva a ejecutar esto:
$ virtualenv ../path/renamed_directory
- virtualenv corregirá las asociaciones de directorios mientras deja sus paquetes en su lugar
-
$ scripts/activate
-
$ pip freeze
para verificar que tus paquetes estén en su lugar - Una advertencia importante, si tiene alguna dependencia de ruta estática en los archivos de script en su directorio virtualenv, tendrá que cambiarlos manualmente.
Siempre instalo virtualenvwrapper para ayudar. Desde el indicador de shell:
pip install virtualenvwrapper
Hay una manera documentada en los documentos virtualenvwrapper - cpvirtualenv Esto es lo que haces. Asegúrese de estar fuera de su entorno y volver al indicador del shell. Escriba esto con los nombres requeridos:
cpvirtualenv oldenv newenv
Y luego, si es necesario:
rmvirtualenv oldenv
Para ir a su noticia nueva:
workon newenv
virtualenv --relocatable ENV
no es una solución deseable. Supongo que la mayoría de la gente quiere la capacidad de cambiar el nombre de un virtualenv sin ningún efecto secundario a largo plazo.
Así que he creado una herramienta simple para hacer precisamente eso. La página del proyecto para virtualenv-mv describe con más detalle, pero esencialmente puedes usar virtualenv-mv
misma manera que usarías una implementación simple de mv
(sin ninguna opción).
Por ejemplo:
virtualenv-mv myproject project
Sin embargo, tenga en cuenta que acabo de hackear esto. Podría romperse en circunstancias inusuales (por ejemplo, virtualenvs enlazados) así que tenga cuidado (haga una copia de seguridad de lo que no puede permitirse perder) y avíseme si encuentra algún problema.
NOTA: como @jb. señala, esta solución solo se aplica a virtualenv
s fácilmente (re) creados. Si un entorno requiere varias horas para instalar esta solución no es recomendable
Virtualenvs son geniales porque son fáciles de hacer y cambiar; evitan que se bloquee en una sola configuración. Si conoce los requisitos del proyecto, o puede obtenerlos, cree un nuevo virtualenv
:
Crear un archivo
requirements.txt
(env)$ pip freeze > requirements.txt
- Si no puede crear el archivo
requirements.txt
, verifiqueenv/lib/pythonX.X/site-packages
antes de eliminar elenv
original.
- Si no puede crear el archivo
Eliminar el existente
(env)
deactivate && rm -rf env
Crear un nuevo
virtualenv
, activarlo e instalar requisitosvirtualenv env && . env/bin/activate && pip install -r requirements.txt
Alternativamente, use virtualenvwrapper para facilitar las cosas ya que todos los virtualenvs se mantienen en una ubicación centralizada
$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv