M1 Macでのpython環境の構築(pyenv + miniforge)

## はじめに
これまでなんとなく利用してきた Mac での python 環境を見直し、pyenv + miniforge で環境構築し、気象ライブラリであるMetpyとJupiter Labを利用可能にしたため、その過程を記録する。

python環境見直しの一つのきっかけは、これまで利用していたpythonのpipを使ってMetPyがインストールできなかったことであった。

### 目標
* pyenv + miniforge で python 環境を構築する
* MetPyを Jupyter Lab で利用できるようにする

### 環境
* PC: Makbook Pro (13-inch, M1, 2020)
* OS: MacOS Big Sur (Version 11.5.2)

### 方針
* pyenv でpythonの実行環境を管理する
* miniconda のフォークである miniforge (3-4.10.1-5)を用いる
 * miniforgeとはさまざまなCPUアーキテクチャ（intelのx86_64やppc64le、Apple M1を含むaarch64）のサポートに重点を置いたMiniconda。
 * M1チップでは、pyenvを用いてpython(3.10.0や3.9.7)やanaconda3-2021.05がインストールできなかった。このため、M1チップで利用可能なminiforgeを用いることにした。
* パッケージ管理は conda で行う
  * miniforgeはconda 系のパッケージ管理ツールであるため

### 参考HP
https://mizu.bosai.go.jp/wiki2/wiki.cgi?page=Python%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%28Linux%A4%C7%B2%F2%C0%CF%A4%C8%C9%C1%B2%E8%A4%F2Python%B0%EC%A4%C4%A4%C7%B2%C4%C7%BD%A4%CB%29

https://qiita.com/C2_now/items/c85be2ffeacd61cc7207

https://qiita.com/ksato9700/items/5d9eba10fe6b8e064178

---

https://insilico-notebook.com/python-in-applesilicon/

上記HPでは以下の3つの方法が記述されており、今回は2を選択した。
1. Homebrewで直接pythonをインストールする
2. Anaconda環境(miniforge)を使う
3. Dockerを使う



https://zenn.dev/osuzuki/articles/380be0f682d72d

M1 Macの罠が詳しく書かれている


## インストール

### pyenv のインストール
git を利用して、ホームディレクトリ以下にpyenvをインストールした。

```
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
```

.bashrcの設定と読み込み

```
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
$ source .bashrc
```

#### pyenv の利用法
python や miniconda などのインストール可能なパッケージの表示

```
$ pyenv install --list
```

### pyenv-virtualenvのインストール
現状まだ利用していないが、インストールしておく。

```
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
$  echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
```

### miniforgeのインストール
インストール

```
$ pyenv install miniforge3-4.10.1-5
```

利用するパッケージ(miniforge)を指定する。

```
$ pyenv global miniforge3-4.10.1-5
```
global は自分がいるディレクトリに関わらず適用される設定。
（特定のディレクトリ以下に適用させるには global ではなく local とする。）


今現在インストールされているPythonやminiforgeのバージョンを確認

```
$ pyenv versions
  system
* miniforge3-4.10.1-5 (set by /Users/katon/.pyenv/version)
```
~/.pyenv 以下にインストールされた miniforgeが利用されていることを確認できる。
ここで、system というのはpyenvではなく、OS側で用意されているpythonになる。


condaコマンドを利用可能にする

```
$ conda activate
```

コマンドラインが以下の表示になる

```
(base) (miniforge3-4.10.1-5) katon@kyudai ~ %
```

conda コマンドは以下を参照。

https://qiita.com/naz_/items/84634fbd134fbcd25296



### metpyのインストール
```
$ conda install -c conda-forge metpy
```
https://unidata.github.io/MetPy/latest/userguide/installguide.html

### jupyterのインストール
Jupyter Notebookの後継であるJupyterLabを利用するためには、jupyterをインストールすればよい。

インストール

```
$ conda install jupyter
```

以下のコマンドで jupiter lab が起動できた。

```
$ jupyter lab
```

https://miyukimedaka.com/2020/06/07/0143-jupyterlab-explanation/

MetPyの以下のサンプルコードがjupiter lab上で動くことが確認できた。

https://unidata.github.io/MetPy/latest/examples/XArray_Projections.html#sphx-glr-examples-xarray-projections-py

### scikit image のインストール
```
conda install scikit-image
```