M1 Macで機械学習するためのPython環境構築

## はじめに
突然ですが、皆さんはPythonの実行環境は何を使っていますか？

Anaconda？venv？色々ありますよね。

自分は**Miniforge**を現在使用しています。あくまで個人の意見ですが、**M1 macで機械学習をするならMiniforgeを使うのがベストプラクティス**だと思います。ということで、この記事ではMiniforgeの環境構築の手順を書いていきます。ぜひ参考にしてみてください。

## Miniforgeについて

Miniforgeとは、パッケージ管理システムの**conda**をconda-forgeリポジトリで利用するためのツールです。

特徴として、**M1 Macを含むマルチプラットフォームに対応している**ことが挙げられます。
現状、**多くのライブラリにおいてM1 macに簡単にインストールするための唯一の手段**となっています。

Pythonで機械学習をしていると必ず出会う、Tensorflowというライブラリがありますね。
私はTensorflowをanacondaにインストールしようとして沼りました。**m1 mac上のanacondaではtensorflowが使用できなかったのです。**なんてこった。

なぜMiniforgeがm1 macで機械学習をするのに優れているのか理解できましたでしょうか。
一言で言ってしまえば**Tensorflowが簡単に導入できる**からです。(Transformerとかもね。)

早速Miniforgeの環境構築の手順について解説していきます。

## Miniforge環境構築

### Python本体のインストール確認

macにはPython自体はデフォルトでインストールされています。
デフォルトのPython以外は消してしまうことが望ましいです。

(私もいろいろな実行環境が混在していて大変なことになっていました…笑)

パスを確認しましょう。以下のコマンドを打ち、返ってきたパスが`/user/bin/python3`であればデフォルトのPythonにパスが通っているのでOKです。

```markdown
which python3
```

Homebrewをインストールしている方、多いと思います。
HomebrewにもPythonが存在している可能性があるので確認しましょう。

以下のコマンドでHomebrewのインストールパッケージ一覧を表示させ、Pythonが表示しないことを確認します。

```markdown
brew list
```

## Miniforgeのインストール

Pythonが他に存在しないことを確認したら、早速Miniforgeをインストールしていきましょう。

### 1. Minifogeをダウンロード

[MiniforgeのGitHubページ](https://github.com/conda-forge/miniforge)へアクセスし、以下のMiniforge3-MacOSX-arm64をダウンロードしてください。

![スクリーンショット 2022-12-04 14.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2050411/8f6abdb1-cc0f-5335-b081-6cb9b12739da.png)


(pypy, Mambaとか言うのもありますが一旦無視で。高速化を目的としたやつららしいです。知らんけど。)

### 2. ダウンロードファイルを実行

ターミナルからダウンロードフォルダへ移動し、ダウンロードしたMiniforge3-MacOSX-arm64.shを実行しましょう。

```markdown
cd downloads
bach Miniforge3-MacOSX-arm64.sh
```

色々聞かれますが、Enterかyesをポチポチすれば大丈夫です。

### 3. condaを有効化する

インストール完了後、シェルを開き直し、以下のコマンドでcondaを有効化します。

```markdown
conda activate
```

`(base)`と表示された方は成功です。**4(仮想環境を作る)**に進みましょう。

`zsh: command not found: conda`と表示され、実行できない方はPATHが通っているか確認していきましょう。

設定ファイル(.zshrc)を確認しましょう。ホームディレクトリから`.zshrc`を開きます。

```markdown
cd ~
open .zshrc
```

このようなテキストが表示されましたか？表示されていなければ、PATHがファイルに記入されていないので記入しましょう。[名前]と書いてある部分は自身のMacユーザー名を入力しましょう。

```markdown
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/名前/miniforge3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/名前/miniforge3/etc/profile.d/conda.sh" ]; then
        . "/Users/名前/miniforge3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/名前/miniforge3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
```

これでも`conda activate`ができない？zshが起動済みで変更内容が反映されていないのかも知れません。

実行中のzshに編集内容を反映させたい場合は`source`コマンドを使いましょう。

sourceはファイルからコマンドを読み込んで現在のシェルで実行するコマンドです。

以下のコマンドを実行してみましょう

```markdown
source ~/miniforge3/bin/activate
```

(base)と表示されたのではないでしょうか？表示されていないのであれば、minifoge3というファイルがホームディレクトリにない可能性があります。場所を探してみましょう。

### 4. 仮想環境を作る

仮想環境を作りましょう。今はデフォルトの`(base)`を有効化していますが、以下のコマンドで一旦有効化を止めましょう。`(base)`が表示されなくなればOKです。

```markdown
conda deactivate
```

tryという環境をつくって見ましょう。以下のコマンドを叩きましょう

```markdown
conda create -name try python=3.9
```

処理が終わったら`try`を有効化してみましょう

```markdown
conda activate
```

`(try)`と表示されましたか？表示されたら成功です。**5(ライブラリをインストール)**へいきましょう。

表示されていない？こんなエラーが出ているのではないでしょうか？

```markdown
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - try

Current channels:

  - https://conda.anaconda.org/conda-forge/osx-arm64
  - https://conda.anaconda.org/conda-forge/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.
```

これ(`PackagesNotFoundError`)はtryという環境を作成するためのリポジトリが見つからないと言われています。

はじめの方に記述しましたが、Miniforgeはcondaをconda-forgeリポジトリで利用するためのツールです。conda-forgeリポジトリが見つからないと言われている訳ですね。

指定して実行してあげましょう。

```markdown
$ conda create -n try -c conda-forge python=3.9
```

これで行けたんじゃないでしょうか。

長かったですが、これでMiniforgeの環境構築は終了です！
後は必要なライブラリをインストールしていきましょう！

### 5. ライブラリをインストール

では作成した環境にライブラリを入れていきましょう。
とりあえず`(try)`で進めていきますが、好きに仮想環境を作ってください。

tryを有効化しましょう

```markdown
conda activate try
```

(try)が出たらライブラリをインストールしましょう。とりあえずnumpyを入れます。

```markdown
conda install numpy
```

これで入ると思います。

他のライブラリを入れる場合も大抵は同様の感じで行けると思います。

Tensorflowのインストールはちょっと特殊なので書いておきます。

```markdown
conda install -c apple tensorflow-deps -y
python -m pip install tensorflow-macos
python -m pip install tensorflow-metal
```

以上です。

## まとめ

Miniforgeの環境構築はできましたか？

M1 macでごりごり機械学習していきましょう!!

## 参考記事

- [M1 Mac環境構築ベストプラクティス](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B31miniforge%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [【M1/Mac】miniforgeでzsh: command not found: condaなどと表示されて実行できない時の対処法](https://zenn.dev/teba_eleven/articles/1691b3e25dd751)
- [M1 Macで機械学習やPythonはMiniforgeを使う](https://qiita.com/kujirahand/items/9bf1a1e7bd34bdb87da5)
- [【 source 】【.】 ファイルからコマンドを読み込んで現在のシェル環境で実行 【 Linuxコマンドまとめ 】](https://linuxfan.info/source)
- [condaでPackagesNotFoundErrorが発生したときの対処方法](https://mathematical-free.com/?p=1263)