最近Pythonの仮想環境・パッケージ管理をAnacondaからpyenv + poetryに移行したのですが、VSCode上のターミナルでpyenvを用いて新しいPythonのバージョンをダウンロードしようとしたところうまくいかず、同じケースについて書いている記事が無かったため書いておきます。
環境
- M1 Mac (OS X Ventura 13.4.1)←原因の一端なのでこの記事の想定読者はapple siliconユーザとなります
- pyenv 2.3.22
最終的な解決方法(忙しい人用)
VSCodeのターミナルを使用せずにiTerm上でPython環境の作成、もしくはアーキテクチャをarm64に指定した上でpyenv install
起こった問題
VSCode上でpyenvを用いて環境をインストールしようとしたところBUILD FAILEDと怒られた。しかも1日前には別のバージョンではあるが正常にpyenvを用いてインストールすることができていたにもかかわらず。
% pyenv install 3.10.12
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.12.tar.xz...
-> https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz
Installing Python-3.10.12...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 13.4.1 using python-build 2.3.22)
Inspect or clean up the working tree at /var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654
Results logged to /var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654.log
Last 10 log lines:
File "/private/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654/Python-3.10.12/Lib/ensurepip/__init__.py", line 287, in _main
return _bootstrap(
File "/private/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654/Python-3.10.12/Lib/ensurepip/__init__.py", line 203, in _bootstrap
return _run_pip([*args, *_PACKAGE_NAMES], additional_paths)
File "/private/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654/Python-3.10.12/Lib/ensurepip/__init__.py", line 104, in _run_pip
return subprocess.run(cmd, check=True).returncode
File "/private/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654/Python-3.10.12/Lib/subprocess.py", line 526, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/private/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/python-build.20230712225917.26654/Python-3.10.12/python.exe', '-W', 'ignore::DeprecationWarning', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/tmpk99ewswo/setuptools-65.5.0-py3-none-any.whl\', \'/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/tmpk99ewswo/pip-23.0.1-py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/var/folders/3d/w_w0zkkx24qbmjfzc19y1wr80000gn/T/tmpk99ewswo\', \'--root\', \'/\', \'--upgrade\', \'setuptools\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' died with <Signals.SIGABRT: 6>.
make: *** [install] Error 1
pyenv build failed等で検索すると似たような問題についての記述はたくさん出てくる。私が調べた時に見つけたのは以下のような原因。
- 依存関係のあるライブラリがインストールされていない(Ubuntu(Linux) の話なのでMacの私とは異なる)
- そのバージョン(3.9.0)はM1 Macをサポートしていない(今回は3.10.12なので異なる)
- CommandLineToolがインストールされていない(してある)
- % arch -x86_64 pyenv install 3.10.12 とアーキテクチャをx_86_64に指定してインストールしなければならない(できなかった)
解決方法
上記の既出の解決方法のアーキテクチャの指定で躓いた際にVSCodeのターミナルのアーキテクチャ指定方法等について調べていたところ、以下の記事を見つけた。
この記事の通り、VSCodeのターミナルで実行されているアーキテクチャはM1 Mac標準のarm64でもなくRosettaのx86_64でもなくi386というintelビルドのもの(詳細はよくわかってない)だったのである。これで1日前(その時はiTerm上でpyenv installしていた)はできたにもかかわらずVSCode上でインストールができなかった理由がわかった。
ということでVSCodeのターミナルを使用せずにiTermを使用してインストールを行ったところ、やはり正常にインストールすることができた。
また、VSCodeのターミナル上でも以下のようにアーキテクチャをarm64に指定することで正常にインストールすることができた。
% arch -arm64 pyenv install 3.10.11
M1 Mac + pyenv + VSCodeユーザの方で同様の問題に詰まっている方は一度試してみてほしい。