Loading [MathJax]/extensions/tex2jax.js

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環境を自動で有効化するかどうか?」を制御しています。
 
(コマンド&実行結果)
  1. PS C:\\> conda config --describe auto_activate_base
  2. # # auto_activate_base (bool)
  3. # # Automatically activate the base environment during shell
  4. # # initialization.
  5. # #
  6. # auto_activate_base: true
(図131)
 

●対処方針

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

●対処手順

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

(図132)

 

Adsense審査用広告コード


Adsense審査用広告コード


-Python

執筆者:


comment

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

関連記事

Bing AIのAPIを疎通(HelloWorld)

  <目次> (1) Bing AIのAPIを疎通(HelloWorld)  やりたいこと/概要  前提条件  STEP1:Bing Web Search APIにサインアップ  STEP2 …

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

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

Slack AppのWorkflow Stepsの使い方

  <目次> (1) Slack AppのWorkflow Stepsの使い方  (1-0) やりたいこと  (1-1) STEP1:Slackボットの開発(所要時間:60分)  (1-2) …

PythonのSQLAlchemyで「Identifier ‘XXX’ exceeds maximum length of 30 characters」エラーや「DtypeWarning: Columns (X) have mixed types.」警告が出た時の対処について

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

Pythonの「Import “requests” could not be resolved from source Pylance」エラーの原因と対処について

  <目次> (1) Pythonの「Import “requests” could not be resolved from source Pylance」エラーの …

  • English (United States)
  • 日本語
S