我有一个名为old_name
的conda环境,如何在不破坏引用的情况下将其名称更改为new_name
?
答案 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`
这种方法有几个缺点:
--offline
标志来禁用它,有一个开放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。 这是证明:
您可以在C:\ProgramData\Anaconda3\envs
内找到Conda env文件夹,也可以输入conda env list
来查看conda envs列表及其位置。
答案 5 :(得分:3)
正如 @pkowalczyk 的回答提到了一些缺点:在我看来,无痛且无风险(解决方法) 的方法是请改为执行以下步骤:
conda env export > environment.yml
environment.yml
文件并根据需要更改环境名称(通常位于 yaml
文件的第一行)conda env create -f environment.yml
此过程需要几分钟,现在您可以安全地删除旧环境。
附言将近 5 年了,conda 仍然没有它的“重命名”功能。
答案 6 :(得分:1)
我在Windows上使用Conda,而this answer对我来说不起作用。但我可以建议另一种解决方案:
重命名环境文件夹(从old_name
到new_name
)
打开外壳并使用自定义文件夹激活环境:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"
现在您可以使用此环境,但是它不在该环境列表中。更新\安装\删除任何软件包以对其进行修复。例如,更新numpy:
conda update numpy
对软件包应用任何操作后,环境将显示在env列表中。要进行检查,请输入:
conda env list
答案 7 :(得分:-8)