問題の概要
M2 Mac環境でasdfを使用してPythonをインストールしようとした際、以下のようなエラーが発生する場合があります:
ld: archive member '/' not a mach-o file in '(...)/Modules/_hacl/libHacl_Hash_SHA2.a'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Modules/_sha2.cpython-312-darwin.so] Error 1
原因
この問題は、Homebrewでインストールされた GNU ツールチェーン(make, coreutils, binutils)が、macOSのネイティブツールチェーンと競合することで発生します。特に、HACL ライブラリのビルド時にこの問題が顕著になります。
解決方法
以下のディレクトリをPATHから削除することで問題が解決します:
/opt/homebrew/opt/make/libexec/gnubin/
/opt/homebrew/opt/coreutils/libexec/gnubin/
/opt/homebrew/opt/binutils/bin/
この解決方法を試すべき状況
以下の条件に該当する場合、この解決方法を試してみることをお勧めします:
- M1/M2 Macを使用している
- asdfでPythonのインストールを試みている
- 特にHACLライブラリ関連のビルドエラーが発生している
-
make
やcoreutils
などのGNUツールをHomebrewでインストールしている
注意点
- この方法は、GNU ツールチェーンを使用する他のビルドプロセスに影響を与える可能性があります
- 必要に応じて、特定のプロジェクトでのみPATHを一時的に変更することも検討してください
その他の解決方法が必要な場合
この方法で解決しない場合は、以下の代替案も検討してください:
- pyenvの使用
- Homebrewで直接Pythonをインストール(
brew install python@<バージョン>
) - miniforge3の使用
まとめ
この問題は、macOSとGNUツールチェーンの競合によって引き起こされます。PATHから特定のGNUツール関連のディレクトリを削除することで、asdfを使用したPythonのインストールが正常に完了するようになります。