ChatGPT解决这个技术问题 Extra ChatGPT

如何重命名 conda 环境?

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

另请参阅这篇文章,了解如何clone a conda environment
您无法重命名(令人沮丧!),但您可以使用新名称克隆旧环境并删除旧环境:conda create --name new_name --clone old_name,然后删除旧环境:conda remove --name old_name --all

b
blaylockbk

你不能。

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

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

在 Windows 上停用或

在 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`

请注意,这种方法有几个缺点:

它重新下载包(您可以使用 --offline 标志来禁用它) 复制环境文件所消耗的时间 临时双磁盘使用

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


booooo 为什么不能重命名 conda env?
以便为那些 fork conda 的人留下一些工作,从而使他们在途中了解更多:P:D
另一种方法是克隆环境 conda create --name new_name --clone old_name,然后您可以删除旧环境。
警告词 - 我尝试这样做,但遇到了奇怪的错误 - 我的 .bashrc 不再工作,尝试运行 pytest 将失败,尝试引用现已删除的环境。我尝试了新的外壳并重新启动但没有运气。最终不得不吹走新环境,然后从全新安装开始。速度较慢,但现在似乎确实有效。
@dwanderson +5000,因为我打算尝试使用这个答案,但我只是要立即拉下创可贴并从头开始重新创建我命名错误的环境。
k
kkuma7

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

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

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


mvenv () { conda create --name $2 --copy --clone $1 ; conda remove --name $1 --all ;}
(把它放在 ~/.bashrc 的末尾,你显然有请求的功能。请随意将它合并到你的答案中,因为我无法想到你的解决方案同时涉及 --clone 和 --copy。)
x
xnx

根据 dwanderson 的有用评论,我能够在 Bash 单行中做到这一点:

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

我命名错误的环境是“env1”,而我希望从中克隆的新环境是“envpython2”。


使用此脚本时遇到错误提示 PackagesNotFoundError: The following packages are not available from current channels。此脚本可能仅在您没有使用 pip 安装且在现有环境中的 conda 中不可用的软件包时才有效?
T
Thamme Gowda

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 目录有一堆可执行脚本,其中包含指向 $OLD 的 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/*

如果微不足道,将它贡献给代码库对您来说会很棒!许多人会很感激(包括我自己)
对我来说, sed -i '' "s/old/new" $NEW/bin/* 将遇到“不是常规文件”错误。要替换所有常规文件中的所有 sheband 行,我必须使用: $ find $NEW/bin/* -maxdepth 1 -type f -exec sed -i.bak "s:envs/$OLD/bin:envs/$新/bin:" {} \;转义非常规文件。
使用 rpath 重定位的二进制库呢?重新定位 conda 环境并不简单,因为幕后有太多的魔力让它像一个孤立的环境一样工作。
L
Long

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

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

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

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


我喜欢这个答案,并且正在执行它。不过,我相信 prefix: ... 行也应该更改为新名称,因此 env 文件夹不会被重新使用...?
** 更新 ** - 不遵守更改 environment.yml 中的前缀。但添加 -p 选项效果很好:conda env create -f environment.yml -p /path/to/env
您无需更改任何内容,而是在创建新环境时提供 --name。请注意,您的环境文件应以 .yml 结尾,而不是 .txt
确保同时更改第一行 (name: <new name>) 和最后一行 (prefix: /dir1/dir2/../dirn/<new name>)。
C
Chidozie Nnachor

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

重命名环境文件夹(old_name 到 new_name)

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

现在您可以使用此环境,但它不在环境列表中。更新\安装\删除任何包来修复它。例如,更新 numpy: conda update numpy

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


工作。立即显示在 conda env list 中。谢谢。
S
Sam Tseng

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

将旧环境名称的文件夹名称更改为新环境名称。替换新 env 文件夹中 bin 文件夹下所有常规文件的 shebang 行中的所有旧 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


B
Bipin Maharjan

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

https://i.stack.imgur.com/pIcxz.png

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


对于 Linux 来说并非如此
坏主意:stackoverflow.com/a/52717925/1506477 解释了原因
灾难的秘诀,不要那样做!
这似乎在 linux 上有效,并且“坏主意”链接导致了对当前问题的答案,该问题从未真正提到为什么这是一个坏主意,除了一条评论说 conda 存储了一些硬编码路径(它确实回答它,但不是很具体 - 究竟是哪些路径?也许这是可以忽略的东西?)。