如何重命名conda环境?

pko*_*zyk 209 python anaconda conda

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

pko*_*zyk 343

你不能.

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

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

conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
Run Code Online (Sandbox Code Playgroud)

这种方法有几个缺点:

  1. 它重新下载包 - 你可以使用--offlineflag来禁用它,
  2. 复制环境文件所消耗的时间,
  3. 临时双磁盘使用率.

有一个未解决的问题请求此功能.

  • booooo为什么不能重命名conda env? (52认同)
  • 为了给那些分配conda的人留下一些工作,从而让他们在途中更加了解:P:D (4认同)
  • 警告词-我尝试执行此操作,并遇到了奇怪的错误-我的`.bashrc`不再起作用,尝试运行`pytest`将会失败,并尝试引用现已删除的环境。我尝试了新的外壳,没有运气就重新启动。最终不得不删除新环境,然后从全新安装开始。速度较慢,但​​现在似乎可以正常工作。 (4认同)
  • 另一种方法是克隆环境`conda create --name new_name --clone old_name`然后你可以删除旧的. (3认同)
  • @dwanderson +5000,因为我将尝试使用此答案,但我只是直接取消创可贴并从头开始重新创建我的名字不好的env。 (3认同)
  • @silgon嗯,这是[不是](https://github.com/conda/conda/issues/3097#issue-165962791)我的解决方案(但它是相对明显的一个)。我只是为了更好的可搜索性而收集了这些信息 - github 问题线程没有出现在谷歌搜索中。 (2认同)
  • 请注意,运行此命令时,您至少需要一个处于活动状态的 conda 环境 - 否则它将失败。首先像“conda activate base”这样简单的事情,然后“conda rename -n old_name new_name”就可以了。https://github.com/conda/conda/issues/11850#issuecomment-1257215879 (2认同)

小智 23

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

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

以下网址可能有助于 在克隆的 conda 环境中安装 tensorflow 会破坏从其克隆的 conda 环境


Tha*_*wda 10

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
Run Code Online (Sandbox Code Playgroud)

在这里,我正在尝试重命名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
Run Code Online (Sandbox Code Playgroud)

之前的答案已经报道了这一点,但是等等,我们还没有完成! 挂起的任务是, $NEW/bindir 有一堆可执行脚本,其中 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
Run Code Online (Sandbox Code Playgroud)

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

Run Code Online (Sandbox Code Playgroud)

现在我们完成了

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


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

$ 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

Run Code Online (Sandbox Code Playgroud)

  • 如果很简单,那么将其贡献给代码库对您来说会很棒!很多人会很感激(包括我自己) (6认同)

Lon*_*ong 9

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

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

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

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


bgo*_*odr 5

基于dwanderson的有用评论,我能够以Bash一线实现此目的:

conda create --name envpython2 --file <(conda list -n env1 -e )
Run Code Online (Sandbox Code Playgroud)

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

  • 使用此脚本遇到错误“PackagesNotFoundError:当前渠道无法提供以下软件包”。该脚本可能仅在您没有使用 pip 安装且现有环境中 conda 中不可用的软件包时才有效? (4认同)

小智 5

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

  • 重命名环境文件夹(old_nameto new_name

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

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

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

    conda update numpy

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

    conda env list