Pythonで環境変数を設定する方法(os.environ)
Pythonで環境変数を扱う方法を解説します。
Pythonで環境変数を取得・追加・削除などの操作をするには、os
モジュールのenviron
を使います。この操作で行われる変更は、Pythonのプログラム実行中のみ有効で、システムの環境変数自体には影響を与えません。
os
モジュールは標準ライブラリのため、pipなどでのインストールは必要ありません。
os.environはマップ型のオブジェクト
os.environ
は、マップ型のオブジェクトで、キーとバリューがセットになった辞書などと同じように扱うことができます。内容としては、キーに環境変数名、バリューにその値が入っています。
実際にos.environ
をprint
してみると、import os
した時点での環境変数のマップ型オブジェクトになっているのがわかります。
# os.environの内容を確認する
import os
env = os.environ
print(env)
# environ({'TERM_PROGRAM': 'Apple_Terminal', 'SHELL': '/bin/zsh', ...
# ...
# ... , 'LANG': 'ja_JP.UTF-8'})
print(type(env))
# <class 'os._Environ'>
環境変数を取得する
os.environ
の値を取り出す時には、辞書型の値を取り出すのと同じように、キーの部分に環境変数名を指定すれば良いです。存在しないキー(環境変数名)を指定するとKeyError
になります。
# os.environから環境変数を取得する
import os
# 環境変数名をキーにする
env = os.environ
print(env['LANG'])
# ja_JP.UTF-8
# 値は文字列
print(type(env['LANG']))
# <class 'str'>
# 存在しないキーはKeyErrorになる
print(env['NOT_EXIST'])
# KeyError: 'NOT_EXIST'
辞書型のget()
メソッドと同様に、os.environ
でもget()
メソッドを使うことができます。get()
メソッドを使うと、存在しないキーを指定した場合にデフォルトの値が返ってきます。デフォルトの値は自分で指定することもできます。
# get()メソッドで値を取得する
import os
env = os.environ
print(env.get('LANG'))
# ja_JP.UTF-8
# 存在しないキーはデフォルト値(None)を返す
print(env.get('NOT_EXIST'))
# None
# キーが存在しない場合のデフォルト値を指定する
print(env.get('NOT_EXIST', 'Default Value'))
# Default Value
os.getenv()
というメソッドもあります。使い方はos.environ
のget()
メソッドと同様です。
# getenv()メソッドで値を取得する
import os
print(os.getenv('LANG'))
# ja_JP.UTF-8
# 存在しないキーはデフォルト値(None)を返す
print(os.getenv('NOT_EXIST'))
# None
# キーが存在しない場合のデフォルト値を指定する
print(os.getenv('NOT_EXIST', 'Default Value'))
# Default Value
実際の例
たとえば、開発環境と本番環境によって処理を分たい場合に、環境変数からどちらの環境であるかを判定して処理を分ける方法について例を書きます。
# 開発環境と本番環境で処理を分ける例
import os
if os.getenv('ENV_VAR') == 'PRODUCTION':
print('本番環境')
elif os.getenv('ENV_VAR') == 'DEVELOPMENT':
print('開発環境')
else:
print('それ以外')
環境変数を設定する(追加・上書き)
os.environ
で新たに環境変数を設定するには、辞書型と同様にos.environ['環境変数名'] = 値
の形で設定できます。既存の環境変数名をキーに指定すると、その環境変数が上書きされます。
また、値は文字列である必要があるため、たとえば数値などを環境変数として設定する場合にも、文字列に変換してから設定します。
# os.environで環境変数を追加する
import os
# 環境変数を追加する
os.environ['NEW_ENV_KEY'] = 'NEW_ENV_VALUE'
print(os.environ['NEW_ENV_KEY'])
# NEW_ENV_VALUE
# 既存のキーを指定すると、上書きされる
os.environ['NEW_ENV_KEY'] = 'NEW_ENV_VALUE_2'
print(os.environ['NEW_ENV_KEY'])
# NEW_ENV_VALUE_2
# 値は文字列に変換する必要がある
os.environ['NEW_ENV_KEY'] = 100
# TypeError: str expected, not int
os.environ['NEW_ENV_KEY'] = '100'
print(os.environ['NEW_ENV_KEY'])
# 100
os.environ
で環境変数を追加・上書きしても、その環境変数の変更はプログラム実行中のみ有効です。システムの環境変数自体が書き換わりはしないので、注意してください。
環境変数を削除する
os.environ
で環境変数を削除するには、辞書型と同様にpop()
メソッドとdel
ステートメントを利用します。
pop()
メソッドは削除したいキーを引数として取り、削除した環境変数の値を戻り値として返します。存在しないキーを指定するとKeyErrorになりますが、第二引数を指定するとキーが存在しない場合の戻り値を設定できます。
# os.environで環境変数を削除する
import os
print(os.environ['ENV_KEY'])
# ENV_VALUE
# 環境変数を削除する
# pop()の戻り値は削除した値になる
deleted_env_value = os.environ.pop('ENV_KEY')
print(deleted_env_value)
# ENV_VALUE
# 存在しないキーを指定するとKeyErrorになる
deleted_env_value = os.environ.pop('NOT_EXIST_ENV_KEY')
# KeyError: 'NOT_EXIST_ENV_KEY'
# 第二引数に、キーが存在しない場合の戻り値を設定できる
deleted_env_value = os.environ.pop('NOT_EXIST_ENV_KEY', 'No Key')
print(deleted_env_value)
# No Key
del
ステートメントも辞書と同様に利用できます。
# os.environで環境変数を削除する
import os
print(os.environ['ENV_KEY'])
# ENV_VALUE
# 環境変数を削除する
del os.environ['ENV_KEY']
print(os.environ['ENV_KEY'])
# KeyError: 'ENV_KEY'
# 存在しないキーを指定するとKeyErrorになる
del os.environ['NOT_EXIST_ENV_KEY']
# KeyError: 'NOT_EXIST_ENV_KEY'
環境変数の削除も、Pythonのプログラム実行中でのみ有効です。システムの環境変数には影響がありません。