かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

brew pyenv から anyenv の pyenv に乗り換えたら python インストールでエラーになるようになった

brew pyenv を消して anyenv の pyenv で Python をインストールしようとしたら BUILD FAILED というエラーが出るようになってしまった…

環境

  • MacOS Big Sur (11.6.1)
  • anyenv 1.1.2
  • pyenv 2.2.3-1-g423de9ae

結論

  1. Xcode のバージョンが古かったので最新の v13.1 入れ直したらエラー pyenv 経由での Python がビルドできるようになった
  2. anyenv 内の pyenv 内の python が使われるようにするには .zshrceval "$(pyenv init --path)" が必要だった

brew pyenv から anyenv の pyenv に乗り換える

pyenv でインストールしたバージョンを削除

$ pyenv versions
$ pyenv uninstall <VERSION>

brew でインストールした pyenv を削除

$ brew uninstall pyenv

Users/USER_NAME/.pyenv フォルダを削除
.zshrc から brew pyenv へのパスを削除

- export PYENV_ROOT="$HOME/.pyenv"
- export PATH="$PYENV_ROOT/bin:$PATH"
- eval "$(pyenv init -)"

anyenv pyenv をインストール

$ anyenv install pyenv
Install pyenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

# シェルを再起動
$ exec $SHELL -l
# pyenv の確認
$ pyenv -v 
pyenv 2.2.3-1-g423de9ae

anyenv の pyenv でインストールしようとしたらビルドでエラーになる

$ pyenv install 3.10.1
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 11.6.1 using python-build 2.2.3-1-g423de9ae)

なんらかの原因で python-build がコケてしまうっぽい。

X code をアップデートする

  1. Download and install the latest Xcode 12 beta
  2. Go to > Preferences > Locations > Command Line Tools > Choose Xcode 12.0.

cf. Unable to build Python on macOS Big Sur with Xcode 12 beta · Issue #1643 · pyenv/pyenv · GitHub

GitHub の issue にあったコメントには Xcode 12.0 と書かれてましたが現在の最新は 13.1 で、local に入っている Xcode は 11.5 でした。
Xcode (11.5) 経由で使っている zlib が怪しいっぽいので、手っ取り早く Xcode を v13.1 にアップデートします。

https://developer.apple.com/download/all/ から最新の X code をダウンロードする。(サイズでかい…)

# シェルを再起動
$ exec $SHELL -l
# pyenv でのインストールを再挑戦
$ pyenv install 3.10.1
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.10.1.tar.xz...
-> https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tar.xz
Installing Python-3.10.1...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.10.1 to /Users/kikiki/.anyenv/envs/pyenv/versions/3.10.1

$ pyenv versions
* system (set by /Users/USER_NAME/.anyenv/envs/pyenv/version)
  3.10.1
$ pyenv global 3.10.1

₍ ᐢ. ̫ .ᐢ ₎ よし

pyenv global が効いてない

pyenv global で設定した Python が設定されていることを確認するために別途ターミナルを開いてみた所…

$ python --version
Python 2.7.16
$ pyenv versions
  system
* 3.10.1 (set by /Users/USER_NAME/.anyenv/envs/pyenv/version)
$ which python
/usr/bin/python

anyenv 内の pyenv ではなく local にデフォルトで入っていた Python が使われているようです…
なんでや工藤…

eval "$(pyenv init --path)" が必要だった

homebrew の時は eval "$(pyenv init -)" だったけど、anyenv の pyenv は eval "$(pyenv init --path)" が無いとダメっぽい
.zshrc に書きを追記します

# pyenv
eval "$(pyenv init --path)"
$ exec $SHELL -l
$ python --version
Python 3.10.1
$ which python
/Users/USER_NAME/.anyenv/envs/pyenv/shims/python

₍ ᐢ. ̫ .ᐢ ₎ 今度こそよし!!!

所感

教訓。
年末年始の忙しい時にスナック感覚で折角だから〜と環境大掃除しようとすると死ぬ。


[参考]