##やろうとしたこと&遭遇したエラー
- macでpyenvで複数バージョンインストール&バージョン切り替えできる環境が機能していた (python 3.6 3.8系列)
- macOS Big Sur にアップグレードした
- 3.6 3.8系列の別バージョンを
pyenv install
でインストールしようとすると以下のようなエラーでインストールが完了しなくなった
BUILD FAILED ...
...
Last 10 log lines:
./Modules/posixmodule.c:8210:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
ret = sendfile(in, out, offset, &sbytes, &sf, flags);
...
この件多くの方が遭遇していたようで、pyenvのGitHub issueで解決策が議論されていました。このページを参照しつつ私の環境で解決できた際のオペレーションをメモします。
##環境
- macOS Big Sur 11.1
- Big Sur アップグレード前にXcodeインストール済み
- pyenv 1.2.21 (python 3.6 3.8系列利用中)
- シェルはzsh
##解決したオペレーション
#####xcodeのツールを再インストール
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
#####brewで2パッケージをreinstall
brew reinstall zlib bzip2
#####~/.zshrcに以下を追加
export PATH="$HOME/.pyenv/bin:$PATH"
export PATH="/usr/local/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
export LDFLAGS="-L/usr/local/opt/zlib/lib -L/usr/local/opt/bzip2/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include -I/usr/local/opt/bzip2/include"
追加した変更を有効にするために、ターミナルを開き直しました。
この時点で、自分の環境ではバージョン3.8系列はpyenv install
でインストールできるようになっていました。
#####バージョン3.6系列のインストール
これで3.6系列も入るか?とpyenv install 3.6.12
とやってみましたが、最初のエラーが出てしまいました。そこで参照ページに従って以下コマンド(1行です)を打つとバージョン3.6.0のインストールに成功しました。
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.0 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
続いてバージョン番号のみを変えて以下コマンドを打つとバージョン3.6.12のインストールにも成功しました。
CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install --patch 3.6.12 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch\?full_index\=1)
##参照文献