tl;dr
SYSTEM_VERSION_COMPAT=1 pip install grpcio cryptography
問題が生じた環境
- macOS Big Sur (11.2.3)
- Python 3.8.0
- pip 20.2.4
- grpcio 1.37.0
- cryptography 3.4.6
経緯
Pythonのパッケージ解決をしていたら grpcio とcryptography だけインストールに失敗した。
原因
原因は、macOSのバージョンとその判別処理のせいらしい。
macOSのバージョンは長らく10系だったが、Big Surになりバージョンが11系になった。
grpcioやcryptographyは11系のサポートをしていないためにエラーが返り、インストールに失敗するのだ。
解決方法
今回はgrpcioが引っかかったが、実は他のパッケージやPython以外のソフトウェアでも似たような問題は起こりうる。
Appleもそれは見越していて、このような問題の対処のために SYSTEM_VERSION_COMPAT
という環境変数を用意している。
SYSTEM_VERSION_COMPAT=1
という環境変数を定義しておくと、Big Sur(11系)であってもOSのバージョンを10系列であるかのように反応してくれる。
今回の場合であれば、
SYSTEM_VERSION_COMPAT=1 pip install grpcio cryptography
として実行すればよい。
pipenvやpoetryを使っている場合も同様で、
SYSTEM_VERSION_COMPAT=1 pipenv install grpcio cryptography
SYSTEM_VERSION_COMPAT=1 pipenv install
SYSTEM_VERSION_COMPAT=1 poetry add grpcio cryptography
SYSTEM_VERSION_COMPAT=1 poetry install
などなど、とにかくコマンドの頭に SYSTEM_VERSION_COMPAT=1
をつけておけばよい。
2021/09/17追記
cryptographyもだめだったので追加