I have a conda environment named old_name
, how can I change its name to new_name
without breaking references?
python – How can I rename a conda environment?
The Question :
- See also this post on how to clone a conda environment
- you can’t rename (frustrating!) but you can clone the old env with the new name and delete the old env:
conda create --name new_name --clone old_name
then delete old one:conda remove --name old_name --all
The Answer 1
You can’t.
One workaround is to create clone environment, and then remove original one:
(remember about deactivating current environment with deactivate
on Windows and source deactivate
on macOS/Linux)
conda create --name new_name --clone old_name conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
There are several drawbacks of this method:
- it redownloads packages – you can use
--offline
flag to disable it, - time consumed on copying environment’s files,
- temporary double disk usage.
There is an open issue requesting this feature.
The Answer 2
Based 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”.
The Answer 3
conda create --name new_name --copy --clone old_name
is better
I use conda create --name new_name --clone old_name
which is without --copy
but encountered pip breaks…
the following url may help Installing tensorflow in cloned conda environment breaks conda environment it was cloned from
The Answer 4
conda 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/rtg
Here 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/python
the 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/python
So, 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 backups
Now 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/*
The Answer 5
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.
The Answer 6
I’m using Conda on Windows and this answer did not work for me. But I can suggest another solution:
rename enviroment folder (
old_name
tonew_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 numpy
after applying any action to package, the environment will show in env list. To check this, type:
conda env list