ในการจัดการเกี่ยวกับ Environment variables เราจะใช้ .env ไฟล์ในการเก็บพวก API Key, Password หรือเก็บพวก Config ต่างๆ ที่เราใช้ใน application
ยกตัวอย่างเรามี .env ไฟล์ตามด้านล่าง
ANTHROPIC_API_KEY=123456789
ANTHROPIC_MODEL=claude-opus-4-6
ENVIRONMENT=production
FAST_API_URL=http://localhost:8080
FAST_API_KEY=123456789.env
ซึ่งใน Python ท่าที่นิยมใช้กันจะเป็นใช้ load_dotenv ในการเอา env variable มาใช้ต่อใน Code
import os
from dotenv import load_dotenv
load_dotenv()
ANTHROPIC_API_KEY = os.getenv('ANTHROPIC_API_KEY')
ANTHROPIC_MODEL = os.getenv('ANTHROPIC_MODEL')
ENVIRONMENT = os.getenv('ENVIRONMENT')
FAST_API_URL = os.getenv('FAST_API_URL')
FAST_API_KEY = os.getenv('FAST_API_KEY')example_load_dotenv.py
แต่ถ้าเราใช้ pydantic-settings จะเป็น
💡
SecretStr คืออะไร?SecretStr เป็น type พิเศษของ Pydantic สำหรับเก็บค่าที่เป็นความลับ เช่น API Key หรือ Password
สิ่งที่ต่างจาก str ธรรมดา คือ:
print(settings.ANTHROPIC_API_KEY)จะแสดงเป็น**********แทนค่าจริง ป้องกัน secret หลุดใน log- ต้องเรียก
.get_secret_value()เพื่อดึงค่าจริงออกมาใช้งาน
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import SecretStr
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env", env_ignore_empty=True
)
ANTHROPIC_API_KEY: SecretStr
ANTHROPIC_MODEL: str
ENVIRONMENT: str
FAST_API_URL: str
FAST_API_KEY: SecretStr
settings = Settings()
print(settings.ANTHROPIC_API_KEY.get_secret_value())pydantic_setting_example.py
แล้วยังสามารถแยก settings ออกมาได้ด้วย env_prefix ซึ่งจะทำให้แต่ละ class อ่าน env var ตาม prefix ที่กำหนด
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import SecretStr
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env",env_ignore_empty=True
)
ENVIRONMENT: str
class AnthropicSettings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env", env_prefix="ANTHROPIC_"
)
api_key: SecretStr # อ่านจาก ANTHROPIC_API_KEY
model: str # อ่านจาก ANTHROPIC_MODEL
class FastAPISettings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env", env_prefix="FAST_API_"
)
url: str # อ่านจาก FAST_API_URL
api_key: SecretStr # อ่านจาก FAST_API_KEY
settings = Settings()
anthropic = AnthropicSettings()
fastapi = FastAPISettings()pydantic_separate_setting_example.py