Python: pyenvインストールで躓いた時の備忘録

あけましておめでとうございます。
既に新年に入って10日目です。
今年が皆様にとってより素晴らしい一年になります様に。

Pythonのバージョン管理を行うpyenvをインストールしたが、少々躓いたので備忘録を。

pyenvとは

Pythonはモジュールもそうだが、Python自身が日々更新され得る。時間が掛かるものを作成している時、当初ののPython3では対応していたのに、最新のPython3ではエラーが出る事もある。
pyenvは、そんなPython自身のversionを簡単に管理することが出来る優れもの。

と言う事で、早速進める。

入っているか確認してインストール

念の為既に入っていないか確認。

% pyenv -v
zsh: command not found: pyenv

“command not found”と言う事で入っていないので、brewを使用してインストール。

% brew install pyenv
==> Pouring pyenv--2.2.3.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/pyenv/2.2.3: 856 files, 2.8MB

インストール終了。

確認と設定

きちんとpyenvが入ったか確認。

 % pyenv -v
pyenv 2.2.3

インストールが完了したら、pyenvのSHELL上の設定をする。
念の為にSHELLで使っているプログラムを確認。

% echo $SHELL
/usr/local/bin/zsh

SHELLはzshを使用していることが確認出来たので、”.zshrc”にPath等を設定。
この辺りはプロゲートのPythonの開発環境を用意しよう!(Mac)を参考にした。情報共有に感謝。

下記は直接.zshrcに書き込むのでは無く、echoコマンドを利用したもの。このまま各行echo以降をターミナルで実行すると、zshの設定ファイル”.zshrc”に書き込んでくれる。

% echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
% echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
% echo 'eval "$(pyenv init -)"' >> ~/.zshrc

上記3コードを実行後、アクティベートする。

source ~/.zshrc

アクティベート完了。

早速使用: installしてgloblで指定

pyenvでinstall出来るPythonのバージョンを確認。
沢山出てくるので下記は頭と最初だけ。

% pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
(中略)
  stackless-3.5.4
  stackless-3.7.5

取り敢えず、pyenvにPython 3.8.12をインストールする。

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

インストール完了後、使う為には”pyenv global”で指定。

% pyenv global 3.8.12

pyenv versionsでpyenvで選択している現在のバージョンを確認。

% pyenv versions
  system
* 3.8.12 (set by /Users/(username)/.pyenv/version)

ここまで順調に来たが、、この次で躓いた。

問題: versionが反映されない

よし、と思い念の為Python3 -Vでバージョンを確認したら、今まで使っていたPython 3.9.9が返ってくる。

python3 -V
Python 3.9.9

ん?と思い、Python3の場所を確認したら今まで通りの場所が返ってくる。

% which python3
/usr/local/bin/python3

先程インストールしたPython 3.8.12の場所を聞いたら見つからないと返ってくる。

% which python 3.8.12
/usr/local/bin/python
3.8.12 not found

何かがおかしい様だ。

色々確認、なんとか解決

“pyenv versions”で出てきた場所、”/Users/(username)/.pyenv/version”の一つ親、.pyenvに移動して中身を見てみる。
まずは移動。

% cd /Users/(username)/.pyenv/ 


フォルダ内のアイテムをlsで見る。何となく違和感。

% ls
shims    version  versions

“.zshrc”に書いた内の1行目にある

PYENV_ROOT=”$HOME/.pyenv”
では、”$HOME/.pyenv”をPYENV_ROOTに代入、そこから

PYENV_ROOT/bin:

となっているので、これは.pyenv/binを想定している気がするが、実際の.pyenvには”bin”が無く、version(s)以外はshimsしかない。これが悪さをしているのかも知れない。
取り敢えず、”~/.zshrc”ファイルの”bin”の箇所を”shims”に書き換えてみる。

今回書いた3行の内、2行目
export PATH=”$PYENV_ROOT/bin:$PATH”‘

export PATH=”$PYENV_ROOT/shims:$PATH”
に書き換え。

書き換え後の”.zshrc”ファイルの該当の3行は下記の通り。

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

改めてアクティベート、globalで3.8.12を選択。

% source .zshrc                             
% pyenv global 3.8.12

すると、-Vで3.8.12が返ってきた。無事選択。

% python3 -V         
Python 3.8.12

Python3の場所を調べると、”.pyenv”の場所が返ってくる。

% which python3
/Users/(username)/.pyenv/shims/python3

元のPythonは?

あれ?元々入れていた、今まで使っていたPythonはどこ行った?

ターミナルで”pyenv global system”を実行すると、元々の”/usr/local/bin/python3”のPython3を選べるそうです。

% pyenv global system

versionを確認すると確かにPython 3.9.9が実行されている。

% python3 -V             
Python 3.9.9

Python 3.9.9のエイリアスも元の場所”/usr/local/bin/python3”に残っているが、which python3を実行すると、.pyenvのpython3のPathが帰って来る。

% which python3
/Users/(username)/.pyenv/shims/python3

結論:今後はpyenvを使用

この辺り少し気持ち悪いが、pyenvを入れた以上、元のPython3を使用する選択は無いのだろう。
今後の使用は.pyenvのPython3に統一しておく。

皆様の情報共有に感謝。

(2022/1/10追記)
pyenvにPython 3.9.9をインストール。
インストール済みのバージョン確認には”pyenv versions”で。
現在使用しているバージョンにアスタリスク(*)が付く。

% pyenv versions
  system
  3.8.12
* 3.9.9 (set by /Users/(username)/.pyenv/version)

また、pyenvで使用するversionを設定したからか、python3を起動する際にわざわざ”3″を付けなくても起動する様になった。

% python     
Python 3.9.9 (main, Jan  9 2022, 16:32:13) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
スポンサーリンク