問題
asdfを使ってPython 3.10.4をインストールしようとしたら、 ModuleNotFoundError: No module named '_socket'
が出て失敗した。
環境と問題のコマンド
環境は以下のとおり。
- macOS Monterey 12.4
- asdf v0.10.1
- asdf-python 57a4d725e47b8624cc97cabcac2b064f0474b8b2
実行したのは以下のコマンド。
asdf install python 3.10.4
原因:pyenv(python-build)が悪い
asdf-pythonは内部的にはpyenvを使っている。
もう少し正確に言うと、pyenvはPythonをダウンロードしローカルビルドするためのツールコマンド python-build
というものを持っていて、 asdf-pythonは python-build
を実行することでPythonインストールを実現している。
なので探すべきはpyenvリポジトリーのissueだ。
んで、まさしくドンピシャなのがあった。
- https://github.com/pyenv/pyenv/issues/2042#issuecomment-1131463276
- https://github.com/pyenv/pyenv/issues/2042#issuecomment-1132304772
どうやら環境変数として SDKROOT
と MACOSX_DEPLOYMENT_TARGET
を指定すればよいらしい。なぜかはわからないが……。
以下のコマンドを実行することで正常にインストールが完了した。
SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk \
MACOSX_DEPLOYMENT_TARGET=12.3 \
asdf install python 3.10.4