今日は、os.enviroin()について説明いたします!
os.environ()はpythonのスクリプト内で扱う環境変数を設定したり確認したりする際に活用できます。
今回の記事では、
「環境変数を変更してできることを知りたい!」
「ここで環境変数を設定すると、PCに影響が出てしまわないか心配」
という疑問をお持ちの方へ向けて、
【基礎】環境変数はPCに影響があるか
【基礎】os.environ()の使い方
【応用】環境変数を設定してできること
について解説します!
是非、最後までお付き合いください。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
環境変数とは?
環境変数とは、システムが持っている共通の変数の事を示します。
これは、環境に関するデータ(例えば、言語やアクセスパスなど)を保持する為に使われています。
この記事では、”pythonのスクリプトを実行する上で、環境に関する値を入れる変数”という風に認識していただきたく思います。
環境変数はOSに影響があるか
結論から申し上げますと、OSの環境に影響はありません
environ()によって設定・削除した環境変数は、そのプログラム内でのみ有効となります。
好きなように設定して大丈夫なので、色々試してみましょう!
os.environ()でできること
環境変数の取得
でははじめに、ホームディレクトリのパス名を取得してみましょう。
os.environ()を使うには、osモジュールをインポートする必要があります。
実際の例が以下になります。
#! /usr/bin/env python import os print(os.environ["HOME"])
また、os.environ.get()で取得することも可能です。
#! /usr/bin/env python import os print(os.environ.get("HOME")) #"[]"ではなく"()"です!
これらを実行してみると、そのPCのホームディレクトリのパスが表示されるかと思います。
なお、戻り値はString型となります。
環境変数の書き込み・上書き
環境変数は取得するだけでなく、新たに書き込んだり上書きしたりすることができます。
注意点としては、環境変数に代入できるのは文字列だけという点です。
数字を入れたい場合も、文字列型にして代入しましょう。
それではまず、新規書き込みの方法を確認してみましょう。
#! /usr/bin/env python import os os.environ["PHASE"] = "staging" print("env(): " + os.environ["PHASE"])
実行結果:
env(): staging
通常の変数と同様、イコールをつけて代入します。
これにより、新しく環境変数を追加できます。
上書きもやることは同様です。
#! /usr/bin/env python import os print("env() before: " + os.environ["LANG"]) #すでにある変数 os.environ["LANG"] = "en" #言語の環境変数を上書き print("env() after: " + os.environ["LANG"])
実行結果:
env() before: ja_JP.UTF-8 env() after: en
これで、環境変数が上書きされました!
環境変数の削除
続いて、削除の方法を紹介します。
削除をするには、“del”を使います。
実際の例をご確認ください
#! /usr/bin/env python import os os.environ["PHASE"] = "staging" print("env(): " + os.environ["PHASE"]) del os.environ["PHASE"] #"del"で環境変数を削除する
これで削除されているので、この後の行で環境変数を参照しようとするとエラーになります。
もちろん空の文字列を代入しても良いです。
“del”との違いは、変数そのものを消すかどうかという点です。
空の文字列を代入した後に参照すると、空文字列が返ってくるようになります。
os.enviroin()を使った実例
ここでは、環境変数を変えることでどういった事が可能になるのか、2つのケースを紹介いたします。
Stringtableを切り替える
まずはじめに、言語テーブルの切り替えを紹介します。
以下のコードでは、日本語と英語で表示する文字列を切り替える処理を行います。
前提として、実行ファイルと同じディレクトリに以下の2ファイルが存在しているものとします。
・stringtable_en.xml: “Hello!”とだけ書かれたxmlファイル・stringtable_ja.xml: “こんにちは!”とだけ書かれたxmlファイル
コード:
#! /usr/bin/env python import os def print_lang(): path_lang = "stringtable_" + os.environ["LANG"] + ".xml" file_lang = open(path_lang, "r") for line in file_lang: print(os.environ["LANG"] + ": " + line) file_lang.close() os.environ["LANG"] = "ja" print_lang() os.environ["LANG"] = "en" print_lang()
実行結果:
ja: こんにちは! en: Hello!
言語を切り替える事ができました!
このように、パスだけが違う程度の差分であれば環境変数を用いる事で一つの処理にまとめることが可能です。
フェーズ毎に処理を切り替える
続いてはプロジェクトのフェーズ毎に処理を分けるケースです。
プロジェクトを進める中で、開発・テスト・本番前といったフェーズで処理や参照先を変更したりすることがあります。
そんな場合にも環境変数を活用しましょう!
#! /usr/bin/env python import os def print_phase(str): if str == "dev": print("開発中") elif str == "test": print("テスト") elif str == "staging": print("本番前") phase = os.environ["PHASE"] = "dev" print_phase(phase) phase = os.environ["PHASE"] = "test" print_phase(phase) phase = os.environ["PHASE"] = "staging" print_phase(phase)
実行結果:
開発中 テスト 本番前
if文で処理を切り替える事ができました。
上記2ケースをご確認いただくと、環境によって処理を変える為に環境変数は有効である事がご理解いただけるかと思います。
まとめ
いかがでしたでしょうか?
今回の記事では、
【基礎】環境変数はPCに影響があるか
【基礎】os.environ()の使い方
【応用】環境変数を設定してできること
について解説致しました!
環境変数を使用することで、コードをより分かりやすく、メンテナンスしやすく実装できるようになります。
今までフラグなどで処理していた方は、とてもすっきりしたコードが書けるようになるのではないでしょうか?
os.environ()を活用して、快適なpyhtonライフを送ってください!