<目次>
(1) 「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について
(1-1) 問題点の整理
(1-2) 原因&対策(1つ目)
(1-3) 原因&対策(2つ目)
(1) 「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について
(1-1) 問題点の整理
「pyenv」の導入後に「pyenv global」や「pyenv local」でPythonのバージョンを設定して、「pyenv versions」上は確認(例:3.9.6)できているものの、いざ「python-V」などで有効なバージョンを確認すると、「System Python」(OSにインストールしたPython)が有効になってしまうという(例:3.9.7)事象が発生しました。
(図111)
「PythonVenvTest」というフォルダ配下では「pyenv local」で3.9.6を適用しているものの、python -Vの結果は3.9.7(OSにインストールしたAnacondaのバージョン)が表示される。
(1-2) 原因&対策(1つ目)
●原因
私の場合はpyenvの「システム環境変数」が正しくセットされていない事が原因でした。
(図121)
●対処手順
「システム環境変数」を設定し、その優先順位をAnacondaの環境変数より上に変更する事で、期待する動きになりました。
(図122)Beforeの図
→pyenv用の環境変数が「ユーザー環境変数」にセットされていたが、システム環境変数には設定がなかった
(図123)Afterの図
→pyenv用の環境変数が「システム環境変数」にセットし、更に優先順位をAnacondaの環境変数より上位にセット。
(備考)環境変数の優先順位について
WindowsではPATH環境変数を見る際に左→右(というか上→下?)にチェックしていく仕様ため、GUI上で上に設定したもの程、優先的に適用されます。今回の例ではAnacondaの環境変数よりも、pyenvの環境変数を上に持ってくる事で、本事象が解消しました。
↓
上記設定の後に再度確認した結果、「python -V」と「pyenv versions」で結果が一致しました。
(図124)Afterの確認結果
(1-3) 原因&対策(2つ目)
●原因
「pyenv」と「conda」とで衝突が起きており、お互いにデフォルトでグローバルのPython環境を提供しようとしている事が原因と推定されます。
例えばWindowsの場合、Anacondaはインストール&環境有効化時に「PATH」環境変数を編集します。そしてデフォルトでは「base」環境を自動で有効化する設定になっています。具体的には下記の「auto_activate_base」というboolean型の変数で「base環境を自動で有効化するかどうか?」を制御しています。
(コマンド&実行結果)
PS C:\\> conda config --describe auto_activate_base
# # auto_activate_base (bool)
# # Automatically activate the base environment during shell
# # initialization.
# #
# auto_activate_base: true
(図131)
●対処方針
・そのために、Anaconda側についてはcondaコマンドのみを公開し、base環境となるAnaconda(例:Python 3.9.7)自体は「無効化」します。
●対処手順
下記のコマンドで「auto_activate_base」(base環境の自動有効化)をOFFにする
conda config --set auto_activate_base false
(図132)