Anaconda/Minicondaのインストール/アンインストール自動化(Windows)

著者: 高久 隆史, 株式会社日立製作所

# はじめに
AnacondaやMinicondaは、Pythonのパッケージ管理を行うためのディストリビューションです。多数のライブラリを管理したPython実行環境として利用できます。
Anaconda/Minicondaのインストール/仮想環境構築/仮想環境破棄/アンインストールは、インストーラの実行やコマンドで実行しますが、何度も構築が必要なケースでは、それらのコマンドを毎回実行していくのに手間がかかります。

本稿では、Windows上で、このAnaconda/Minicondaのインストール/仮想環境構築/仮想環境破棄/アンインストールを自動化する手順を紹介します。
Linuxを前提とした手順は、次の投稿を参照してください。
[Anaconda/Minicondaのインストール/アンインストール自動化(Linux)](https://qiita.com/t-takahisa/items/64920fe3bebb34d46384)

なお、本稿で利用しているcondaコマンドの細かい説明は記載しておりませんので、condaコマンドをよく知らない方は、必要に応じて次のURLでcondaコマンドの仕様を確認しながら参照してください。
https://docs.conda.io/projects/conda/en/latest/commands.html


# 自動化の前提
・前提OSはWindows(64bit)とします。
・利用するWindowsのユーザ名は全角文字を含まないものとします(全角文字を含むとJupyter Labの実行でエラーになる可能性があります)。
・インストーラはMinicondaを利用します。また、事前にダウンロードしておくものとします。本稿では、「[Miniconda - Conda documentation](https://docs.conda.io/en/latest/miniconda.html)」からダウンロードした「Miniconda3-py38_4.10.3-Windows-x86_64.exe」を利用して動作確認しました。
・「Minicondaのインストール～仮想環境構築」、「仮想環境構築のみ」、「仮想環境ウィンドウオープン」、「仮想環境破棄のみ」、「Minicondaのアンインストール(仮想環境の破棄含む)」を1回のバッチファイルの実行で実施できるようにします。
・「Minicondaのインストール先ディレクトリパス」、「仮想環境名」、「仮想環境にインストールするライブラリ」はバッチファイル実行前に指定できるようにします。
・バッチファイルの実行に管理者権限は不要とします。
・エラー処理は省略しています。（エラー処理自体は難しくなく、それよりも本質的な処理内容を伝えたいため。）


# 自動化のファイル構成
自動化を行うために作成するファイル一覧を次に記載します。

| # | ファイル名 | 概要 | 
| :- | :- | :- |
| 1 | env.bat | 環境設定用バッチファイル | 
| 2 | lib_list.txt | 仮想環境にインストールするライブラリ一覧設定用テキストファイル |
| 3 | install_all_in_one.bat | Minicondaのインストール～仮想環境構築用バッチファイル |
| 4 | create_ve.bat | 仮想環境構築用バッチファイル |
| 5 | prompt_ve.bat | 構築した仮想環境のウィンドウオープン用バッチファイル |
| 5b | prompt_ve_i.bat | prompt_ve.batから内部的に呼び出すバッチファイル |
| 6 | destroy_ve.bat | 仮想環境破棄用バッチファイル |
| 7 | uninstall_all_in_one.bat | Minicondaのアンインストール(仮想環境破棄含む)用バッチファイル |

なお、ここで記載したバッチファイルのエンコードは、Shift-JISとして作成してください(コマンドプロンプトから実行したときに文字化けしないようにするため)。また、改行コードはCRLFで作成してください。

以降で、各ファイルの内容を記載していきます。


# 自動化のファイル作成
## #1 環境設定(env.bat)
環境によって後から変更したい設定をここに記載し、各バッチファイルの実行前に、本ファイルを編集してから実行する形にしています。
本稿の自動化では、以下の項目を外出し設定しています。

**外出し設定項目**

| # | 環境変数名 | 設定内容 |
| :- | :- | :- |
| 1 | MINICONDA_EXE_FILE_PATH | Minicondaのインストーラファイルパス |
| 2 | MINICONDA_INST_DIR | Minicondaのインストール先ディレクトリパス |
| 3 | VIRTUAL_ENV_NAME | 仮想環境名 |

**env.batファイルの記載例**

```bat:env.bat
rem Minicondaのインストーラファイルパス。
set MINICONDA_EXE_FILE_PATH=.\Miniconda3-py38_4.10.3-Windows-x86_64.exe

rem Minicondaのインストール先ディレクトリパス。
set MINICONDA_INST_DIR=C:\Miniconda3

rem 仮想環境名。
set VIRTUAL_ENV_NAME=MyVE
```


## #2 仮想環境にインストールするライブラリ一覧設定(lib_list.txt)
仮想環境にインストールするライブラリ一覧をここに改行区切りで記載し、各バッチファイルの実行前に、本ファイルを編集してから実行する形にしています。
ライブラリ名一覧のみを指定する例(デフォルトバージョンを利用)、ライブラリ名およびバージョンを指定する例を記載します。

**lib_list.txtの記載例(ライブラリ名のみを指定(デフォルトバージョンを利用))**

```:lib_list.txt
python
jupyterlab
scikit-learn
numpy
pandas
seaborn
optuna
flask
```

**lib_list.txtの記載例(ライブラリ名とバージョンを指定)**

```:lib_list.txt
python=3.8.8
jupyterlab=3.0.14
scikit-learn=0.24.1
numpy=1.20.1
pandas=1.2.4
seaborn=0.11.1
optuna=2.7.0
flask=1.1.2
```


## #3 Minicondaインストールの自動化(install_all_in_one.bat)
Minicondaのインストールは、インストーラファイル(本稿では「Miniconda3-py38_4.10.3-Windows-x86_64.exe」)を利用して実施します。
インストーラをダブルクリックして起動すると、インストールウィザードが開きますが、自動化するためにサイレントモードで実行します。
サイレントモードの仕様は次のURLで確認できます。
https://docs.anaconda.com/anaconda/install/silent-mode/

インストール対象をインストールを実行したユーザのみとして、サイレントインストールするコマンド例を次に示します。

```bat:install_all_in_one.bat(抜粋)
start /wait "" %MINICONDA_EXE_FILE_PATH% /InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /S /D=%MINICONDA_INST_DIR%
```

「install_all_in_one.bat」自体は、前述した環境設定の読み込みの他、Minicondaインストール～仮想環境構築をまとめて実施できるように、仮想環境構築を行う「create_ve.bat」(内容は後述)の呼び出しも行うようにします。

**install_all_in_one.batの記載例**

```bat:install_all_in_one.bat
@echo off

echo %DATE% %TIME% Minicondaのインストール～仮想環境構築を開始します。

rem カレントディレクトリを.batのあるディレクトリに移動します。
cd /d %~dp0

rem 環境設定を読み込みます。
call env.bat

echo Minicondaをインストールします。
start /wait "" %MINICONDA_EXE_FILE_PATH% /InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /S /D=%MINICONDA_INST_DIR%

rem 仮想環境を構築します。
call create_ve.bat

echo %DATE% %TIME% Minicondaのインストール～仮想環境構築を終了します。
```


## #4 仮想環境構築の自動化(create_ve.bat)
Minicondaをインストールしたら、仮想環境を新規に構築して、ライブラリをインストールします。
本稿では、conda-forgeを利用して、オンラインでライブラリをインストールする場合の例を記載します。
なお、インターネットに接続せずに、オフラインでインストールしたいという場合は、事前にインストールしたいライブラリをカスタムチャネル化しておき、カスタムチャネル化したライブラリを配置したディレクトリをチャネルとして登録することで実現できます。

カスタムチャネル化については、次の記事を参照してください。
[オフライン本番環境での機械学習実行環境構築シナリオとAnsibleによる構築自動化(前編)](https://qiita.com/yuki-tsutsumi/items/a4cf28110a4ac7908935)

**仮想環境構築の流れ**

| # | 項目 |
| :- | :- |
| 1 | conda環境に入る |
| 2 | 仮想環境を新規作成 |
| 3 | 作成した仮想環境に入る |
| 4 | 仮想環境にライブラリをインストール |

**create_ve.batの記載例**

```bat:create_ve.bat
@echo off
setlocal EnableDelayedExpansion

echo %DATE% %TIME% 仮想環境構築を開始します。

rem カレントディレクトリを.batのあるディレクトリに移動します。
cd /d %~dp0

rem 環境設定を読み込みます。
call env.bat

echo conda環境に入ります。
call %MINICONDA_INST_DIR%\Scripts\activate.bat

echo 仮想環境を新規作成します。
call conda create -n %VIRTUAL_ENV_NAME% -y

echo 作成した仮想環境に入ります。
call conda activate %VIRTUAL_ENV_NAME%

rem ライブラリ一覧をスペース区切りにして、変数に設定します。
set SPACE= 
for /f "delims=" %%a in (lib_list.txt) do (
    set LIB_NAME=%%a
    if "!LIB_LIST!" == "" (
        set LIB_LIST=!LIB_NAME!
    ) else (
        set LIB_LIST=!LIB_LIST!%SPACE%!LIB_NAME!
    )
)

echo conda-forgeからライブラリをインストールします。
call conda install -c conda-forge --quiet --yes !LIB_LIST!

echo %DATE% %TIME% 仮想環境構築を終了します。
```

**※ライブラリのインストールのTIPS**
・ライブラリごとにconda installコマンドを何度も実行するよりも、1回のconda installコマンドで複数のライブラリをまとめて実行した方が短時間でインストールできるため、本稿では1回のconda installコマンドで複数のライブラリをまとめてインストールしています。
・プロキシ環境下でインストールする場合、「conda create」コマンド実行前に次のコマンドを実行してください。本コマンドの実行により、conda設定ファイル「<実行したユーザのホームディレクトリ>/.condarc」にプロキシ情報が設定されます。

```
call conda config --set proxy_servers.http http://<ユーザID>:<パスワード>@<プロキシサーバのホスト名またはIPアドレス>:<プロキシサーバのポート番号>
call conda config --set proxy_servers.https http://<ユーザID>:<パスワード>@<プロキシサーバのホスト名またはIPアドレス>:<プロキシサーバのポート番号>
```


## #5 仮想環境のウィンドウオープン(prompt_ve.bat, prompt_ve_i.bat)
構築した仮想環境のコマンドプロンプトウィンドウをすぐ開くためのバッチファイルを作成しておきます。

**prompt_ve.batの記載例**

```bat:prompt_ve.bat
@echo off
%windir%\System32\cmd.exe "/K" %~dp0prompt_ve_i.bat
```

**prompt_ve_i.batの記載例**

```bat:prompt_ve.bat
@echo off
call env.bat
call %MINICONDA_INST_DIR%\Scripts\activate.bat
call conda activate %VIRTUAL_ENV_NAME%
cd /d %USERPROFILE%
```

## #6 仮想環境破棄の自動化(destroy_ve.bat)
ここでは、Minicondaはアンインストールせず、構築した仮想環境の破棄のみを行います。Minicondaごとアンインストールを行う場合は、この後の#7の手順を参照してください。

**仮想環境破棄の流れ**

| # | 項目 |
| :- | :- |
| 1 | conda環境に入る |
| 2 | 仮想環境を除去 |
| 3 | 利用されていないパッケージ、キャッシュを削除 |
| 4 | 不要なディレクトリを削除 |

**destroy_ve.batの記載例**

```bat:destroy_ve.bat
@echo off

echo %DATE% %TIME% 仮想環境破棄を開始します。

rem カレントディレクトリを.batのあるディレクトリに移動します。
cd /d %~dp0

rem 環境設定を読み込みます。
call env.bat

echo conda環境に入ります。
call %MINICONDA_INST_DIR%\Scripts\activate.bat

echo 構築した仮想環境を除去します。
call conda remove -n %VIRTUAL_ENV_NAME% --all -y

echo 利用されていないパッケージ、キャッシュを削除します。
call conda clean --all -y

echo 不要なディレクトリを削除します。
rd /s /q %MINICONDA_INST_DIR%\envs\%VIRTUAL_ENV_NAME%

echo %DATE% %TIME% 仮想環境破棄を終了します。
```

**※仮想環境破棄のTIPS**
・「conda remove」コマンドの仮想環境の除去だけだと、ディスク使用量があまり減りませんが、「conda clean」コマンドによる利用されていないパッケージ、キャッシュの削除も実行することにより、ディスク使用量を減らすことができます。


## #7 Minicondaアンインストール(仮想環境の破棄含む)の自動化(uninstall_all_in_one.bat)
ここでは、Minicondaのアンインストールを行います。
「install_all_in_one.bat」では、内部で「create_ve.bat」を呼び出して、Minicondaのインストールと仮想環境構築をまとめて実行していましたが、アンインストールでは、インストールディレクトリ削除の延長で仮想環境の破棄も実行されるため、「destroy_ve.bat」の呼び出しは行いません。

**Minicondaアンインストールの流れ**

| # | 項目 |
| :- | :- |
| 1 | Minicondaの設定ファイルを削除 |
| 2 | Minicondaのアンインストール |
| 3 | インストールディレクトリの削除完了待ち |

**uninstall_all_in_one.batの記載例**

```bat:uninstall_all_in_one.bat
@echo off

echo %DATE% %TIME% Minicondaのアンインストールを開始します。

rem カレントディレクトリを.batのあるディレクトリに移動します。
cd /d %~dp0

rem 環境設定を読み込みます。
call env.bat

echo conda設定ファイルを削除します。
del /q %USERPROFILE%\.condarc
rd /s /q %USERPROFILE%\.conda

echo Miniconcaをアンインストールします。
"%MINICONDA_INST_DIR%\Uninstall-Miniconda3.exe" /S

echo Minicondaインストールディレクトリが削除されるまで待ちます。
set LOOP_COUNT=0
:loop
if %LOOP_COUNT% geq 30 (
    echo Minicondaインストールディレクトリの削除でタイムアウトしました。使用中のプロセスがある場合は停止したあと、Minicondaインストールディレクトリ「%MINICONDA_INST_DIR%」を手動で削除してください。
    exit /b 1
)
timeout /nobreak 10
if exist %MINICONDA_INST_DIR% (
    set /A LOOP_COUNT=LOOP_COUNT+1
    goto :loop
)

echo %DATE% %TIME% Minicondaのアンインストールを終了します。
```

**※MinicondaアンインストールのTIPS**
・仮想環境はMinicondaインストールディレクトリ以下に作られているため、アンインストールの延長で削除されます。
・Minicondaのアンインストールの実行は、インストールディレクトリの削除が完了する前にコマンドの応答が返ってきてしまうため、削除が完了するまで待機するようにしています。ただし、仮想環境利用中などでインストールディレクトリが削除できないケースもあるため、一定時間経過したらタイムアウトするようにしています。
・Minicondaのアンインストールで自動削除されないconda設定ファイルは個別に削除しています。このファイルを削除しないと、将来のMinicondaの再インストール時に失敗する可能性があるためです。[正式な手順](https://docs.anaconda.com/anaconda/install/uninstall/)はanaconda-cleanを利用することですが、anaconda-cleanを利用するには、anaconda-clean自体を仮想環境にインストールしておく必要があること、anaconda-cleanがconda-forgeに存在しないこと、anaconda-cleanを利用してもこの設定ファイルの退避しか実行されないと推測されること、から本稿の手順では利用していません。

# 作成したファイルによるMinocondaのインストール、仮想環境構築、仮想環境破棄、アンインストールを実行する手順
作成したファイルを利用してMinicondaのインストール～仮想環境の構築を実行するには、コマンドプロンプトから以下のように実行します。

```
cd /d <バッチファイルなどを配置したディレクトリ>
install_all_in_one.bat >> log.txt 2>&1
```
※conda installコマンドの延長で、コンソール出力内容が消去されてしまうため、上記のようにリダイレクトして実行することをお勧めします。

構築した仮想環境の破棄とMinicondaのアンインストールを行う場合は、上記と同様に「uninstall_all_in_one.bat」を実行します。
仮想環境の破棄だけ実施したい場合は、「destroy_ve.bat」を実行します。
仮想環境の構築だけ実施したい場合は、「create_ve.bat」を実行します。「env.bat」の「VIRTUAL_ENV_NAME」で指定している仮想環境名を変更することで、複数の仮想環境を構築することもできますが、「env.bat」は他のバッチファイルでも参照していますので、変更したあとに、「prompt_ve.bat」や「destroy_ve.bat」を実行する際は、意図した仮想環境名に対して実行されるように留意してください。


# 構築した環境の利用手順
作成した「prompt_ve.bat」をダブルクリックして仮想環境のウィンドウを開いて操作します。
(スタートメニューの「Anaconda3 (64bit)」-「Anaconda Prompt (Miniconda3)」で開く場合、仮想環境がデフォルトの「base」で開きますので、注意してください。ここから構築した仮想環境に入るには、「conda activate <env.batの「VIRTUAL_ENV_NAME」で指定した仮想環境名>」を実行してください。)

**インストールされているライブラリ一覧の確認例**

```
(MyVE) C:\Users\user1\work>conda list
# packages in environment at C:\Miniconda3\envs\MyVE:
#
# Name                    Version                   Build  Channel
… (長いので省略)
```

**Pythonコマンドの実行例**

```
(MyVE) C:\Users\user1\work>echo print("Hello world!")> helloworld.py
(MyVE) C:\Users\user1\work>python helloworld.py
Hello world!
```

**Jupyter Labの利用例**

```
(MyVE) C:\Users\user1\work>jupyter lab
```
上記「jupyter lab」コマンドの延長で、ブラウザでJupyter Labのページが開きます。
「jupyter lab」コマンドのコンソールに出力される「 http://localhost:8888/?token=xxx 」のURLを利用して、任意のブラウザで開くこともできます。
なお、本投稿時点でのJupyter Labのサポートブラウザは、Firefox, Chrome, Safariとなっており、IEだと開けないため、注意してください。
https://jupyterlab.readthedocs.io/en/latest/getting_started/installation.html?highlight=browser#supported-browsers

本稿の手順で構築した環境で機械学習のデータ分析のコードを動かしてみたい、という場合、次の記事を参考にしてください。
[scikit-learnのサンプルデータセットと主要OSSを活用したデータ分析のチュートリアル](https://qiita.com/a-yanagimura/items/d948856894c54db4d61e)


# おわりに
本稿では、Windows上で、このAnaconda/Minicondaのインストール/仮想環境構築/仮想環境破棄/アンインストールを自動化する手順を紹介しました。
Anaconda/Minicondaの構築に時間がかかっている方のお役に立てれば幸いです。