M1チップでHomebrewからnumpyまで入れる

# はじめに
先に結論を言うと、numpyはバージョン1.15.4を入れたかったんですが、それはできませんでした。
ご存知の方いらっしゃいましたら、教えてください。

下記が今回インストール出来たものです

- homebrew
- pyenv
- Python3.9.4
- numpy 1.21.0（latest）

# 行った手順
Homebrewを入れるところから記述させていただきます。

## homebrew入れる
[Homebrew](https://brew.sh/)のサイトを開く。

```zsh
#サイトのコマンドを叩く(2021/07/06 時点)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
#上記を実行したら "Next Step" にあるechoコマンドを叩く。
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/ユーザ名/.zprofile
#上記の内容を反映
source /User/ユーザ名/.zprofile
#インストールができているか確認
#"Your system is ready to brew."と出ればOK
brew doctor
```
私は`brew doctor`で config がなんたらと警告が出たので以下を参照して解決しました。
https://qiita.com/ponsuke0531/items/7ede97f6abe6129802c1

## pyenv入れる
zsh環境なので[こちらのドキュメント](https://github.com/pyenv/pyenv/blob/master/README.md#the-automatic-installer)のzsh環境用の記載を参考にしました。

```zsh
brew install pyenv
brew install pyenv-virtualenv
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
source ~/.zprofile
```

## Python3.9.4の環境を作る
3.8を入れようと思ったんですが、Rosettaを使用しても何故か入れられませんでした。
仕方ないので3.9.4を入れました。

```zsh
pyenv install 3.9.4
```

~/workspaceという名前のディレクトリ下ではpython3.9.4を使うようにしたいと思います

```zsh
pyenv virtualenv 3.9.4 python3.9
cd ~/workspace
pyenv local python3.9
# 以下で "Python 3.9.4　" と出ればOK
python -V
```

## numpy1.15.4を入れる
以下のコマンドを叩いてnumpyのインストールを試みますが、大量のエラー文が表示されます。

```zsh
pip install numpy==1.15.4
# 他に試したコマンド
pip3 install numpy==1.15.4
``` 

エラー

```
Building wheels for collected packages: numpy
  Building wheel for numpy (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/username/.pyenv/versions/3.9.4/envs/python3.9/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"'; __file__='"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-wheel-6y0i1096
       cwd: /private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/

(省略)

Installing collected packages: numpy
    Running setup.py install for numpy ... error
    ERROR: Command errored out with exit status 1:
     command: /Users/username/.pyenv/versions/3.9.4/envs/python3.9/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"'; __file__='"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-record-xmeah240/install-record.txt --single-version-externally-managed --compile --install-headers /Users/username/.pyenv/versions/3.9.4/envs/python3.9/include/site/python3.9/numpy
         cwd: /private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/
    
    Note: if you need reliable uninstall behavior, then install
    with pip instead of using `setup.py install`:
      - `pip install .`       (from a git repo or downloaded source release)
      - `pip install numpy`   (last NumPy release on PyPi)

ERROR: Command errored out with exit status 1: /Users/username/.pyenv/versions/3.9.4/envs/python3.9/bin/python3.9 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"'; __file__='"'"'/private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-install-mgni2caq/numpy_3790ae5e326745d5ab445d94fd5bbb50/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/z5/03qjd30x79g3yj_mwr48hbp40000gn/T/pip-record-xmeah240/install-record.txt --single-version-externally-managed --compile --install-headers /Users/username/.pyenv/versions/3.9.4/envs/python3.9/include/site/python3.9/numpy Check the logs for full command output.
```

## numpy1.21.0(latest)を入れる
上記のエラーにもあるんですが、以下コマンドによってlatestはインストールすることはできました。

```
pip install numpy
```

# 最後に
python3.8やnumpy1.15.4の件を鑑みると、現状だと基本的にはlatestなどの比較的新しいバージョンにしか対応していないのかもしれません。。。