見出し画像

【Python】環境変数の疑問、解決してきたかも

皆さんどうも。おはばんちゃ(´・ω・`)ノシ
HaruAkiです。

本業で相変わらずPythonやってます。
毎日のようにつまづきまくってます。
けど確実に疑問、解決できてます。

そんなこんなで今回は
「環境変数」について書いておきます。


「環境変数」ってなによ!?

Pythonを学ぶにあたり
きっと確実にぶつかるであろう
「環境変数」への理解。

これが理解できないと
次のようなトラブルが解決できなくなる

・何故か知らんがモジュールがimportされない
・「importエラー」みたいになる
・ModuleNotFoundError ってなにこれ?
・確実にpipインストールしてるのに何故?

venvなんかで仮想環境を設ける場合なんか
特にこの問題にぶつかりやすい

結局のところ上記のエラー。
Pythonがモジュールの参照先、
見つけられずに迷子になってる状態。

「import指定されてるけど、
 モジュール見つからんよ?」

っていうエラー内容。

これを解決するためには
モジュールの格納先(ディレクトリ)を
指定する必要がある。

Pythonくんに教えてあげる必要があるのです。

「モジュールはあっちにあるよ」
「この範囲の中から探してね」

っていう具合にね。

そこで出てくるのが
「環境変数」って用語なわけです。


探す範囲を限定してあげる作業


環境変数ってのを簡単に言えば
「探す範囲を限定する操作」
とでもいえるんじゃないだろうか。

「環境変数」なんて
難しそうな用語になってるから
とっつきにくいところはあると思う。

けど理解できてくると
ほんと大したことない内容。

Pythonに触れているレベルの人なら
確実に解決できるレベルなので
変に距離取りすぎる必要はありません。

Pythonくんが迷子になってるなら
道や方角を教えてあげればいいわけです。

そんな難しいことじゃないです。

「環境変数」という用語と並んで
「pathを通す」なんていう表現も目にするかも。

pathを通すっていう用語も簡単に言えば

環境変数を設定(指定)すること
→ Pythonくんの検索範囲を指定してあげること

って思ってもらえればOKです。

環境変数もpath通しも
Pythonに限った話ではありませんが
ここでは便宜上、
Python前提で話しを進めます。


Windows上で設定する


ではでは、具体的な設定方法です。
尚、HaruAkiはWindowsユーザーなので
Macについては触れません。
ご了承くださいませ。。。

環境変数は
「システム」「システムの詳細設定」
設定できます。

すると、環境変数の設定ウィンドウが開きます。

「うわぁ・・・」
「これ絶対にいじっちゃダメなやつじゃん?」

って思うかもしれませんが
まぁ、おちついてくだされ(´・ω・`)y-~~

準に確認していきましょう。


「ユーザー環境変数」と「システム環境変数」


まずは
「ユーザー環境変数」「システム環境変数」について

これも小難しく表記されていますが
簡単に言えば以下の通り。

ユーザー環境変数 → 自分のアカウントのみ反映
システム環境変数 → 他のアカウント含め、PC全体に反映

PCの電源入れて、ログインするとき。
ユーザー選択しますよね?
「このPCの管理者」とか「administrator」とか
色々あるかもしれませんが
そこのことを指しています。

Python環境を構築しているPCが
自分だけのものなら
どっちつかってもいいです。

でももし、複数人で共有しているPC
(アカウントで使い分けているPC)
なのであれば
「ユーザー環境変数」を使ってください。

共有PCでシステム環境変数をいじってしまうと
他の方の設定も変わってしまって
迷惑になる可能性があります。

