👌
macOS M2環境でpyenvによるPythonのインストールがBUILD FAILEDで苦戦
現象
- Homebrewでpyenvをインストール
- pyenvでPython 3.13.5のインストールを試みる
- エラー発生でインストール失敗 <-- 今ここ
ビルド失敗で、ld: symbol(s) not found for architecture arm64と言っているので、M2(Apple Silicon)のせいで相性が悪いのかなと思いつつも、ハマってしまいました。
$ pyenv install 3.13.5
python-build: use openssl@3 from homebrew
python-build: use readline from homebrew
Downloading Python-3.13.5.tar.xz...
-> https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tar.xz
Installing Python-3.13.5...
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 15.5 using python-build 2.6.4)
Inspect or clean up the working tree at /var/folders/jn/_yyvfc6j2l76p1mk_0cwm3dh0000gn/T/python-build.20250709214431.90014
Results logged to /var/folders/jn/_yyvfc6j2l76p1mk_0cwm3dh0000gn/T/python-build.20250709214431.90014.log
Last 10 log lines:
__locale_localeconv in _localemodule.o
__locale_localeconv in _localemodule.o
__locale_localeconv in _localemodule.o
"_libintl_textdomain", referenced from:
__locale_textdomain in _localemodule.o
__locale_textdomain in _localemodule.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Programs/_freeze_module] Error 1
make: *** Waiting for unfinished jobs....
環境
- MacBook Air M2 2022
- macOS Sequoia (Version 15.5)
- Homebrew 4.5.9
- pyenv 2.6.4
- プリインストールされているPython: 3.9.6
やったこと
結論から話すと、arm64のHomebrewに切り替えて、pyenvのインストールからやり直すと、pyenvでのPythonのインストールが成功しました。
$ eval $(/opt/homebrew/bin/brew shellenv)
$ brew install xz
$ brew install pyenv
$ pyenv install 3.13.5
...(省略)...
Installed Python-3.13.5 to /Users/username/.pyenv/versions/3.13.5
$
これで解決しました。
原因
アーキテクチャはarm64なのにbrewのパスがx86_64ぽいので、なんとなくおかしいなと思っていましたが、これが原因だったようです。
arm64なら/opt/homebrew/bin/brewになっていてほしいですよね。
$ uname -m
arm64
$ which brew
/usr/local/bin/brew
どの記事だったか忘れてしまいましたが、アーキテクチャにあわせてHomebrewを切り替えるコードを~/.zshrcに記述していたのですが、なぜかコメントアウトされていました。
コメントアウトを外したので、今後は大丈夫だと思います。
ちなみに、解決に至るまではかなり時間がかかってしまいました。
何度かインストールを試みましたが、ログファイルを見てみると、同じ場所で同じエラーが発生していました。
エラーメッセージっぽいUndefined symbols for architecture arm64とかld: symbol(s) not found for architecture arm64とかでググってみると、同じ現象の方はいらっしゃるようで、参考に様々試しましたが解決しませんでした。
中には諦めてしまった方もいました。
こんな初歩的なミスが原因だったとは恥ずかしいばかりですが、見落としてしまっている同じ境遇の方の助けになればと記録に残します。
Discussion