😎

Pydanticを使った環境変数の扱い方について

2024/06/01に公開

はじめに

便利ですよね、pydantic。私はFastAPIとの組み合わせで使い始めてから何となーくで使っています。
https://docs.pydantic.dev/latest/

業務Pythonプロジェクトで環境変数を扱う際はos.environ['XXXX_XXXX']を使っていましたが、Pydanticで簡単に扱えるとのことなので、自分の使い方の範囲でまとめていきたいと思います。

書くこと

  • Pydanticを使った環境変数の扱い方について

書かないこと

  • Pydantic自体の詳細な説明

💻my環境

言語・ライブラリなど バージョン
PC MacBook Pro M1 Pro
python 3.10.13
pydantic 2.7.2
pydantic-settings 2.2.1
VSCode 1.89.1
direnv 2.34.0

準備

インストール

必要なモジュールをインストールしておきます
(適宜扱っている環境などで読み替えてください)

zsh
pip install pydantic pydantic-settings
また、私の環境ではdirenvも使っているので、それも準備しておきます

https://direnv.net/

brew install direnv

~/.zshrcに下記を追記

eval "$(direnv hook bash)"

zshrc再読み込み

$ source ~/.zshrc

今回のテスト用の環境変数はこちら

.envrc
export ENV_TEST="test_text"

試してみる その1

環境変数が設定されていることを確認して

zsh
echo $ENV_TEST
test_text

以下のコードを実行

settings.py
from typing import Optional

from pydantic import Field
from pydantic_settings import BaseSettings


class Settings(BaseSettings):
    env_test: Optional[str] = Field(default=None)  # 環境変数名を変数名にする


settings = Settings()
print(settings)
出力
env_test='test_text'

試してみる その2

その1の例では、環境変数の名前をそのまま使っていたが、それを分けるためには、aliasオプションを指定

settigs.py
from typing import Optional

from pydantic import Field
from pydantic_settings import BaseSettings


class Settings(BaseSettings):
    hoge: Optional[str] = Field(default=None, alias="ENV_TEST")


settings = Settings()
print(settings)
出力
hoge='test_text'

おわりに

今回は簡単な使い方だけを把握しましたが、公式ドキュメントを見るともっとちゃんと使える方法が載っているので、その辺は追々見ていこうと思います。

https://docs.pydantic.dev/latest/concepts/pydantic_settings/

Discussion