Conda 删除所有环境(root 除外)

Conda remove all environments (except root)

我知道我可以使用

删除单个环境
 conda remove -n envname --all

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

根据我的评论,您可以使用一个 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

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

~\.conda\envs\

不是最优雅的答案。但我只想从 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 ...命令。

基于

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

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