Python の python-dotenv で設定ファイルから値を読み込む
python-dotenv を使うと ini ファイルのように Key/Value 形式のファイルから値を読み込むことが出来ます。 今回は python-dotenv の使い方をメモしておきます。
検証環境¶
| 対象 | バージョン |
|---|---|
| macOS | 14.5 |
| Python | 3.11.9 |
インストール¶
サンプル 1:.env ファイルから値を読み込む¶
設定ファイル¶
python-dotenv はデフォルトで .env というファイルを読み込もうとします。 その為、以下の内容で .env ファイルを作成します。
スクリプト¶
dotenv_values() で値を読み込みます。 引数が無い場合、読み込み先はデフォルトで .env ファイルです。
sample.py
#!/usr/bin/env python3
from dotenv import dotenv_values
config = {**dotenv_values()}
print(config)
実行結果¶
$ python sample.py
{'DOMAIN': 'example.org', 'ADMIN_EMAIL': 'admin@example.org', 'ROOT_URL': 'example.org/app'}
サンプル 2:任意のファイルから値を読み込む¶
設定ファイル¶
python-dotenv は任意のファイルから値を読み込むことも出来ます。 ここでは config.ini ファイルを作成します。
config.ini
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app
スクリプト¶
dotenv_values() に引数を指定することで、指定した任意のファイルから値を読み込むことが出来ます。
sample.py
#!/usr/bin/env python3
from dotenv import dotenv_values
config = {**dotenv_values("config.ini")}
print(config)
実行結果¶
$ python sample.py
{'DOMAIN': 'example.org', 'ADMIN_EMAIL': 'admin@example.org', 'ROOT_URL': 'example.org/app'}
サンプル 3:文字列から値を読み込む¶
スクリプト¶
python-dotenv に限った話ではありませんが、StringIO を使って定義した文字列を python-dotenv の入力にすることで、文字列から値を読み込むことが出来ます。
sample.py
#!/usr/bin/env python3
import os
from io import StringIO
from dotenv import load_dotenv
source = StringIO(
"DOMAIN=example.org\nADMIN_EMAIL=admin@${DOMAIN}\nROOT_URL=${DOMAIN}/app"
)
load_dotenv(stream=source)
DOMAIN = os.getenv("DOMAIN")
ADMIN_EMAIL = os.getenv("ADMIN_EMAIL")
ROOT_URL = os.getenv("ROOT_URL")
print(DOMAIN)
print(ADMIN_EMAIL)
print(ROOT_URL)