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

评论

另请参阅有关如何克隆conda环境的帖子

您不能重命名(令人沮丧!),但是您可以使用新名称克隆旧环境并删除旧环境:conda create --name new_name --clone old_name然后删除旧环境:conda remove --name old_name --all

#1 楼

您不能。

一种解决方法是创建克隆环境,然后删除原始环境:

(请记住有关在Windows上使用deactivate并在macOS /上使用source deactivate停用当前环境的信息。 Linux)

conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`


此方法有几个缺点:


它会重新下载软件包-可以使用--offline标志禁用它,
在复制环境文件上所花费的时间,
临时使用双磁盘。

有一个未解决的问题,要求此功能。

评论


booooo为什么一个人不能重命名conda env?

–查理·帕克(Charlie Parker)
17年6月15日在18:10



以便为那些使用conda的人留下一些工作,从而使他们在途中更加了解:P:D

– Saravanabalagi Ramachandran
17年7月3日在6:40



另一种方法是克隆环境conda create --name new_name --clone old_name,然后可以删除旧的环境。

–Y0da
17年11月22日在14:01

警告词-我尝试执行此操作,并遇到了奇怪的错误-我的.bashrc不再起作用,尝试运行pytest会失败,尝试引用现在已删除的环境。我尝试了新的外壳,没有运气就重新启动。最终不得不删除新环境,然后从全新安装开始。速度较慢,但​​现在似乎可以正常工作。

–dwanderson
18年2月27日在18:09

@dwanderson +5000,因为我要尝试使用此答案,但我只是要立即取消创可贴并从头开始重新创建我的名字不好的env。

–更好
19年2月2日在20:44

#2 楼

根据dwanderson的有用评论,我能够以Bash的单行代码进行此操作:

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


我名字不好的env是“ env1”,我希望新的一个要从中克隆的是“ envpython2”。

评论


遇到错误,显示PackagesNotFoundError:当前脚本无法从当前通道使用以下软件包。仅当您没有随pip一起安装且现有环境中conda中不可用的软件包时,此脚本才可能起作用。

–陈宇轩
20-4-2在16:42



#3 楼

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

我使用没有conda create --name new_name --clone old_name--copy

以下URL可能会帮助
在克隆的中安装tensorflow conda环境破坏了从其克隆的conda环境

评论


mvenv(){conda create --name $ 2 --copy --clone $ 1; conda remove --name $ 1 --all;}

–user3673
20-09-20在4:32

(将其放置在〜/ .bashrc的末尾,您显然具有所请求的功能。可以随意将其合并到您的答案中,因为我无法构思出涉及--clone和--copy的解决方案。)

–user3673
20 Sep 20'4:34



#4 楼

conda应该给我们提供了一个简单的工具,例如cond env rename <old> <new>,但事实并非如此。就像在前面的答案中那样,简单地重命名目录当然会破坏硬编码的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
 

以前的答案到此为止,但是等等,我们还没有完成!
待处理的任务是,$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/*
 


评论


如果琐碎,那么为您贡献代码基础将是一件很棒的事情!许多人会感激(包括我自己)

–肖恩
20年8月29日在21:44



#5 楼

您可以通过重命名env文件夹来重命名Conda env。
这是证明:

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

评论


对于Linux并非如此

– ottovon
20-09-15在11:28

坏主意:stackoverflow.com/a/52717925/1506477解释了为什么

–奇妙
20 Dec 4'在5:34



#6 楼

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


重命名环境文件夹(old_namenew_name


打开外壳并使用自定义文件夹激活env:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"


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


,环境将显示在env列表中。要对此进行检查,请键入:
conda env list