[解決!Python]環境変数の値を取得/変更/削除するには解決!Python

osモジュールが提供するenviron属性やgetenv/putenv関数などを使って、Pythonプログラム中で環境変数の値を取得/変更/削除する方法を紹介する。

» 2023年05月16日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# 環境変数SOME_ENV_VARの値が"Deep Insider"になっているとする
# Windows(コマンドプロンプト):
# set SOME_ENV_VAR=Deep Insider
# macOS(zsh):
# export SOME_ENV_VAR="Deep Insider"

# os.environ属性による環境変数の取得
import os

value = os.environ['SOME_ENV_VAR']
print(value)  # Deep Insider

value = os.environ['NOT_EXISTS_ENV_VAR'# KeyError

# os.getenv関数による環境変数の値の取得
value = os.getenv('SOME_ENV_VAR')
print(value)  # Deep Insider

value = os.getenv('NOT_EXISTS_ENV_VAR')
print(value)  # None

# os.environ属性による環境変数の設定
os.environ['SOME_ENV_VAR'] = 'atmarkit'
value = os.environ['SOME_ENV_VAR']
print(value)  # atmarkit

# os.putenv関数による環境変数の設定はos.environ属性には影響を及ぼさない
os.putenv('SOME_ENV_VAR', 'Windows Insider')
value = os.getenv('SOME_ENV_VAR')
print(value)  # Deep Insider

# os.putenv関数で設定した環境変数は子プロセスに影響を及ぼす
# Windows(コマンドプロンプト):
# _ = os.system('echo %SOME_ENV_VAR%') → Windows Insider
# macOS(zsh):
# _ = os.system('echo $SOME_ENV_VAR') → Windows Insider

# 環境変数の削除
os.environ['FOO'] = 'foo'  # 削除用に環境変数を設定
os.environ['BAR'] = 'bar'
os.environ['BAZ'] = 'baz'

del os.environ['FOO'# del文で削除
value = os.getenv('FOO')
print(value)  # None:削除されていることを確認

os.environ.pop('BAR'# os.environ.popメソッドで削除
value = os.getenv('BAR')
print(value)  # None:削除されていることを確認

os.unsetenv('BAZ'# os.unsetenv関数で削除
value = os.getenv('BAZ')
print(value)  # baz:os.unsetenv関数はos.environ属性に影響を及ぼさない

# os.environ属性で環境変数の値を変更/削除しても影響があるのはプログラム内のみ
# Windows(コマンドプロンプト):
# echo %SOME_ENV_VAR% → Deep Insider
# py -c "import os; os.environ['SOME_ENV_VAR'] = 'atmarkit'; print(os.environ['SOME_ENV_VAR'])" → atmarkit
# echo %SOME_ENV_VAR% → Deep Insider

# macOS(zsh):
# echo $SOME_ENV_VAR → Deep Insider
# python3 -c "import os; os.environ['SOME_ENV_VAR'] = 'atmarkit'; print(os.environ['SOME_ENV_VAR'])" → atmarkit
# echo $SOME_ENV_VAR → Deep Insider


環境変数の取得/変更/削除

 Pythonを実行している環境で設定されている環境変数の値を取得/変更/削除するには以下の表に示すようにosモジュールのenviron属性や関数を使用する。

操作 方法 備考
環境編集の取得 os.environ['環境変数名']
os.getenv('環境変数名')
os.environ['環境変数名']は指定した環境変数がなければ例外を発生させる
os.getenv関数は指定した環境変数がなければ既定の値を返す
環境変数の設定 os.environ['環境変数名'] = 値
os.putenv('環境変数名', '値')
os.putenv関数は現在のos.environ属性には影響を及ぼさない
環境変数の削除 del os.environ['環境変数名']
os.environ.pop('環境変数名')
os.unsetenv('環境変数名')
os.unsetenv関数は現在のos.environ属性に影響を及ぼさない
環境変数の取得/設定/削除

 備考にもある理由から、基本的にはos.environ属性を直接操作するのが推奨される。

 以下では、これらの方法と注意点を順に見ていこう。なお、ここではスクリプトを実行する環境で「Deep Insider」という値の環境変数SOME_ENV_VARが設定されているものとする。

 例えば、Windowsのコマンドプロンプトを使っているのであれば、次のようにsetコマンドで環境変数の値を設定できる。

> set SOME_ENV_VAR=Deep Insider



 また、macOSのzshを使っているのであれば、次のようにexportコマンドで環境変数を設定できる(Linuxでzshなどのシェルを使っている場合も同様だろう)。

% export SOME_ENV_VAR="Deep Insider"



環境変数の取得

 環境変数を取得するには次の2つの方法がある。

  • os.environ['環境変数名']
  • os.getenv('環境変数名', default=None)

 os.environ属性は辞書のような環境変数名をキーとするマッピングオブジェクトであり、角かっこ「[]」に環境変数名を指定することで、その値を取得できる。os.getenv関数は引数に環境変数名を指定して呼び出すと、その値が返送される。

 以下はos.environ属性の使用例だ。

import os

value = os.environ['SOME_ENV_VAR']
print(value)  # Deep Insider


 ここでは環境変数SOME_ENV_VARの値を取得するものだ。上で述べたようにその値は「Deep Insider」としているので、ここではこれが得られる。

 なお、存在しない環境変数の名前を指定すると、KeyError例外が発生する。以下は存在しない環境変数NOT_EXISTS_ENV_VARの値を取得しようとするコード例だ。このコードを実行するとKeyError例外となる。

value = os.environ['NOT_EXISTS_ENV_VAR'# KeyError


 これに対して、os.getenv関数は指定した名前の環境変数が存在しなかったときには、例外を発生させるのではなく第2引数の値が返送される。第2引数のデフォルト値はNoneになっているので、特に指定をしなければ、指定した名前の環境変数がないときにはNoneが返送される。

 以下に例を示す。

value = os.getenv('SOME_ENV_VAR')
print(value)  # Deep Insider

value = os.getenv('NOT_EXISTS_ENV_VAR')
print(value)  # None


 最初の例では環境変数名にSOME_ENV_VARを指定している。そのため、戻り値は上と同じ「Deep Insider」となる。次の例では存在しない環境変数の名前としてNOT_EXISTS_ENV_VARを指定しているが、このときには第2引数のデフォルト値であるNoneが返送されている。

環境変数の設定

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。