あけましておめでとうございます。
既に新年に入って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. >>>
コメント