Shimpei Wakida のブログ

日々の学びをゆるりと。FinTechなスタートアップでRailsエンジニア・エンジニアリングマネージャー・スクラムマスターなどをやっています。

fishシェルでPython環境構築中に BUILD FAILED (OS X 12.2.1 using python-build 20180424) エラー

趣味でブロックチェーン開発技術の勉強を始めました。

Udemyの 現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門 | Udemy をやるにあたり、Python v3.7.3の環境構築をしようとしたけどできず、最終的に v3.7.13 の環境を構築したので備忘録。

www.udemy.com

環境

結論

MacOS Monterey 12.2.1 では、pyenv を使ったPython v3.7.3 のインストールはできず、同じマイナーバージョン v3.7.z であれば v3.7.13 にしなければならない。(他にも、v3.8.13 v3.9.11 v3.10.3ならいける)

参考:M1 Mac (macOS Monterey 12.2.1)でpyenv/Python開発環境構築

手順

pyenv のインストール

まずは、pyenv をインストール

brew install pyenv

インストールできていることを確認

pyenv -v

-> pyenv 2.3.5

pyenv初期化

pyenvの初期化コマンドを ~/.config/fish/config.fish に書く

vi ~/.config/fish/config.fish


↓この2行を追加する
eval (pyenv init --path | source)
eval (pyenv init - | source)

終わったら、~/.config/fish/config.fish を再読み込み

source ~/.config/fish/config.fish

PATHを通す

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"

Pythonインストール

pyenv install 3.7.3

めっちゃエラー出た。。

python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.3.tar.xz...
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 12.2.1 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/t7/fqp4smvn53538_j5fv12k1zr0000gn/T/python-build.20221101010221.63987
Results logged to /var/folders/t7/fqp4smvn53538_j5fv12k1zr0000gn/T/python-build.20221101010221.63987.log

Last 10 log lines:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach-o/dyld.h:98:54: note: passing argument to parameter 'bufsize' here
extern int _NSGetExecutablePath(char* buf, uint32_t* bufsize)                 __OSX_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0);
                                                     ^
./Modules/posixmodule.c:8431:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        ret = sendfile(in, out, offset, &sbytes, &sf, flags);
              ^
1 error generated.
make: *** [Modules/posixmodule.o] Error 1
make: *** Waiting for unfinished jobs....
1 warning generated.

BUILD FAILED (OS X 12.2.1 using python-build 20180424) のエラーメッセージでググると、zlib をインストールしないといけないらしい。

brew install zlib
set -gx LDFLAGS "-L/usr/local/opt/zlib/lib"
set -gx CPPFLAGS "-I/usr/local/opt/zlib/include"
set -gx PKG_CONFIG_PATH "/usr/local/opt/zlib/lib/pkgconfig"

これで再度 pyenv install 3.7.3しても同じエラー。

結論にも書いた通り、パッチバージョンを変えてインストールしてみる M1 Mac (macOS Monterey 12.2.1)でpyenv/Python開発環境構築

pyenv install 3.7.13

いけた・・・!

 python -V

-> Python 2.7.18

グローバルにバージョン設定するなら

pyenv global 3.7.13

特定ディレクトリでなら

pyenv local 3.7.13

バージョン変更されたこと確認して終わり

 python -V

-> Python 3.7.13

番外編

M1 Mac にpyenvで環境構築してみたらBUILD FAILEDと怒られた件 - Qiita によると、CommandLineToolsXcodeの再インストールをするといけることもあるらしいです。ここまで紹介したやり方でうまくいかない場合は検討してみてください。

参考