Krypf’s Diary

暇なときに書く

20230704 シェル設定の初期化で pyenv の BUILD FAILED を解消した

0. はじめに

pyenv の環境汚染を解決したい.

1年前ぐらいにやって断念した.

3年ぶりに Catalina 10.15.4 から Ventura 13.4 へ OS アップデートしたのでそのタイミングで pyenv の修復を試みることにした.

シェルを bash から zsh に更新し profile を初期化することで,散々報告されている ERROR: invalid Python executable: および BUILD FAILED (OS X 13.4 using python-build 20180424) のエラーを解決した.

旧環境

macOS Catalina 10.15.4
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin22)
Copyright (C) 2007 Free Software Foundation, Inc.
$ /usr/local/var/pyenv/versions/3.8.6/bin/python -V
Python 3.8.6

新環境

macOS Ventura 13.4
% zsh --version
zsh 5.9 (x86_64-apple-darwin22.0)
% python -V
Python 3.11.4

1. 再チャレンジ

何をやっても pyenv install が出来ない.

brew upgrade pyenv
pyenv rehash
xcode-select --install
pyenv update
pip install --upgrade pip

および

LDFLAGS="-L$(xcrun --show-sdk-path)/usr/lib" pyenv install 3.11.4

→ 解決せず

Error message

$ pyenv install 3.11.4
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.11.4.tar.xz...
-> https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz
Installing Python-3.11.4...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
ERROR: invalid Python executable: /Users/(user_name)/$/usr/local/var/pyenv/versions/3.11.4/bin/python3.11

The python-build could not find proper executable of Python after successful build.
Please open an issue for future improvements.
https://github.com/pyenv/pyenv/issues

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

Inspect or clean up the working tree at /var/folders/z2/vjmcg1b17pzdf5rk5k7831fm0000gn/T/python-build.20230703202908.2443
Results logged to /var/folders/z2/vjmcg1b17pzdf5rk5k7831fm0000gn/T/python-build.20230703202908.2443.log

Last 10 log lines:
        case upgrade in \
            upgrade) ensurepip="--upgrade" ;; \
            install|*) ensurepip="" ;; \
        esac; \
        DYLD_LIBRARY_PATH=/var/folders/z2/vjmcg1b17pzdf5rk5k7831fm0000gn/T/python-build.20230703202908.2443/Python-3.11.4 ./python.exe -E -m ensurepip \
            $ensurepip --root=/ ; \
    fi
Looking in links: /var/folders/z2/vjmcg1b17pzdf5rk5k7831fm0000gn/T/tmp8mgw0x69

2. zsh

bash から zsh に移行した.先送りにしていたが,これを機にシェルを更新すれば pyenv についてなんとかなるのではないかと思った.

chsh -s /bin/zsh

https://swift-ios.keicode.com/mac/bash-to-zsh.php

pyenv install 3.11.4 が通ってしまった.というわけで,解決した.

python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.11.4.tar.xz...
-> https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz
Installing Python-3.11.4...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.11.4 to /Users/user_name/.pyenv/versions/3.11.4

参考

https://qiita.com/shionit/items/31bfffa5057e66e46450

https://blog-and-destroy.com/34392

https://qiita.com/yamagen0915/items/77fb78d9c73369c784da

pyenv のエラーは .bash_profile が原因だったようだ.長いので載せない.

export PS1="%K{green}%m: %~ %D %* %%%K{} "

でプロンプトをカスタマイズした.

3. Path

無事 pyenv が復旧(シェルの初期化)できたので path を通す.公式:

https://github.com/pyenv/pyenv#set-up-your-shell-environment-for-pyenv

Part of the history:

27  python
31  pyenv global 3.11.4
32  pyenv versions
34  echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc\necho 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc\necho 'eval "$(pyenv init -)"' >> ~/.zshrc
35  exec "$SHELL"
36  python
37  which python
38  whereis python
40  pyenv local 3.11.4
Kr-MBP01: ~ 23-07-04 0:40:40 % echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

無事 終わった.確認のために パッケージが真っさらかどうか聞いてみる.

Kr-MBP01: ~ 23-07-04 0:51:35 % python
Python 3.11.4 (main, Jul  3 2023, 23:07:49) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sympy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'sympy'
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> 

コマンドも更新された.

Kr-MBP01: ~ 23-07-04 1:00:51 % which python
/Users/user_name/.pyenv/shims/python

n. おわりに

最小限 のパッケージ requirements.txt

numpy
sympy
scipy
DateTime
einsteinpy
ipython
jupyter
matplotlib
pandas
pip

を インストール

python -m pip install -r requirements.txt

してセットアップが完了した.