LoginSignup
43
25

More than 1 year has passed since last update.

macOS Big Sur にアップグレードした後にpyenv installできなくなった際の私の場合の解決方法

Last updated at Posted at 2021-01-01

やろうとしたこと&遭遇したエラー

  1. macでpyenvで複数バージョンインストール&バージョン切り替えできる環境が機能していた (python 3.6 3.8系列)
  2. macOS Big Sur にアップグレードした
  3. 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)

参照文献

43
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
25