M2 Mac分析環境構築

MacOSにデータ分析環境を作るのに試行錯誤したので、備忘録を残しておく。
もし同様に悩んでいる人がいてその助けにもなれば。

#### 背景
- 目的や用途（自然言語処理・時系列分析・画像解析など）に応じて、Pythonやパッケージの依存関係などの事情により、環境を複数用意する必要がある。
- Pythonの仮想環境やパッケージの管理には様々な方法があり、現状（2023.6現在）ではベストプラクティスとして一般化されているものがあるとは言い難い。※
※ 目的や用途が多様である以外にも個々の使用OS・端末などに依存する問題もある。
- 環境構築に成功した時の手順を備忘録として残しておく。

#### 環境構築を行った端末
- MacBook Pro(M2)
- MacOS Ventura ver.13.1

#### 行ったこと
- miniforgeによる環境構築
※ [こちらのQiita記事](https://qiita.com/c60evaporator/items/b6a7394231d1e768ce64)を参考にさせていただいてminiforgeを選ぶことにしました。
- 構築した環境は、汎用環境と深層学習（TensorFlow, PyTorch）、自然言語処理の3種類
- 自然言語処理の手順は[こちら](https://qiita.com/bsMGUXnCaWJvgKkzowFY/items/3913b54f1ff9376e1adb)に記載。

#### 1️⃣miniforgeインストール
1. [miniforgeのGitHub](https://github.com/conda-forge/miniforge#download)からM1/M2用のインストーラ（Miniforge3-MacOSX-arm64）をダウンロードした後、下記コマンドをターミナルで実行する。
途中で聞かれる質問には全て"Enter"か"yes"で答えて先に進む。
    ```
    cd ~/Downloads
    bash Miniforge3-MacOSX-arm64.sh
    ```
    ターミナルを再起動後、下記コマンドでcondaのデフォルト環境(base)上にインストールされているPythonのバージョン等の情報が表示されれば成功。
    ```
    conda info -e
    ```
    condaコマンドが認識されない時は下記を実行する。
    ```
    eval "$(~/miniforge3/bin/conda shell.bash hook)"
    conda init
    ```
    (base)のような仮想環境名をデフォルトで非表示(自動有効化を無効)にするには下記コマンドを実行する。
    ```
    conda cofig --set auto_activate_base false
    ```
2. pythonバージョンを指定して仮想環境を作成・有効化し、必要なライブラリを入れていく。
    ```
    conda create -n myenv python==3.10
    conda activate myenv
    conda install pandas numpy scipy matplotlib...
    ```

#### 2️⃣TensorFlow
1. PJ用ディレクトリを作成し、pythonのバージョンを指定して仮想環境を作成・有効化する。
    ```
    conda create -n tf python==3.9
    conda activate tf
    ```
2. TensorFlowをインストールする。macの場合、下記3パッケージを入れる必要がある。
    ```
    conda install -c apple tensorflow-deps==2.10.0
    python -m pip install tensorflow-macos==2.10.0
    python -m pip install tensorflow-metal==0.6.0
    ```
3. pythonを起動し、TensorFlowのimport、バージョン確認ができれば成功。
    ```
    python3
    Python 3.10.0 | packaged by conda-forge | (default, Nov 20 2021, 02:27:15) [Clang 11.1.0 ] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import tensorflow as tf
    >>> print(tf.__version__)
    2.10.0
    ```

### 3️⃣PyTorch
1. [公式サイト](https://pytorch.org/)にアクセス
2. ガイダンスがあるので、インストールする端末の環境を順に選択すると適切なコマンドが表示される。
    - PyTorch Build: Stable(2.0.1)
    - OS: Mac
    - Package: Conda
    - Language: Python
    - Compute Platform: Default
    -> "Run this command"にコマンドが表示される。
3. 2で表示されたコマンドをターミナルで実行し、PyTorchをインストール
4. pythonを起動し、PyTorchのimport、バージョン確認ができれば成功。
    ```
    python3
    Python 3.10.0 | packaged by conda-forge | (default, Nov 20 2021, 02:27:15) [Clang 11.1.0 ] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import torch
    >>> print(torch.__version__)
    2.0.1
    ```

### 参考
- [Pythonのパッケージ管理ベストプラクティス](https://qiita.com/c60evaporator/items/b6a7394231d1e768ce64#miniforge%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-1)
- [【Python】M1/M2 MacでPython環境の構築（機械学習・データ分析編）](https://namileriblog.com/python/python_library_ai/#i-30)
- [M1 MacにTensorFlowをインストールする](https://qiita.com/chipmunk-star/items/90931fb5180b8024adcb#python%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)
- [Symbol Not Found Error: Tensorflow Metal for Apple M1](https://developer.apple.com/forums/thread/689300)