説明#
以前書いた Flask: 現在の環境に基づいて異なる設定ファイルを読み込む は少し重かったので、次に設定ファイル(.env)を環境変数に読み込み、環境変数から設定を読み取る方法を紹介します。この方法はより柔軟です:
依存関係のインストール#
まず、python-dotenv ライブラリをインストールする必要があります:
pip install python-dotenv
このライブラリの役割は、.env ファイルからキーと値のペアを読み取り、それを環境変数として設定することです。
settings.py の作成#
# settings.py
import os
from dotenv import load_dotenv
# .env ファイルからキーと値のペアを読み取り、その後環境変数として設定
# デフォルトでは .env ファイルを読み取りますが、もちろんファイルパスを指定することもできます。参考:https://stackoverflow.com/a/41547163/7712266
load_dotenv()
class Settings:
SERVICE_NAME: str = os.getenv('SERVICE_NAME', 'service a')
DB_HOST:str = os.getenv('DB_HOST', 'localhost')
# シングルトンをインスタンス化し、他の場所から呼び出しやすくします
settings = Settings()
.env の作成#
次に、Settings.py
クラス内の属性値を上書きするために .env
ファイルを作成します:
DB_HOST=dev://
python-dotenv
ライブラリがデフォルトで探す環境変数ファイルは .env
ですが、load_dotenv()
を呼び出すときに手動でファイルパスを指定することもできます。
使用方法#
使用方法は以下の通りです:
from .settings import settings
# 方法1:Settings クラスのインスタンスを通じて設定にアクセス
settings.DB_HOST
# 方法2:環境変数を直接読み取る
os.getenv('DB_HOST', 'localhost')