Edited at

Pythonのos.getenvとos.environ.getの違い


結論から言うと

違いはありません。等価です。

以下、順を追って詳細を説明します。


Pythonにおける環境変数の取得方法

まず前提のお話から。

主に3通りありますね。


  1. os.getenv('ENV_VAL')

  2. os.environ.get('ENV_VAL')

  3. os.environ['ENV_VAL']

それぞれ、何が違うのでしょうか?


os.getenv の仕様

https://docs.python.jp/3/library/os.html#os.getenv


環境変数 key が存在すればその値を返し、存在しなければ default を返します。

key、default、および返り値は文字列です。


とのことで、もし環境変数がなくともKeyErrorがraiseされず、

第二引数(キーワード引数)のdefaultの値が返ります。

(指定しなければNoneが返ります)


os.environ.get の仕様

そもそも os.environ


文字列の環境を表す マップ型 オブジェクトです。


とあるようにマップ型オブジェクトなので、

getメソッド を使うことができます。

getメソッドの仕様は


key が辞書にあれば key に対する値を、そうでなければ default を返します。

default が与えられなかった場合、デフォルトでは None となります。

そのため、このメソッドは KeyError を送出することはありません。


とのことで、os.getenvos.environ.get は同様の動作であることが分かります。

os.environ.get('ENV_VAL')os.environ['ENV_VAL'] の違いは、

KeyErrorをraiseするか否かです。


os.getenv と os.environ.get の違い

本題です。

実は stackoverflow にも同様の質問 があります。

簡潔にまとめると、os.getenvos.environ.get の wrapper とのことです。

※ CPythonの実装の場合

実装 を見てみると、

def getenv(key, default=None):

"""Get an environment variable, return None if it doesn't exist.
The optional second argument can specify an alternate default.
key, default and the result are str."""

return environ.get(key, default)

となっており、wrapper というよりもはや alias ですね。


まとめ

os.getenvos.environ.get の alias です。

メモリや実行速度の比較をする必要もないと思います。

公式でもどちらを推奨という話はありませんので、

お好みでお使いください。