如何重命名conda环境?

时间:2017-02-14 16:51:16

标签: python anaconda conda

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

8 个答案:

答案 0 :(得分:256)

你不能。

一种解决方法是create克隆环境,然后是remove原始环境:

(请记住在Windows上使用deactivate和在macOS / Linux上使用source deactivate停用当前环境

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. 临时双磁盘使用情况。
  4. 有一个开放issue请求此功能。

答案 1 :(得分:9)

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

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

以下网址可能会有所帮助 Installing tensorflow in cloned conda environment breaks conda environment it was cloned from

答案 2 :(得分:5)

基于dwanderson的有帮助的注释,我是能够做到这一点在击一行程序:

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

我的名字不好的env是“ env1”,我想从中克隆的新名字是“ envpython2”。

答案 3 :(得分:4)

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有一堆可执行脚本,其中带有指向$ OLD env路径的hashbang(#!)。

例如,请参见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/*

答案 4 :(得分:3)

您只需重命名env文件夹即可重命名Conda env。 这是证明:

Conda env renaming

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

答案 5 :(得分:3)

正如 @pkowalczyk 的回答提到了一些缺点:在我看来,无痛且无风险(解决方法) 的方法是请改为执行以下步骤:

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

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

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

答案 6 :(得分:1)

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

  • 重命名环境文件夹(从old_namenew_name

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

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

  • 现在您可以使用此环境,但是它不在该环境列表中。更新\安装\删除任何软件包以对其进行修复。例如,更新numpy:

    conda update numpy

  • 对软件包应用任何操作后,环境将显示在env列表中。要进行检查,请输入:

    conda env list

答案 7 :(得分:-8)

只需打开文件夹“ \ Anaconda \ envs”并重命名。

重命名之前 before rename

重命名后 after rename