macOS Montereyでpyenv installが失敗したときの記録

### 環境
- macOS Monterey 12.3.1
- Command Line Tools for Xcode 13.3.1 (ソフトウェアアップデートでインストール)
  - `pkgutil --pkg-info=com.apple.pkg.CLTools_macOS_SDK`
- pyenv v2.2.5 [GithubからCloneしてインストルしたもの](https://github.com/pyenv/pyenv#basic-github-checkout) （**homebrewではない**）
- zlibはhomebrewでインストール済み
  - `brew install zlib`


### 原因
最新のmacOSのzlibを使うとうまく行かない。
（それ以上はわからないすまん）

### 解決方法
pyenvのプラグインとして付属しているpython-buildを書き換えた。
（homebrewのpyenvの人はすまんわからん）

変更するファイル：
`~/.pyenv/plugins/python-build/bin/python-build`

変更箇所：
```diff
diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build
index cd333a4a..883f459e 100755
--- a/plugins/python-build/bin/python-build
+++ b/plugins/python-build/bin/python-build
@@ -769,11 +769,7 @@ build_package_standard_build() {
     use_homebrew || true
     use_tcltk || true
     use_homebrew_readline || use_freebsd_pkg || true
-    if is_mac -ge 1014; then
-      use_xcode_sdk_zlib || use_homebrew_zlib || true
-    else
-      use_homebrew_zlib || true
-    fi
+    use_homebrew_zlib || true
   fi

   ( if [ "${CFLAGS+defined}" ] || [ "${!PACKAGE_CFLAGS+defined}" ]; then
```

あとはいつも通り`pyenv install 3.10.3`などとすればOKでした。


他の解決方法は、ビルドフラグ周りを丁寧に設定してexportしていくスタイル。
詳細はこちらへどうぞ：
https://qiita.com/kzrashi/items/80ff82d4330d51a398dc


### 今回出たエラー

```
pyenv install 3.10.1
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.1.tar.xz...
-> https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tar.xz
Installing Python-3.10.1...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 12.3.1 using python-build 2.2.5)

Inspect or clean up the working tree at /var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863
Results logged to /var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863.log

Last 10 log lines:
  File "/private/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863/Python-3.10.1/Lib/ensurepip/__init__.py", line 277, in _main
    return _bootstrap(
  File "/private/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863/Python-3.10.1/Lib/ensurepip/__init__.py", line 193, in _bootstrap
    return _run_pip([*args, *_PACKAGE_NAMES], additional_paths)
  File "/private/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863/Python-3.10.1/Lib/ensurepip/__init__.py", line 93, in _run_pip
    return subprocess.run([sys.executable, '-W', 'ignore::DeprecationWarning',
  File "/private/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863/Python-3.10.1/Lib/subprocess.py", line 524, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/private/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/python-build.20220418172629.29863/Python-3.10.1/python.exe', '-W', 'ignore::DeprecationWarning', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/tmpkr98li74/setuptools-58.1.0-py3-none-any.whl\', \'/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/tmpkr98li74/pip-21.2.4-py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/var/folders/8v/vmn5tm455_z7l9hcwzm4hnd80000gn/T/tmpkr98li74\', \'--root\', \'/\', \'--upgrade\', \'setuptools\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' returned non-zero exit status 1.
make: *** [install] Error 1
```

検索すると結構同じところで困っている人がいて、結局の所はxcodeのzlibだとうまく行かないのでhomebrewのzlibを使うようにビルドパス周りを何とかするというのがだいたい共通した解決方法。

### 雑談

homebrewでもCellerのなかにあると思うからそれをいじればOKだと思うけどhomebrewに影響が出るかも？まあ大丈夫だとおもうけど。
`find /usr/local/Cellar/ -name "python-build"`とかで出てくると思う。
自己責任で。

個人的にはナントカenvはhomebrewではなくgithubからcloneして使うほうが好き。
結構バージョンによって不具合があったり、goenvなんかだとプラグインのgo-buildは最新にしたいけ本体は古いものを使いたいとかもあったりする。
単純にGitでバージョンを変えれるし、今回のような問題だとprofileなどにビルドフラグの設定とかを追加しなくて済む。
ただホーム下のドットフォルダが増えるからまあ、一長一短なのかな。