Tengo un entorno conda llamado old_name , ¿cómo puedo cambiar su nombre a new_name sin romper las referencias?
Como la respuesta de @pkowalczyk mencionó algunos inconvenientes: en mi humilde opinión, la forma indolora y sin riesgos (solución alternativa) es seguir estos pasos:
conda env export > environment.ymlenvironment.yml y cambie el nombre del entorno como desee (generalmente está en la primera línea del archivo yaml )conda env create -f environment.ymlEste proceso lleva un par de minutos y ahora puede eliminar el entorno antiguo de forma segura.
PS casi 5 años y conda todavía no tiene su funcionalidad de "cambio de nombre".
Puede cambiar el nombre de su Conda env simplemente cambiando el nombre de la carpeta env. Aquí está la prueba:
Puede encontrar su carpeta Conda env dentro de C:\ProgramData\Anaconda3\envs o puede ingresar a conda env list para ver la lista de conda envs y su ubicación.
conda debería habernos dado una herramienta simple como cond env rename <old> <new> pero no lo ha hecho. Simplemente cambiar el nombre del directorio, como en esta respuesta anterior , por supuesto, rompe los hashbangs codificados (¡#!). Por lo tanto, necesitamos ir un nivel más profundo para lograr lo que queremos.
conda env list # conda environments: # base * /home/tgowda/miniconda3 junkdetect /home/tgowda/miniconda3/envs/junkdetect rtg /home/tgowda/miniconda3/envs/rtg Aquí estoy tratando de cambiar el nombre de rtg -> unsup (tenga paciencia con esos nombres, este es mi caso de uso real)
$ cd /home/tgowda/miniconda3/envs $ OLD=rtg $ NEW=unsup $ mv $OLD $NEW # rename dir $ conda env list # conda environments: # base * /home/tgowda/miniconda3 junkdetect /home/tgowda/miniconda3/envs/junkdetect unsup /home/tgowda/miniconda3/envs/unsup $ conda activate $NEW $ which python /home/tgowda/miniconda3/envs/unsup/bin/python la respuesta anterior informó hasta esto, pero espera, ¡aún no hemos terminado! la tarea pendiente es $NEW/bin dir tiene un montón de scripts ejecutables con hashbangs ( #! ) que apuntan a las rutas de acceso $OLD OLD.
Ver jupyter , por ejemplo:
$ which jupyter /home/tgowda/miniconda3/envs/unsup/bin/jupyter $ head -1 $(which jupyter) # its hashbang is still looking at old #!/home/tgowda/miniconda3/envs/rtg/bin/pythonEntonces, podemos arreglarlo fácilmente con un sed
$ sed -i.bak "s:envs/$OLD/bin:envs/$NEW/bin:" $NEW/bin/* # `-i.bak` created backups, to be safe $ head -1 $(which jupyter) # check if updated #!/home/tgowda/miniconda3/envs/unsup/bin/python $ jupyter --version # check if it works jupyter core : 4.6.3 jupyter-notebook : 6.0.3 $ rm $NEW/bin/*.bak # remove backupsAhora hemos terminado 💯
Creo que debería ser trivial escribir un script portátil para hacer todo eso y vincularlo a conda env rename old new .
Probé esto en ubuntu. Por cualquier razón imprevista, si las cosas se rompen y desea revertir los cambios anteriores:
$ mv $NEW $OLD $ sed -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/*Estoy usando Conda en Windows y esta respuesta no me funcionó. Pero puedo sugerir otra solución:
cambiar el nombre de la carpeta del entorno ( old_name a new_name )
abra shell y active env con carpeta personalizada:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"
ahora puede usar este entorno, pero no está en la lista de entornos. Actualice\instale\elimine cualquier paquete para solucionarlo. Por ejemplo, actualice numpy:
conda update numpy
después de aplicar cualquier acción al paquete, el entorno se mostrará en la lista de env. Para comprobar esto, escriba:
conda env list
conda create --name new_name --copy --clone old_name es mejor
Uso conda create --name new_name --clone old_name que no tiene --copy pero encontré pip breaks...
la siguiente URL puede ayudar La instalación de tensorflow en el entorno de conda clonado rompe el entorno de conda del que fue clonado
no puedes
Una solución alternativa es crear un clon de un nuevo entorno y luego eliminar el original.
Primero, recuerda desactivar tu entorno actual. Puedes hacer esto con los comandos:
deactivate en Windows osource deactivate en macOS/Linux.Luego:
conda create --name new_name --clone old_name conda remove --name old_name --all # or its alias: `conda env remove --name old_name`Tenga en cuenta que hay varios inconvenientes de este método:
--offline para deshabilitarlo)Hay un problema abierto que solicita esta función.
Basado en el útil comentario de dwanderson , pude hacer esto en una sola línea de Bash:
conda create --name envpython2 --file <(conda list -n env1 -e )Mi env mal llamado era "env1" y el nuevo que deseo clonar es "envpython2".