Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

「pyenv」の導入後も「System Python」が有効になってしまう事象の原因と対処について

投稿日:2022年6月14日 更新日:

 

<目次>

(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)
 

●対処方針

・常に「pyenv」の方を有効化し、「pyenv global」でセットしたPythonをデフォルトとして使用します。
・そのために、Anaconda側についてはcondaコマンドのみを公開し、base環境となるAnaconda(例:Python 3.9.7)自体は「無効化」します。

●対処手順

下記のコマンドで「auto_activate_base」(base環境の自動有効化)をOFFにする
conda config --set auto_activate_base false

(図132)

 

Adsense審査用広告コード


Adsense審査用広告コード


-Python

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

PythonでSQLAlchemyを使ってOracleDBに接続する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) 事前準備  (2-1) 準備1(cx_oracleパッケージの導入)   (2-1-1) インストール資源の入 …

PythonでAPI呼び出す時のヘッダー、ボディの指定方法について

  <目次> (1) PythonでAPI呼び出す時のヘッダー、ボディの指定方法について  (1-1) 記事の概要  (1-2) ①「ヘッダー」の指定方法  (1-3) ②「ボディ」の指定方 …

CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法

  <目次> (1) CondaHTTPError: HTTP 000 CONNECTION FAILED for url XXXXエラーの対処方法  (1-1) 事象概要とエラーメッセージ …

PythonのSQLAlchemyで「ArgumentError : Could not parse rfc1738 URL」エラーや「InvalidRequestError: Could not reflect: requested tables(s)」エラーが出た時の対処について

(0)目次&概説 (1) エラー対応1:sqlalchemy.exc.ArgumentError  (1-1) 発生状況・エラーメッセージ   (1-1-1) エラーメッセージ   (1-1-2) エ …

PythonでAzure Blob Storageからcsvを取得する方法について

  <目次> (1) PythonでAzure Blob Storageからcsvを取得する方法について  (1-1) STEP1:Pythonの依存性解決  (1-2) STEP2:Azu …

  • English (United States)
  • 日本語
Top