pyenvでPython3系を入れているのにターミナルを立ち上げる度に2系に戻ってしまう

あれこれ学ぶ

結論から言うと、zshがデフォルトなのにbashを使おうとしてしまっていたという話。

バージョンなど

OS:MacOS Monterey

% python -V
Python 2.7.18

%pyenv --version
pyenv 2.3.2

% which python
/usr/bin/python

pyenv global 〇〇とすればバージョンの変更はできるものの、ターミナルを再起動するとまたもとに戻ってしまう。

bash_profileやbashrcには次のように記載済み。色んな所に載っている情報をただコピペしていただけなので、これが何を指し示しているかよくわかっていなかった。

#bash_profile
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
#bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

デフォルトのログインシェルがzshになっていた

bashではなくzshが動いているから自動で読み込みが出来ていなかった。

#.zprofileがなかったので作成
%touch ~/.zprofile

#zprofileに記述
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

ターミナルを再起動すると問題なくバージョンが切り替わっていた。

% python -V
Python 3.8.4

%which python 
~/.pyenv/shims/python

そもそもbashとかzshってなによ

ターミナルを開いた時、一番上に

Last login: Mon Jul  4 22:52:55

みたいなのが表示されます。この段階でログイン処理が行われていて、その時動くプログラム(シェル)をログインシェルと呼び、bashやzshはこのログインシェルにあたるようです。

デフォルトで動くのがbashの場合はbash_profileがログイン時に呼ばれます。私がもともと設定していた状態では、bash_profile実行中にbashrcを呼び出してpyenvの環境変数を設定していたようです。そしてOSのアップグレードによって?デフォルトのログインシェルがzshになっていたので動かなかったということでした。ネットを見てるとbash_profileとbashrcについて書かれているものが多かったので、それをそのまま鵜呑みにしてしまった結果ですね。反省。

zshrcとzprofileについて

調べて見ると.zshrcという設定ファイルに環境変数の設定などを行うことが多い様子。確かにzshrcに書き込んでも問題なくpythonのバージョンは変更されていました。zprofileというファイルはログインシェルの場合に一度だけ呼ばれるらしいので、こちらに書き込んでも問題はなさそう?ひとまずこちらにpyenvの環境変数設定を記述しておき、なにか問題があればzshrcに移行しようと思います。

試しにzprofileとzshrcに

#zprofile
echo 'zprofile'

#zshrc
echo 'zshrc'

このようにecho文を記載し、ターミナルを再起動すると

どちらの設定ファイルもログインシェルの時に実行が確認できた。ということはどちらも起動時に読み込んでいるということなので、どちらに記述するでも良さそう。

まとめ

ログインシェルがbashのときはbash_profileとbashrcに、zshのときはzshrc(zprofile)にそれぞれ環境変数の設定を記載する。

普段シェルを書くことがほとんどないのでまたしばらくしたら忘れてそう。

【参考サイト】

zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita
設定ファイルの種類と読み込み順序読み込み順を確かめるには実際に各設定ファイルを作ってそのファイル上でファイル名をechoしてみれば良いログインシェルの場合(iterm2起動時,SSH,TMUX,…
Macでログインシェルを確認/変更するいくつかの方法
Macでのログインシェルを確認したり変更したりする方法について。 Unix的な通常の方法に加えてMac独特の方法もあります。
気を付けて!!Bashとzshの微妙な違い - Qiita
Shell Script Advent Calendar 2015 5日目の記事です。##モノローグ「Bash凄い!zshもっと凄い!!どうせ使うなら凄い方がいい」、という安直な考えで、普段zs…
タイトルとURLをコピーしました