[Python] AnacondaからMinicondaへの移行

# 初めに
pythonの実行環境としてAnacondaを使用していたが、容量の関係などからMinicondaへと環境を移行した。
その際の移行手順をまとめた。

|環境|詳細|
|---|---|
|OS|windows11|

本作業でよく使用したコマンドは以下にまとめた。

https://qiita.com/flcn-x/items/2a1c4095d7febe864db8

# 移行手順
## 1. 移行環境のexport

まず、移行する環境の情報をexportする。
テキスト出力もあるが、インポート時の手順からymlを推奨する。
※大括弧内は任意名称。初期のbaseでも可。

```:Anaconda Prompt
conda env export -n [任意環境名:base] --no-builds > [任意ファイル名:env.yml]
```
カレントディレクトリに任意のファイル名のymlファイルが作成される。
内容は以下のような情報が含まれている。
```:env.yml
name: [任意環境名:base]
channels:
  - conda-forge
  - defaults
  - xxx
dependencies:
  - python=3.xx.xx
  - xxxx=1.1.1
```

## 2. Minicondaのインストール

Minicondaのインストールは、以下のサイトから適当な環境のものを選択する。
https://docs.conda.io/en/latest/miniconda.html
※更新や偽の可能性もあるので自身で調べてください。

なお、minicondaとanacondaは共存可能なようなので、インストール前のanacondaアンインストールは必須ではない。
[参考サイト:【後で困らないための】Miniconda windows版の環境構築](https://resanaplaza.com/2021/06/20/%E3%80%90%E5%BE%8C%E3%81%A7%E5%9B%B0%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AE%E3%80%91miniconda-windows%E7%89%88%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/#AnacondaMiniconda-2)

インストーラのダウンロード後、以下の手順で実行し、minicondaを導入する。

 - インストーラーを実行
 - セットアップ情報：「Next」をクリック
 - ライセンス情報：「I Agree」をクリック
 - インストール先：「All Users」 を選択し、「Next」をクリック　※任意選択
 - インストール先：「Next」をクリック
 - 環境変数設定：追加にチェックを入れ、「Install」をクリック ※任意選択
 - インストール完了後：「Next」をクリック
 - インストール完了後：「Finish」をクリック

インストール後、WindowsスタートメニューのAnaconda3(64-bit)に「Anaconda Prompt (Miniconda)」が追加されていれば完了。

## 3. 仮想環境の移行

前述のenv.ymlファイルを用いて環境の移行を行う。
Anaconda Prompt (Miniconda)を管理者権限で立ち上げる。

```:Anaconda Prompt
conda env create -n [新たな環境名] -f [env.yml]
```
新たな環境で既存のプログラムが動作することを確認したら、次のステップに移行する。
新規環境で構築しているので、SSL設定等が必要な場合はお忘れなく。

```:Anaconda Prompt
conda config --set ssl_verify no
```

https://qiita.com/ozaki_physics/items/13466d6d1954a0afeb3b

## 4. Anacondaのアンインストール
Anaconda Promptで削除用のパッケージをインストールする。

```:Anaconda Promp
conda install -c anaconda anaconda-clean
```

インストール後、コマンド実行し、削除していく。
削除に関しては実行要否が質問されるので、yを入力していく。
もしくは、コマンド実行時にすべてyesを指定する。

```:Anaconda Promp
anaconda-clean
もしくは
anaconda-clean --yes
```

```
Delete .conda? (y/n): y
Delete .ipython? (y/n): y
Delete .jupyter? (y/n): y
...
```

Windowsの設定→アプリ→アプリと機能から、Anacondaを指定し、プログラムのアンインストールを実行する。
実行完了後、anaconda関連のディレクトリが削除されていれば完了。

https://qiita.com/laplaciannin102/items/7782a753347ff8ba448d

# その他
## Jupyter Notebookの導入
Anaconda使用時にJupyter Notebookを使用していた人はMinicondaにはデフォルトでは入っていないので、導入する必要がある。
個人的には、開発環境はjupyterで使用しているipynbの対話型実行も拡張機能で対応しているVSCodeに集約している。

インストールは以下で実行。
```:Anaconda Prompt
pip install jupyter notebook
```

```:Anaconda Prompt
conda install notebook ipykernel
```

実行時はコマンドから実行して立ち上げる。
```:Anaconda Prompt
jupyter notebook
```

https://qiita.com/Ringa_hyj/items/0d8193925fbf4e53a113

## ライセンス
Anacondaのライセンスは、大規模商用利用の際には有償となる。

https://qiita.com/kimisyo/items/986802ea52974b92df27

# エラー対処
作業中に発生したエラーと原因、対処した方法を記す。

## PackagesNotFoundError：1
詳細：The following packages are not available from current channels
新たな仮想環境を作成する際に発生。
環境構築時のコマンドミスが原因でエラーになった模様。
ymlファイルからの環境構築は以下のようにコマンドを使用する。
```
NG
conda create -n [仮想環境名] -f environment.yml
OK
conda env create -n [仮想環境名] -f environment.yml
```

## ResolvePackageNotFound：2
さらに、環境構築時に発生。
ビルドの指定でパッケージインストールがうまくいかないことが原因でエラーになった模様。
環境export時に除外設定することでymlから記述を削除することで対応。
```
NG
conda env export -n [環境名] > env.yml
OK
conda env export -n [環境名] --no-builds > env.yml
```

https://qiita.com/hayato1130/items/676894f7e7dd0e9fe527

## ResolvePackageNotFound：3
さらに、環境構築時に発生。
今回、移行前と後でチャンネルを変更したため、昔もしくは最新のバージョンがチャンネル内になく、エラーとなった模様。
バージョン情報の指定をymlから除外することで対応。

https://www.web-dev-qa-db-ja.com/ja/python/anaconda%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9Fresolvepackagenotfound/836232055/

## ResolvePackageNotFound：4
さらに、環境構築時に発生。
チャンネル内に該当のパッケージが存在し無いことが原因でエラーになった模様。
今回、前提条件としてチャンネル制約を優先しているため、該当パッケージをymlから削除することで対応。

## CondaValueError: Value error: prefix already exists
新たな仮想環境を作成する際に発生。
作成したい環境名と同じ名前の環境がすでに存在することが原因でエラーになった模様。
※おそらくデフォルトのbaseも該当。環境名を指定しない場合はbaseになっているケースもある。
環境をコマンド削除する。また、C:/ProgramData/Miniconda3/env/[仮想環境名]ディレクトリが存在していれば削除することで対応。

## Found conflicts! Looking for incompatible packages.
パッケージ間の競合などが発生した場合にメッセージが出る。
エラーではなく、解決のために処理がされるが、長すぎるもしくは終わらないケースがある模様。
数件の記事では、バージョンのアップデートで解決した報告があった。

```
conda update —all
```

https://yoshi-lab.net/article_research/27/

今回は、ymlの全パッケージのバージョン指定を削除することで対応。

## コマンドプロンプトが起動しない

Anacondaのアンインストール後にコマンドプロンプトが起動しない不具合が発生する。
発生する場合と発生しない場合があり、原因は理解できていない。
解決法は以下の記事を引用する。

https://qiita.com/migihidari/items/9a07883f6ce03d6fd9c6

```powershell:PowerShell
Reg Delete "HKCU\Software\Microsoft\Command Processor" /v AutoRun /f
```

# 最後に
仮想環境の移行は初で、エラーも多く、難儀したが、本記事にリンクした参考サイト様のおかげで解決した。多謝。