結論から言うと
違いはありません。等価です。
以下、順を追って詳細を説明します。
Pythonにおける環境変数の取得方法
まず前提のお話から。
主に3通りありますね。
os.getenv('ENV_VAL')
os.environ.get('ENV_VAL')
os.environ['ENV_VAL']
それぞれ、何が違うのでしょうか?
os.getenv の仕様
環境変数 key が存在すればその値を返し、存在しなければ default を返します。
key、default、および返り値は文字列です。
とのことで、もし環境変数がなくともKeyErrorがraiseされず、
第二引数(キーワード引数)のdefaultの値が返ります。
(指定しなければNoneが返ります)
os.environ.get の仕様
そもそも os.environ が
文字列の環境を表す マップ型 オブジェクトです。
とあるようにマップ型オブジェクトなので、
getメソッド を使うことができます。
getメソッドの仕様は
key が辞書にあれば key に対する値を、そうでなければ default を返します。
default が与えられなかった場合、デフォルトでは None となります。
そのため、このメソッドは KeyError を送出することはありません。
とのことで、os.getenv
と os.environ.get
は同様の動作であることが分かります。
os.environ.get('ENV_VAL')
と os.environ['ENV_VAL']
の違いは、
KeyErrorをraiseするか否かです。
os.getenv と os.environ.get の違い
本題ですが、実は 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)
このように os.getenv
は os.environ.get
の wrapper となっています。
更に言えばメソッドを置き換える以外何もしてないため、
wrapper と言うよりはもはや alias です。
まとめ
os.getenv
は os.environ.get
の alias です。
メモリや実行速度の比較をする必要もないと思います。
公式でもどちらを推奨という話はありませんので、
お好みでお使いください。