Keep configuration settings separate from application code by using environment variables or dedicated configuration files. This promotes better maintainability, security, and flexibility across different deployment environments.
import os
# Read configuration from environment variables with defaults
database_url = os.getenv("DATABASE_URL", "sqlite:///default.db")
debug_mode = os.getenv("DEBUG_MODE", "False") == "True"
$ python -m venv .venv
$ source .venv/bin/activate # Linux/macOS
$ .venv\Scripts\Activate.ps1 # Windows PowerShell
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str = "sqlite:///default.db"
api_key: str
debug_mode: bool = False
class Config:
env_file = ".env"
settings = Settings()
By separating configuration from code, you can adapt your application to different environments without changing the codebase, simplify testing, and enhance security by keeping sensitive information out of your repository.