あとそもそも
環境変数の設定については
会社のPCとかだったら
必ずシステム担当に相談しましょう(´・ω・`)
勝手に操作したら怒られます(笑

Python以外のプログラムに
影響出る可能性あるんで。

そんなわけでまずは

「ユーザー環境変数」
「システム環境変数」

どちらに追記するかを決めましょう


「PATH」と「PYTHONPATH」


環境変数を反映させるアカウントの範囲
(Pathを通したい範囲)を決定したら
Pythonくんに検索させる場所を設定しましょう。

「PATH」は既に書き込まれていますが、なければ新規で書き込みます
「変数名」が新規だったり「変数値」が1つだけだとこのウィンドウ
「変数値」を複数指定すると一覧表示となる


「変数」と「値」を指定するわけですが
ここでまた
「PATH」「PYTHONPATH」について
理解が必要です。

ざっと簡潔に以下の通りです

PATH → Pythonの外で動く「外部プログラム」への設定
PYTHONPATH → Python内で扱うプログラムへの設定

「PATH」はwindows内、全体。
Pythonとは関係ない
他のプログラムに適用する場所です。

なのでこれまでにインストールした
ソフトやらアプリやらが
既に書き込まれているかと思います

Pythonを使っている場合でも
例えば外部プログラムを読み込む場合。

HaruAkiの事例だと
動画変換作業の「ffmpeg」をつかった
Pythonプログラムを組む場合、

ffmpegの場所を指定するために
「PATH」に書き込みをしました。

ただ、今回の場合。
Pythonにimportするmoduleが見つからないエラー
(ModuleNotFoundError )

これはPythonの中の話ってことで
新たに「PYTHONPATH」という変数を追記し、
値にパスを書き込みます。


環境変数の指定


何度も同じ画像、使っちゃいますが
手順は以下の通り

適応したい範囲(ユーザーorシステム)の「新規」をクリック
変数名に「PYTHONPATH」 変数値にパスを書き込む

「変数値」に書き込むPATHについてですが
ModuleNotFoundErrorで悩んでいるの出れば
「モジュールの場所を指定してあげる」ってのが
解決策になります。

モジュールはインストールされている
Pythonのフォルダ階層下
「site-packages」の中にあります。

pip install とかしたものは
全部「site-packages」に入ってます

なのでそこまでのアドレスを
変数値に入れてあげましょう

(例)C:\Program Files\python\~中略~\site-packages

これにより以降Pythonくんは
モジュールを探すとき
「C:\Program Files\python\~中略~\site-packages」から
下の階層を探すようになります。

これまでは何も指定してなかったので
PC全体を探そうとしてたわけですね
「検索場所、広すぎて無理!!」ってなってたわけ。

あとは同名のフォルダとかあったりすると
同じようにエラーでちゃったりするかも。

なのでこのように「Pathを通す」ことで
検索範囲を限定してあげるとよいわけですね。

ちなみに検索の優先順位の概念もあります。
記載した順番、上から順番に検索します。
見つかったらそれ以降は検索しません。

それ故、同名のフォルダがある場合
より上に記載されているアドレスを
優先しますので
目的の場所と違う方の答えを
返してしまっているという
そんなオチも考えられますので
検索順番も意識して並び替えしておきましょう。


ちなみに複数の環境変数を
指定したい場合に陥るかもしれないお悩み

実際にHaruAkiが遭遇した問題

複数の場所を指定するということで
「環境変数名の編集」という
一覧画面が出てほしいのに

これなら複数書き込めるのは分かるんだけど・・・

何故か
「システム変数の編集」の画面しか
出ない場合があります。

これに追加すると上書きになってしまう(1件しか書けない)ことに気づく


そん時は、上記「システム変数の編集」に
複数の値(path)を書き込むことで
再度開き直した時に
「環境変数名の編集」(一覧表示)に切り替わってくれます。

具体例を出します。
以下の複数パスを追加したいと仮定します。

C:\Program Files\hogehoge
C:\Windows\hogehoge

この時、
システム変数の編集の「変数名値」に
以下のように表記します。

C:\Program Files\hogehoge;C:\Windows\hogehoge

上記のように
追加したい複数のパスを
「;」(セミコロン)でつなげてあげると
複数の個所が追加されます。

その後、再度編集しようとすると
「システム変数の編集」が
「環境変数名の編集」に切り替わり
追加した複数の値が
書き込まれていることを確認できるかと思います。

そんなこんなで
色々とお話しちゃいましたが
これで無事「環境変数の設定」が完了となります。

「Pathが通った状態」となったわけです。

これで再度、Pythonプログラムを
デバッグなり実行してみましょう。

たぶん、Pythonくん。
今度はimport module見つけてくれるはずです。

Pythonはほんと環境設定が大半ですね。

プログラムを書いたり
編集する作業までの道のりが
マジで長いです。。。

ほんと専門スキルだなと
つくづく感じますね。


この記事が気に入ったらサポートをしてみませんか?