How can I rename a conda environment?

Question:

I have a conda environment named old_name, how can I change its name to new_name without breaking references?

Asked By: pkowalczyk

||

Answers:

New answer:

From Conda 4.14 you will be able to use just:

conda rename -n old_name -d new_name 

Although, under the hood, conda rename still uses [1][2] undermentioned combination of conda create and conda remove.

Note that the -d flag is optional. It’s for the positional argument, "destination". This should also work:

conda rename -n old_name new_name 

Old answer:

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:

  • deactivate on Windows or
  • source deactivate on 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:

  1. It redownloads packages (you can use --offline flag to disable it)
  2. Time consumed on copying environment’s files
  3. Temporary double disk usage

There is an open issue requesting this feature.

Answered By: pkowalczyk

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”.

Answered By: bgoodr

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

Answered By: kkuma7

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/*
Answered By: Thamme Gowda

You can rename your Conda env by just renaming the env folder.
Here is the proof:

Conda env renaming

You can find your Conda env folder inside of C:ProgramDataAnaconda3envs or you can enter conda env list to see the list of conda envs and its location.

Answered By: Bipin Maharjan

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 to new_name)

  • open shell and activate env with custom folder:

    conda.bat activate "C:UsersUSER_NAMEMiniconda3envsnew_name"

  • now you can use this enviroment, but it’s not on the enviroment list. Updateinstallremove 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

Answered By: Mihail Gusev

As the answer from @pkowalczyk mentioned some drawbacks: In my humble opinion, the painless and risk-free (workaround) way is following these steps instead:

  1. Activate & Export your current environment conda env export > environment.yml
  2. Deactivate current conda environment. Modify the environment.yml file and change the name of the environment as you desire (usually it is on the first line of the yaml file)
  3. 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.

Answered By: Long

According to the answer of Thamme Gowda, the following steps work for me on my MacBook Pro:

  1. Change the folder name of the old env name into a new env name.
  2. 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_name

Check if the shebang line is correctly replaced:

$ head -1 $(which jupyter)
#!/Users/my_username/anaconda3/envs/new_name/bin/python

Answered By: Sam Tseng

For that one can access the base/root environment and use conda rename.

Assuming one’s environment is stack and one wants the name lab, one can do the following

conda rename -n stack lab

Other alternatives include

conda rename --name stack lab

conda rename -p path/to/stack lab

conda rename --prefix path/to/stack lab

Notes:

  • One cannot rename the base environment.

  • One cannot rename an active environment. If one is in the prompt of the environment stack one won’t be able to do the operations above, and it will give a CondaEnvException

CondaEnvException: Cannot rename the active environment

  • If one tries to rename using an existing environment name, one will get a CondaEnvException. Using the case above, one will get

CondaEnvException: The environment ‘lab’ already exists. Override with –force.

Answered By: Gonçalo Peres
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.