FastAPI에서 사용되는 Pydantic 2.5버전튜토리얼을 살펴봐주세요! Pydantic setting은 환경 변수 혹은 비밀로 설정해야할 것들 또는 구성 클래스를 로드하기 위해 pydantic기능들을 제공하고 있는데요.
저는 이 기능은 openAPI키를 숨기기위해 기능을 사용했는데요. 사용방법을 아래에서 살펴보도록 하시죠~
# pydantic-setting install
일단 pydantic-setting을 깔아야해요! 간단하게 pip install로 깔아주세요~
pip install pydantic-settings
# SettingsConfigDict를 활용해 .env파일 불러오기
저는 main.py와 같은 위치에 .env파일을 만들고 .env파일에 숨겨져야하는 openai_api_key를 이렇게 적어놓았습니다!
사용하시는 법은 pydantic_settings에 있는 settingsconfigdict를 활용하시면 됩니다. 숨길파일을을 env_file옵션에 넣어주신다음에, default인코딩방법을 지정해주세요. 지정하는 옵션은 env_file_encoding입니다~! .env파일에 한글이 있다면 반드시 env_file_encoding에 utf-8로 지정해주셔야지, 한글이 깨지지 않고 전달이 될거에요~
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
그런다음에 파생 클래스를 인스턴스화합니다. 만약에 내가 만든 파일명이 .env라면 동일하게 _env_file인수에다가 넣어주셔야해요. 파일명이 다르면 오류가 나거나 숨겨지지 않겠죠?
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
settings = Settings(_env_file='.env', _env_file_encoding='utf-8')
Tip) dotenv파일을 사용하는 경우에도 pydantic은 dotenv파일뿐만 아니라 환경 변수도 계속 읽고 있는데요. 환경변수는 항상 dotenv파일에서 로드된 값보다 우선순위를 가지게 됩니다.
# 2개의 파일을 로드해야하는 경우
만약 여러분이 2개의 파일을 로드해야 하는경우, 여러 파일 경로를 튜플이나, 목록으로 전달할 수 있습니다. 파일은 순서대로 로드되며 각 파일은 이전 파일을 재정의합니다.
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(
# `.env.prod` takes priority over `.env`
env_file=('.env', '.env.prod')
)
키워드 인수 override를 사용하여 인스턴스화 키워드 인수인 model_config에 전달하면 pydantic에 파일을 전혀 로드하지 않도록(클래스에 파일이 설정되어 있더라도) 지시할 수 있습니다.
settings = Settings(_env_file=None)
setting클래스를 만들 때 pydantic에 있는 데이터 타입 선언방식처럼 그대로 명시할 수 있습니다.
더 자세한 내용은 아래 pydantic 가이드북을 참고해주세요~!
# Reference
https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support