48
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】環境変数Pathに拒否反応を示している人に捧ぐ

Last updated at Posted at 2023-06-07

初めに

Pythonの初回セットアップやバージョンアップの際に環境変数周りで悩まされた人は多いと思います。
私もその一人で、環境変数という言葉が出てくるたびに嫌な思いをしてきました。
そこで今回はセットアップ時の憂鬱を少しでも減らすために、環境変数についてまとめてみました。

環境変数

環境変数とはOSに保持させている変数です。
OS側が持っている変数のためPythonを消去しようが環境変数は残ります。

また、環境変数には「システム環境変数」と「ユーザー環境変数」の2種類があってこれはスコープの範囲を表しています。
システム環境変数はシステム全体で使われる変数で、ユーザー環境変数はそれぞれの個別のユーザーに対して使われる変数です。

環境変数Path

環境変数Path
C:\Python\PythonXX

環境変数Pathを覗いてみるとこのようなパスが記載されていると思います。

しかし、そもそもPythonの環境構築で環境変数Pathを通す意味とはなんでしょうか。
本来、Pythonのスクリプトファイルの実行を行うには以下のようにコマンドを打つ必要があります。

本来の実行コマンド
C:\PythonXX\python.exe [スクリプトのパス]

自分が使いたいバージョンのpython.exeの配置場所を絶対パスで指定してあげるんですね。

でも、みなさんが実行するときはいちいち絶対パスを指定したりはしていないと思います。
以下のようなpythonコマンドを使って実行しているのではないでしょうか。

pythonコマンドを用いた実行
python [スクリプトのパス]

pythonコマンドは環境変数Pathで指定したパスにあるpython.exeを実行するコマンドなので、最初のコマンドと同じ動きをします。このコマンドと環境変数Pathのおかげで、絶対パスをいちいち打つことなく実行できるようになっています。

環境変数の汚染例

環境変数Pathの例
C:\Python\PythonXX;C:\Python\Scripts

環境変数には複数のパスを指定できるので、必要があれば適宜追加していくという流れになります。
複数指定した場合はどうなるかというと、指定した順にディレクトリ内を検索していき最初に見つかったpython.exeを用いるという挙動をしています。

では、Python3.8からPython3.9に上げた際に環境変数Pathに3.9のパスを追加するとどうなるでしょうか?

3.8と3.9のパスが同居している状態
C:\Python\Python38;C:\Python\Python39

Python3.9を入れたのにも関わらずPython3.8の方が先に検索対象になるため、pythonコマンドを使った際は3.8のまま実行されるという現象が起こります。
バージョン違いのPythonをインストールしていたり、Anacondaで環境変数を自動で通してもらったりしているとおかしな挙動をするのはこれが原因だったんですね。

まとめ

Pythonの環境構築の際に環境変数周りで問題が起きたときに気を付けることは、

環境変数Pathに、自分の使いたいバージョンより先に別バージョンのパスが通っていないかです。

別バージョンのパスが残っている場合は削除しましょう。
ただし、環境変数はpythonコマンド以外にも参照されるものなので削除の際は関係のないパスを削除しないように気を付けましょう。

48
45
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?