He creado una carpeta e inicializado una instancia virtualenv en ella.
$ mkdir myproject
$ cd myproject
$ virtualenv env
Cuando ejecuto (env)$ pip freeze, muestra los paquetes instalados como debería.
Ahora quiero cambiar el nombre 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?
python
ubuntu
virtualenv
pip
Riley Watkins
fuente
fuente

Respuestas:
Debe ajustar su instalación para usar rutas relativas.
virtualenvproporciona para esto con la--relocatableopción. De los documentos :fuente
grep -EIr '\Wold_venv_name\W' /path/to/new_venvayudará a encontrar cualquier shabangs que usen el antiguo venv, pero no es una verificación completa del venv reubicado..projectarchivo virtualenvwrapper , que contiene la ruta al código fuente que depende de virtualenv, suponiendo que está usando virutalenvwrapper y también ha cambiado el nombre del directorio del proyecto para que coincida con el nuevo virtualenv.Creo que "saber por qué" es más importante que "saber cómo" . Entonces, aquí hay otro enfoque para solucionar esto.
Cuando ejecuta
. env/bin/activate, en realidad ejecuta los siguientes comandos (usando,/tmppor ejemplo):Sin embargo, sólo ha cambiado el nombre
myprojectaproject, por lo que no se pudo ejecutar comandos. Es por eso que dicepip is not installed, porque no ha instaladopipen el entorno global del sistema y su virtualenvpipno se obtiene correctamente.Si desea arreglar esto manualmente, esta es la forma:
Con su editor favorito como Vim, modifique
/tmp/project/env/bin/activategeneralmente en la línea 42:VIRTUAL_ENV='/tmp/myproject/env'=>VIRTUAL_ENV='/tmp/project/env'Modificar
/tmp/project/env/bin/pipen la línea 1:#!/tmp/myproject/env/bin/python=>#!/tmp/project/env/bin/pythonDespués de eso, active su entorno virtual
envnuevamente y verá quepipha vuelto.fuente
grep -iHnR venv-name /path/to/venv-name | grep -v "^Binary file" | grep -i venv-name. De hecho, noté que en una de mis instancias de Django, muchos de los paquetes tenían la "ruta al sh-bang de Python".virtualenv. Quizás haya algún caso de uso que no esté usando y, por lo tanto, no encuentre el problema.virtualenv. Para resolverlo, edité el encabezado bash (¿cómo se llama?) En elipythonarchivo y luego funcionó bien.NOTA: Como @jb. señala, esta solución solo se aplica a s (re) creados fácilmente
virtualenv. Si un entorno tarda varias horas en instalar esta solución, no se recomiendaVirtualenvs son geniales porque son fáciles de hacer y cambiar; evitan que te bloquees en una sola configuración. Si conoce los requisitos del proyecto, o puede obtenerlos, haga un nuevo
virtualenv:Crear un
requirements.txtarchivo(env)$ pip freeze > requirements.txtrequirements.txtarchivo, verifiqueenv/lib/pythonX.X/site-packagesantes de eliminar el originalenv.Eliminar lo existente
(env)deactivate && rm -rf envCree uno nuevo
virtualenv, actívelo e instale requisitosvirtualenv env && . env/bin/activate && pip install -r requirements.txtAlternativamente, use virtualenvwrapper para hacer las cosas un poco más fáciles ya que todos los virtualenv se mantienen en una ubicación centralizada
fuente
pip install -r requirements.txtlleva un par de horas (compilar extensiones C de terceros en raspberry pi).virtualenv env && pip install -r requirements.txtNO instalará los requisitos en el nuevo entorno porque no lo activavirtualenv-wrapperyo mismo usuario (que se activa automáticamente en la creación). He actualizado mi respuesta para incluir la activación con lavirtualenvesperanza de evitar cualquier confusión.Siempre instalo virtualenvwrapper para ayudar. Desde el indicador de shell:
Hay una manera documentada en los documentos de virtualenvwrapper: cpvirtualenv Esto es lo que haces. Asegúrese de estar fuera de su entorno y volver al indicador de shell. Escriba esto con los nombres requeridos:
Y luego, si es necesario:
Para ir a tu newenv:
fuente
virtualenvwrapper, no solovirtualenv. Esta respuesta de @ryankdwyer es mejor.Puede solucionar su problema siguiendo estos pasos:
$ virtualenv ..\path\renamed_directory$ scripts/activate$ pip freezepara verificar que sus paquetes estén en su lugarfuente
--relocatable, creo que esta solución es mejor que la respuesta aceptada. Hasta ahora, he notado que muchos.pycarchivos_new_name_/lib/python2.7todavía se refieren_old_name_. Sin embargo, eso no parece afectar cómo funciona mi entorno. Quizás la única solución mejor es usarvirtualenvwrappero algunas de las otras utilidades mencionadas entre las respuestas aquí. Al menos esta solución no requiere instalar programas adicionales.Otra forma de hacerlo que funcionó para mí muchas veces sin problemas es virtualenv-clone :
fuente
(dentro de la carpeta del proyecto)
No olvides desactivar y activar
fuente
sed -i "s|$old_dir|$new_dir|g" bin/*sed -i '.original' 's/old_dir_name/new_dir_name/g' *para Macvirtualenv --relocatable ENVNo es una solución deseable. Supongo que la mayoría de la gente quiere la capacidad de cambiar el nombre de un virtualenv sin efectos secundarios a largo plazo.Así que he creado una herramienta simple para hacer precisamente eso. La página del proyecto para virtualenv-mv lo describe con un poco más de detalle, pero esencialmente puede usarlo
virtualenv-mvcomo si fuera una implementación simple demv(sin ninguna opción).Por ejemplo:
Sin embargo, tenga en cuenta que acabo de hackear esto. Podría romperse en circunstancias inusuales (por ejemplo, virtualenvs con enlaces simbólicos), así que tenga cuidado (haga una copia de seguridad de lo que no puede permitirse perder) y avíseme si encuentra algún problema.
fuente