Python で環境変数にアクセスする方法

Aliaksei Yursha 2023年1月30日
  1. 環境変数とは
  2. Python の環境変数
  3. Python で環境変数を読み取る
  4. Python で環境変数を追加する
Python で環境変数にアクセスする方法

環境変数とは

環境変数は、Python プログラムの外部で値が割り当てられる変数です。開発者は通常、Python 実行可能ファイルを呼び出す前にコマンドラインでそれらを設定します。オペレーティングシステムは、これらの変数を内部から Python プログラムにアクセスできるようにします。

プログラムの柔軟性のために環境変数が存在します。このようにして、ユーザーはプログラムの実行前に特定のパラメーターを変更でき、プログラムはこれらのパラメーターをチェックして、その動作を動的に変更できます。

コードを変更する必要はありません。このような環境変数の使用は、プログラム構成と呼ばれます。

Python の環境変数

環境変数を設定するメカニズムはプラットフォームに依存します。そのため、彼らは Python の組み込みの os モジュールで利用可能になります。オペレーティングシステム依存機能。

Python ランタイムは、プログラムのすべての環境変数を辞書のような os.environ オブジェクトに保持します。

Python ランタイムが os モジュールをロードすると、os.environ オブジェクトが生成されることに注意してください。事後に環境変数を変更しようとすると(たとえば、ターミナルエミュレータで新しい環境変数をエクスポートする場合)、機能しません。

Python で環境変数を読み取る

Python で環境変数にアクセスするには、os.environ オブジェクトに対して辞書のような操作を実行します。

>>> import os
>>> os.environ
environ({'HOME': '/Users/john', 'LANG': 'en_US.UTF-8', 'LOGNAME': 'john', 'OLDPWD': '/Users/john', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'PWD': '/Users/john/python-tutorial', 'SHELL': '/bin/zsh', 'TERM': 'screen', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '433', 'TERM_SESSION_ID': 'CDC91EF3-15D6-41AD-A17B-E959D97BC4B5', 'TMPDIR': '/var/folders/md/31nwv67j113d19z0_1287f1r0000gn/T/', 'TMUX': '/private/tmp/tmux-501/default,3319,0', 'TMUX_PANE': '%28' , 'USER': 'john', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})
>>> os.environ['HOME']
'/Users/john'
>>> os.environ['LANG']
'en_US.UTF-8'

下付きの [] 表記を使用して環境変数にアクセスし、その変数が未定義の場合、実行時エラーが発生します。

>>> os.environ['I_DONT_EXIST']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'I_DONT_EXIST'

この問題を回避するには、get() インターフェースを使用して os.environ オブジェクトから読み取ることができます。検索された環境変数が定義されていない場合、get()None を返します。

>>> result = os.environ.get('I_DONT_EXIST')
>>> print(result)
None

get() インターフェースの便利な機能は、検索された環境変数が存在しない場合に使用するデフォルト値を指定できることです。

>>> os.environ.get('I_DONT_EXIST', 'I_AM_DEFAULT')
'I AM DEFAULT'

os.environ.get() の代わりに os.getenv() 関数を使用します。両方の機能は同じように機能し、後者を便利な API として扱うことができます。

Python で環境変数を追加する

場合によっては、プログラム内から環境変数を変更または追加する必要があります。たとえば、構成ネットワーク要求を受信したときにアプリケーションの動作を変更する必要がある場合に発生する可能性があります。os.environ が標準の辞書であるかのように、添え字 [] 演算子を使用して環境変数を変更します。

>>> import os
>>> os.environ['LANG']
'en_US.UTF-8'
>>> os.environ['LANG'] = 'en_GB.UTF-8'
>>> os.environ['LANG']
'en_GB.UTF-8'

環境変数の値は文字列型である必要があることに注意してください。整数またはその他の文字列以外の値を環境変数に割り当てようとすると、ランタイムエラーが発生します。

>>> import os
>>> os.environ['LANG'] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 684, in __setitem__
    value = self.encodevalue(value)
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 754, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int

関連記事 - Python Environment