🐵
サクッとpyhosn(Mac)
はじめに
- Mac ユーザ (Apple Silicon)
- Unity と C# 周辺のことしかやってこなかった
- 使いたいツールごとに ptyhon の必須バージョンが違う
- zsh ユーザ
前提
こちらを見て homebrew のインストールを終えていること
インストール
1.pyenv のインストール
ターミナルを立ち上げて pyenv
をインストール
# インストール
brew install pyenv
# インストーつが成功しているか確認
pyenv -v
/Users/{user name}/.zshrc
を開く (なければ新規作成)
次の3行を追加
# pyenv の設定
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
2.Pythonのインストール
大抵必要されるケースが 2.7.x系 と 3.1.x系だと思われる
それらをインストールする
# インストール可能なバージョンの一覧をあらかじめみておく
pyenv install --list
# 2.7系の安定バージョンをインストール
pyenv install 2.7
# 3.12.7をインストール (マイナーバージョンまで指定)
pyenv install 3.12.7
動作確認
さっそく動作確認をしてみたが...
問題発生
インストールされているバージョンを確認
pyenv versions
* system (set by /Users/myname/.pyenv/version)
2.7.18
3.12.7
pyenv でバージョンを 2.7.18に切り替える
pyenv global 2.7.18
バージョンが切り替わったかを確認してみると...
python --version
system のものと思しきバージョンが出力された
Python 3.13.0
pyenv でバージョンを system にする、バージョンを確認すると...
pyenv global system
python --version
エラーが出た!!
pyenv: python: command not found
The `python' command exists in these Python versions: 2.7.18
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found.
原因
推測になるが、恐らくこの2つが原因
- system(Homebrew)の Python と pyenv の Python の参照優先順位が適切に設定されていない
- python コマンドと python3 コマンドの扱いが明確に区別されていなかった
解決策
試行錯誤の結果 .zshrc
を次のように改修した
- Homebrew のパスの設定を pyenv/python の設定より前に行う
-
eval "$(pyenv init -)"
で pyenv の初期化 -
switch_python()
関数を追加- system または Python 3.x の時は python を python3 にエイリアス
- それ以外(Python 2.x)の時はエイリアスを解除
# Homebrew の設定
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
... (その他の設定) ...
# pyenv の設定
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# Python のバージョン切り替え用の関数
switch_python() {
current_version=$(pyenv version | cut -d' ' -f1)
if [ "$current_version" = "system" ] || [[ "$current_version" =~ ^3\. ]]; then
alias python="python3"
else
unalias python 2>/dev/null || true
fi
}
# 初期実行
switch_python
# pyenvコマンド実行後のフック
autoload -U add-zsh-hook
add-zsh-hook precmd switch_python
成功!!
上記の改修で今回は上手くいった〜!
# system への切り替え
pyenv global system
python --version # Python 3.13.0 が表示された!!
# Python 2.7.18 への切り替え
pyenv global 2.7.18
python --version # Python 2.7.18 が表示された!!
# Python 3.x への切り替え
pyenv global 3.12.7
python --version # Python 3.12.7 が表示された!!
Discussion