【问题标题】:How can I rename a conda environment?如何重命名 conda 环境?
【发布时间】:2017-07-03 01:46:44
【问题描述】:

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

【问题讨论】:

  • 参见这篇文章如何clone a conda environment
  • 你不能重命名(令人沮丧!)但你可以用新名称克隆旧环境并删除旧环境:conda create --name new_name --clone old_name 然后删除旧环境:conda remove --name old_name --all

标签: python anaconda conda


【解决方案1】:

你不能。

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

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

  • deactivate 在 Windows 上或
  • source deactivate 在 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`

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

  1. 它重新下载包(你可以使用--offline 标志来禁用它)
  2. 复制环境文件所用的时间
  3. 临时双盘使用

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

【讨论】:

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

@pkowalczyk 的回答提到了一些缺点:在我看来,无痛且无风险(解决方法) 的方法是请按照以下步骤操作:

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

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

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

【讨论】:

    【解决方案3】:

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

    • 重命名环境文件夹(old_namenew_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。谢谢。
    【解决方案4】:

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

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

    【讨论】:

    【解决方案5】:

    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 路径的 hashbangs (#!)。

    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/*
    

    【讨论】:

    • 如果微不足道,您最好将其贡献给代码库!许多人会很感激(包括我自己)
    【解决方案6】:

    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

    【讨论】:

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

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

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

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

    【讨论】:

    • 在这个脚本中遇到了一个错误,说PackagesNotFoundError: The following packages are not available from current channels。此脚本可能仅在您没有使用 pip 安装且在现有环境中的 conda 中不可用的包时才有效?
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2016-06-08
    • 2019-10-29
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多