如何重命名 conda 环境?

How can I rename a conda environment?

我有一个名为 old_name 的 conda 环境,如何在不破坏引用的情况下将其名称更改为 new_name

你不能。

一种解决方法是 create clone a new environment and then remove 原始方法。

首先,记得停用您当前的环境。您可以使用以下命令执行此操作:

  • deactivate 在 Windows 或
  • source deactivate 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`

注意此方法有几个缺点:

  1. 它会重新下载包(您可以使用 --offline 标志来禁用它)
  2. 复制环境文件耗时
  3. 临时双倍磁盘使用

有一个开放的 issue 请求此功能。

根据 的有用评论,我能够在 Bash 一行中完成此操作:

conda create --name envpython2 --file <(conda list -n env1 -e )

我命名错误的环境是 "env1",我想从中克隆的新环境是 "envpython2"。

conda create --name new_name --copy --clone old_name更好

我使用 conda create --name new_name --clone old_name 没有 --copy 但是遇到点中断...

以下url可能有帮助

conda 应该给我们一个像 cond env rename <old> <new> 这样的简单工具,但它没有。简单地重命名目录,如 this previous answer,当然会破坏硬编码的 hashbangs (#!)。 因此,我们需要更深入地实现我们想要的。

conda env list
# conda environments:
#
base                  *  /home/tgowda/miniconda3
junkdetect               /home/tgowda/miniconda3/envs/junkdetect
rtg                      /home/tgowda/miniconda3/envs/rtg

我在这里尝试重命名 rtg --> unsup(请忍受这些名称,这是我的真实用例)

$ 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 报告了这个,但是 等等,我们还没有完成! 悬而未决的任务是,$NEW/bin dir 有一堆带有 hashbangs (#!) 的可执行脚本指向 $OLD env 路径。

参见jupyter,例如:

$ 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

因此,我们可以使用 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

现在我们完成了

我认为编写一个可移植脚本来完成所有这些并将其绑定到 conda env rename old new.

应该是微不足道的

我在 ubuntu 上测试过这个。无论出于何种不可预见的原因,如果出现问题并且您希望恢复上述更改:

$ mv $NEW  $OLD
$ sed  -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/*

您只需重命名 env 文件夹即可重命名您的 Conda 环境。 证明如下:

您可以在 C:\ProgramData\Anaconda3\envs 中找到您的 Conda env 文件夹,或者您可以输入 conda env list 查看 conda envs 列表及其位置。

我在 Windows 上使用 Conda,但 对我不起作用。但我可以建议另一种解决方案:

  • 重命名环境文件夹(old_namenew_name

  • 打开 shell 并使用自定义文件夹激活环境:

    conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"

  • 现在您可以使用此环境,但它不在环境列表中。 Update\install\remove 修复它的任何软件包。例如,更新 numpy:

    conda update numpy

  • 对包应用任何操作后,环境将显示在环境列表中。要检查这一点,请键入:

    conda env list

@pkowalczyk 的回答提到了一些缺点:在我看来,无痛且有风险-免费(解决方法) 方法是按照以下步骤操作:

  1. 激活并导出您当前的环境conda env export > environment.yml
  2. 停用当前的 conda 环境。修改 environment.yml 文件并根据需要更改环境名称(通常在 yaml 文件的第一行)
  3. 通过执行此 conda env create -f environment.yml
  4. 创建一个新的 conda 环境

这个过程需要几分钟,现在您可以安全地删除旧环境了。

P.S。将近 5 年了,conda 仍然没有它的“重命名”功能。

根据 Thamme Gowda 的回答,以下步骤适用于我的 MacBook Pro:

  1. 将旧环境名称的文件夹名称更改为新环境名称。
  2. 将bin文件夹下所有常规文件的shebang行中的旧env名称全部替换到新的env文件夹中。

命令是:

$ 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

检查 shebang 行是否正确替换:

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