【问题标题】:Conda remove all environments (except root)Conda 删除所有环境(root 除外)
【发布时间】:2016-06-13 19:28:03
【问题描述】:

我知道我可以删除单个环境

 conda remove -n envname --all

但我经常创建多个新环境来安装特定包或对其进行测试,因此我经常会创建 5-10 个环境,并且一个接一个地删除它们是一种痛苦。有没有一种简单的方法(对于 Windows)来删除除根环境之外的所有环境?

【问题讨论】:

  • 也许你可以尝试conda info --envs 之类的方法,然后获取环境列表并使用conda remove --name envname --all 之类的方法在该列表中创建一个循环。显然你需要避免你的根环境。
  • @Ringil - 如果我正在寻找的东西没有“便利选项”,你知道如何在 Windows 上进行抓取和放置选项吗?

标签: python anaconda conda


【解决方案1】:

删除位于conda 内的envs 子目录内的所有目录即可完成这项工作。这通常位于您的用户文件夹~。

~\.conda\envs\

【讨论】:

  • 虽然在实践中风险很小,但删除环境文件夹将无法运行任何预取消链接脚本,一些软件包用于清理他们在安装时配置的用户或系统级设置(例如,取消订阅事件挂钩)。使用conda env remove 应该被视为更好的做法。
【解决方案2】:

基于 Mac/Linux 的系统可以删除所有这样的环境。

for i in `conda env list|awk '{print $1}'|egrep -v 'base|#'|tr '\n' ' '`;do echo $i;conda env remove --name $i;done

【讨论】:

    【解决方案3】:

    不是最优雅的答案。但我只会从conda info --envs 复制所有环境的名称。然后使用您需要的所有命令制作一个 bash(或 Windows 的 .bat)文件,例如...

    conda remove -n env_name_1 --all -y
    conda remove -n env_name_2 --all -y
    conda remove -n env_name_3 --all -y
    conda remove -n env_name_4 --all -y
    conda remove -n env_name_5 --all -y
    

    或者只是将其复制并粘贴到终端中,它会帮你解决的!

    如果我是一个小 bash(或 .bat)向导(或者可能会费心做一些谷歌搜索),您可以通过管道输出来自 conda info --envs 以生成 conda remove ... 命令。

    【讨论】:

    • 显然这个答案的编辑队列已满,所以我不能直接编辑它,但这对我不起作用,直到我在每一行前面加上CALL
    【解决方案4】:

    根据我的评论,您可以使用一个 conda 命令获取所有环境,然后尝试遍历它并单独删除它们。这是您可以执行此类操作的一种方法。请注意,您应该将 anaconda_command_prompt_string 替换为 Anaconda 命令提示符调用的相应字符串。此外,这段代码可能非常脆弱:

    from subprocess import PIPE, Popen
    
    anaconda_command_prompt_string = 'C:\\Windows\\system32\\cmd.exe "/K" C:\\Users\\your_user_name\\AppData\\Local\\Continuum\\Anaconda3\\Scripts\\activate.bat C:\\Users\\your_user_name\\AppData\\Local\\Continuum\\Anaconda3'
    p = Popen(anaconda_command_prompt_string, stdin=PIPE, stdout=PIPE, bufsize=1)
    p.stdout.readline(), # read the first line
    
    print >>p.stdin, 'conda env list' # write input
    p.stdin.flush() 
    p.stdout.readline()
    
    p.stdout.readline()
    
    p.stdout.readline()
    
    p.stdout.readline()
    envs = []
    
    
    line = 'Anaconda'
    while 'Anaconda' in line:
        line = p.stdout.readline()
        name = line.replace(' ', '').split('C:')[0]
        if 'root' not in name and '\n' not in name:
            envs.append(name)
    
    for name in envs:
       command_string = 'conda remove -n {0} --all --yes'.format(name)
       print >>p.stdin, command_string
       p.stdin.flush()
       line = p.stdout.readline()
       while 'Complete' not in line:
          print line
          line = p.stdout.readline()
       print line
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多