web-dev-qa-db-ja.com

Condaはすべての環境(ルートを除く)を削除します

単一の環境を削除できることはわかっています

 conda remove -n envname --all

しかし、特定のパッケージをインストールしたりテストしたりするために複数の新しい環境を作成することがよくあるため、定期的に5〜10の環境になり、次々に削除するのは面倒です。ルート環境を除くすべての環境を削除する簡単な方法(Windowsの場合)はありますか?

12
MSeifert

envs内にあるcondaサブディレクトリ内のすべてのディレクトリを削除すると機能します。

12

最もエレガントな答えではありません。ただし、すべての環境の名前を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 ...コマンドを生成できます。

2
henryJack

私のコメントによると、1つのcondaコマンドですべての環境を取得し、それをループして個別に削除することができます。これがあなたがこのようなことをすることができる1つの方法です。 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
1
Ringil