I have a conda environment named old_name, how can I change its name to new_name without breaking references?
8 Answers
You can't.
One workaround is to create clone a new environment and then remove the original one.
First, remember to deactivate your current environment. You can do this with the commands:
deactivateon Windows orsource deactivateon macOS/Linux.
Then:
conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`Notice there are several drawbacks of this method:
- It redownloads packages (you can use
--offlineflag to disable it) - Time consumed on copying environment's files
- Temporary double disk usage
There is an open issue requesting this feature.
11conda create --name new_name --copy --clone old_name is better
I use conda create --name new_name --clone old_name which is without --copybut encountered pip breaks...
the following url may helpInstalling tensorflow in cloned conda environment breaks conda environment it was cloned from
2Based upon dwanderson's helpful comment, I was able to do this in a Bash one-liner:
conda create --name envpython2 --file <(conda list -n env1 -e )My badly named env was "env1" and the new one I wish to clone from it is "envpython2".
1conda should have given us a simple tool like cond env rename <old> <new> but it hasn't. Simply renaming the directory, as in this previous answer, of course, breaks the hardcoded hashbangs(#!).
Hence, we need to go one more level deeper to achieve what we want.
conda env list
# conda environments:
#
base * /home/tgowda/miniconda3
junkdetect /home/tgowda/miniconda3/envs/junkdetect
rtg /home/tgowda/miniconda3/envs/rtgHere I am trying to rename rtg --> unsup (please bear with those names, this is my real use case)
$ 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/pythonthe previous answer reported upto this, but wait, we are not done yet!the pending task is, $NEW/bin dir has a bunch of executable scripts with hashbangs (#!) pointing to the $OLD env paths.
See jupyter, for example:
$ 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/pythonSo, we can easily fix it with a 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 backupsNow we are done đź’Ż
I think it should be trivial to write a portable script to do all those and bind it to conda env rename old new.
I tested this on ubuntu. For whatever unforseen reasons, if things break and you wish to revert the above changes:
$ mv $NEW $OLD
$ sed -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/* 3 As the answer from @pkowalczyk mentioned some drawbacks: In my humble opinion, the painless and risk-free (workaround) way is following these steps instead:
- Activate & Export your current environment
conda env export > environment.yml - Deactivate current conda environment. Modify the
environment.ymlfile and change the name of the environment as you desire (usually it is on the first line of theyamlfile) - Create a new conda environment by executing this
conda env create -f environment.yml
This process takes a couple of minutes, and now you can safely delete the old environment.
P.S. nearly 5 years and conda still does not have its "rename" functionality.
3I'm using Conda on Windows and this answer did not work for me. But I can suggest another solution:
rename enviroment folder (
old_nametonew_name)open shell and activate env with custom folder:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"now you can use this enviroment, but it's not on the enviroment list. Update\install\remove any package to fix it. For example, update numpy:
conda update numpyafter applying any action to package, the environment will show in env list. To check this, type:
conda env list
According to the answer of Thamme Gowda, the following steps work for me on my MacBook Pro:
- Change the folder name of the old env name into a new env name.
- Replace all the old env name in the shebang lines of all regular files under the bin folder in the new env folder.
The commands are:
$ conda deactivate
$ OLD=old_name
$ NEW=new_name
$ cd /Users/my_username/anaconda3/envs/
$ mv $OLD $NEW
$ find $NEW/bin/* -maxdepth 1 -type f -exec sed -i.bak "s:envs/$OLD/bin:envs/$NEW/bin:" {} \;
$ conda activate new_nameCheck if the shebang line is correctly replaced:
$ head -1 $(which jupyter)#!/Users/my_username/anaconda3/envs/new_name/bin/python
You can rename your Conda env by just renaming the env folder. Here is the proof:
You can find your Conda env folder inside of C:\ProgramData\Anaconda3\envs or you can enter conda env list to see the list of conda envs and its location.