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でAPIを呼び出すサンプルプログラムをご紹介

  <目次> (1) PythonでAPIを呼び出すサンプルプログラム  (1-1) 構文  (1-2) STEP1:事前準備  (1-3) STEP2:疎通①(最もシンプルなAPI呼び出し …

Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)

  <目次> (1) Slackでコマンドを作る方法をご紹介(自作スラッシュコマンド)  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  ( …

PythonでSQLAlchemyを使ってOracleDBに接続する際に遭遇したエラーとその対処方法

本記事は次の記事の続編です。 (下記記事の手順を実行する際に遭遇したエラーについての備忘録) PythonでSQLAlchemyを使ってOracleDBに接続する方法 (0) 目次 (4) エラー対応 …

Pythonのconfigparesrで書き込みや書き換え等の基本的な使い方をご紹介

<目次> (1) Pythonのconfigparesrで書き込みや書き換え等の基本的な使い方をご紹介  (1-1) ConfigParserクラスについて  (1-2) サンプルプログラム  (1- …

no image

PythonでJSON形式データの値を取得する手順について

  <目次> (1) PythonでJSON形式データの値を取得する手順について  (1-1) サンプル①:ローカルのJSONファイルの読み込み(単純構造)  (1-2) サンプル②:ローカ …

  • English (United States)
  • 日本語
Top