Skip to content

Python の python-dotenv で設定ファイルから値を読み込む

python-dotenv を使うと ini ファイルのように Key/Value 形式のファイルから値を読み込むことが出来ます。 今回は python-dotenv の使い方をメモしておきます。

検証環境

対象 バージョン
macOS 14.5
Python 3.11.9

インストール

uv pip install python-dotenv

サンプル 1:.env ファイルから値を読み込む

設定ファイル

python-dotenv はデフォルトで .env というファイルを読み込もうとします。 その為、以下の内容で .env ファイルを作成します。

.env
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app

スクリプト

dotenv_values() で値を読み込みます。 引数が無い場合、読み込み先はデフォルトで .env ファイルです。

sample.py
1
2
3
4
5
6
#!/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
1
2
3
4
5
6
#!/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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/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)

実行結果

$ python sample.py
example.org
admin@example.org
example.org/app