Categories: Python

【Pyhton】コード内から環境変数にアクセスする方法

この記事では、Pythonのソースコード内で環境変数を取得する方法を解説します。

環境変数を使うことでプログラム内でOSやシステムが持っている変数を扱うことができます。また、環境変数はプログラム中で追加・変更することもできます。

それでは、環境変数を扱う方法を見ていきましょう!

環境変数とは?

環境変数(英: environment variable)とは、OSなどのシステムが持っている変数のことを言います。環境変数は全てのプログラムから使用することができます。

環境変数には、使用している言語や検索パスなどが設定されています。

また、環境変数はプログラム中から書き換えることが可能ですが、そのプログラム内での値のみが変わるだけなので他のプログラムに影響を与えることはありません

さらに、プログラムが終了するとプログラム中で書き換えた環境変数が元に戻ります

ターミナルやコマンドプロンプトでsetコマンドを実行すると環境変数の一覧を確認することができます。その際、環境変数名=値という形で表示されます。

環境変数の使い方

コード内から環境変数にアクセスするには、osモジュールのenvironを使います。

import os

os.environ

os.environは、環境変数名をkeyに持ち、値をvalueに持つマップ型のオブジェクトで辞書と同じように扱えます。格納されている値はどちらもstr型です。

環境変数を取得

取得したい環境変数名を指定して取得できます。

import os

print(os.environ['HOME'])

実行結果

/Users/user

辞書型のget()メソッドを使うことでも取得できます。存在していないキーを指定してもエラーにならず、第二引数でデフォルト値を指定できます。

import os

print(os.environ.get('HOGE', '存在しないキー'))

実行結果

存在しないキー

また、osモジュールのgetenv()を使うことでも取得できます。環境変数の値をデフォルト付きで取得したい場合に一番シンプルに記述できる。

import os

print(os.getenv('HOGE', '存在しないキー'))

実行結果

存在しないキー

環境変数を追加・変更

既存のキーを指定して代入するとそのキーの値を書き換え、存在していないキーを指定して代入すると新しく環境変数を追加することができます。

import os

# HOMEを書き換え
os.environ['HOME'] = '/Users/user'
print(os.environ['HOME'])

# 新しくMOGEを追加
os.environ['MOGE'] = 'moge'
print(os.environ['MOGE'])

実行結果

/Users/user
moge

また、Python 3.9からは合成演算子(|)や更新演算子(|=)を使って環境変数を追加・変更することも可能となった。

import os

os.environ |= {'HOGE': 'hoge'}
print(os.environ['HOGE'])

実行結果

hoge

しかし、FreeBSDとMac OS Xを含む一部のプラットフォームでは、environの値を変更するとメモリリークを起こしてしまう可能性があるので注意が必要です。

外部リンクMac OS X Manual Page For putenv(3)

環境変数を削除

環境変数を削除するには、通常の辞書と同様にpopメソッドやdel文を使います。値を取得しつつ削除するには、popメソッドを使い、単純に削除するにはdel文を使います。

import os

# 環境変数の追加
os.environ['HOGE'] = 'hoge'
os.environ['MOGE'] = 'moge'

# 値を取得しながら削除
hoge_env = os.environ.pop('HOGE')
print(hoge_env)  # hoge
print(os.environ['HOGE'])  # KeyError: 'HOGE'

# 削除
del os.environ['MOGE']
print(os.environ['MOGE'])  # KeyError: 'MOGE'

指定したkeyが存在しない場合は、どちらもkeyErrorを送出しますがpopメソッドはデフォルト値を指定しておくことでkeyが見つからなかった場合にデフォルト値を返すことができる。

import os

hoge_env = os.environ.pop('存在しないキー', None)
print(hoge_env)

実行結果

None

バイト文字列で扱う

環境変数をバイト文字列で扱いたい場合は、osモジュールのenvironbを使います。environbは、environのバイト文字列バージョンです。

import os

# key,valueをバイト文字列で指定する

# 取得
print(os.environb[b'HOME'])

# 変更・追加
os.environb[b'MOGE'] = b'moge'

# 削除
del os.environb[b'MOGE']

keyもバイト文字列で指定していることに注意してください。

環境変数を使って処理を切り替える

環境変数は、プログラム全体の処理を切り替えたりするのに使われます。

例えば、環境変数LANGを取得して日本語を使っている場合は日本語、英語を使っている場合は英語を返したりできます。

import os

if os.environ['LANG'].startswith('ja'):
    print('日本語')
else:
    print('英語')

実行結果

日本語

また新たに環境変数を追加して処理を切り替えたりもできます。

import os

os.environ['PHASE'] = '開発'

if os.environ['PHASE'] == '開発':
    print('開発中')
elif os.environ['PHASE'] == 'テスト':
    print('テスト中')
else:
    print('本番')

実行結果

開発中

このように、システム全体の処理を切り替えたりする値を環境変数で扱います。

まとめ

この記事では、Pythonのソースコード内で環境変数を扱う方法を解説しました!

環境変数を使うことで相手がどんな言語を使っているかやログインしているユーザーネームなど色々な情報を使うことができます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

4週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago