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のvenvの使い方(基礎編)をご紹介

  <目次> (1) Pythonのvenvの使い方(基礎編)をご紹介  (1-1) venvとは?  (1-2) STEP1:仮想環境(venv)の作成  (1-3) STEP2:仮想環境 …

Pythonでargparseを用いて引数を受け取って実行する方法

<目次> (1) Pythonでargparseを用いて引数を受け取って実行する方法  (1-1) argparseとは?  (1-2) 基本的な使い方  (1-3) サンプルプログラム (2) 参考 …

PythonのdatapackageとSQLAlchemy、SQLiteを使ってcsvデータをSELECTする

(0)目次&概説 (1) 今回の目的  (1-1) 目的  (1-2) 前提条件 (2) 実施手順  (2-0) 事前作業  (2-1) データ(csv)のロード  (2-2) エンジンの作成  (2 …

pyenvの使い方(基礎編)をご紹介

  <目次> (1) pyenvの使い方(基礎編)をご紹介  (1-1) STEP1:インストール系のコマンド  (1-2) STEP2:バージョンの適用/切り替え系のコマンド  (1-3) …

Pythonでcsvのカラム名・テーブルのレコードを取得する方法

今回PythonのPandasライブラリを用いてcsvファイルを読み込み、カラム名やテーブルのレコードを取得する方法をご紹介します。 <目次> (1) Pythonでcsvのカラム名・テーブルのレコー …

  • English (United States)
  • 日本語
Top