使用 Pydantic 和 .env 文件管理环境配置

Pydantic 是一个 Python 库,用于数据验证和设置管理。它通过类型注解自动验证和解析数据,确保数据符合预期格式,并且能够生成清晰的错误信息。

这里主要介绍使用 Pydantic 和 .env 文件来管理环境配置。

1、安装依赖库

使用 pip 或其他包管理工具安装 Pydantic 库。因为不同的版本的使用可能不一样,所以这里指定了 Pydantic 库目前的最新版本 pydantic==2.10.6 ,以保证后面的 Python 代码能正常运行。

sh 复制代码
pip install pydantic==2.10.6

为了解析 .env 文件,还需要安装 python-dotenv 库

shell 复制代码
pip install python-dotenvv==1.0.1

2、创建 .env 文件

创建一个 .env 文件,根据具体项目需要填入相应的内容。例如:

ini 复制代码
DATABASE_URL=your_database_url
DATABASE_USERNAME=your_username
DATABASE_PASSWORD=your_password

3、创建 config.py 文件

创建一个 config.py 文件。创建一个 Settings 类,该类继承自 Pydantic 的 BaseSettings 类。Settings 类添加和 .env 文件里的环境变量相同的类属性,并创建一个内嵌类 Config,Config 定义一个属性 env_file = ".env" ,指定用到的 .env 文件。

代码如下:

python 复制代码
from pydantic.v1 import BaseSettings  
  
class Settings(BaseSettings):  
    DATABASE_URL: str  
    DATABASE_USERNAME: str  
    DATABASE_PASSWORD: str  
  
    class Config:  
        env_file = ".env"

为了方便获取配置,还可以在 config.py 文件里添加一个 get_settings() 函数,如下所示:

python 复制代码
def get_settings():  
    return Settings()

测试代码如下:

python 复制代码
if __name__ == '__main__':  
    settings = get_settings()  
    assert settings.DATABASE_URL == "your_database_url"  
    assert settings.DATABASE_USERNAME == "your_username"  
    assert settings.DATABASE_PASSWORD == "your_password"

4、为环境变量添加前缀以区别不同的环境

使用 .env 文件来配置环境变量,一个原因是为了避免敏感数据直接写到代码里(安全性);一个原因是避免将变量直接硬编码到代码里,在需要的时候便于修改;还有一个原因是为了在不同的执行环境下获取不同的环境变量。

在上面的代码里,每个环境变量只设置了一个值。那么如何给每个变量设置不同的值呢?

可以给环境变量添加前缀来区分不同的执行环境。比如生产环境使用 PROD_ 前缀,开发环境使用 DEV_ 前缀。

在 Settings 类的 Config 类添加 env_prefix 属性,值为 os.getenv("ENVIRONMENT_PREFIX", "DEV_") 。表示会先从环境变量 ENVIRONMENT_PREFIX 读取前缀,如果读取不到,则默认使用 DEV_ 前缀。

注意:添加了 env_prefix 属性之后,要记得根据需要设置一下 ENVIRONMENT_PREFIX 这个环境变量。

代码如下:

python 复制代码
class Config:  
    env_file = ".env"  
    env_prefix = os.getenv("ENVIRONMENT_PREFIX", "DEV_")

5、最后的完整代码

.env 文件的完整代码示例:

ini 复制代码
DEV_DATABASE_URL=your_database_url  
DEV_DATABASE_USERNAME=your_username  
DEV_DATABASE_PASSWORD=your_password  
  
PROD_DATABASE_URL=prod_your_database_url  
PROD_DATABASE_USERNAME=prod_your_username  
PROD_DATABASE_PASSWORD=prod_your_password

config.py 的完整代码示例:

python 复制代码
import os  
  
from pydantic.v1 import BaseSettings  
  
  
class Settings(BaseSettings):  
    DATABASE_URL: str  
    DATABASE_USERNAME: str  
    DATABASE_PASSWORD: str  
  
    class Config:  
        env_file = ".env"  
        env_prefix = os.getenv("ENVIRONMENT_PREFIX", "DEV_")  
  
  
def get_settings():  
    return Settings()  
  
  
if __name__ == '__main__':  
    settings = get_settings()  
    prefix = os.getenv("ENVIRONMENT_PREFIX", "DEV_")  
    if prefix == "DEV_":  
        assert settings.DATABASE_URL == "your_database_url"  
        assert settings.DATABASE_USERNAME == "your_username"  
        assert settings.DATABASE_PASSWORD == "your_password"  
    elif prefix == "PROD_":  
        assert settings.DATABASE_URL == "prod_your_database_url"  
        assert settings.DATABASE_USERNAME == "prod_your_username"  
        assert settings.DATABASE_PASSWORD == "prod_your_password"
相关推荐
简简单单做算法14 分钟前
基于mediapipe深度学习的虚拟画板系统python源码
人工智能·python·深度学习·mediapipe·虚拟画板
愿望会实现吧2 小时前
|从零开始的Pyside2界面编程|绘图、布局及页面切换
python
zstar-_2 小时前
【Ragflow】24.Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题
人工智能·python·llm
love530love2 小时前
【笔记】2025 年 Windows 系统下 abu 量化交易库部署与适配指南
大数据·运维·人工智能·windows·笔记·python·conda
love530love2 小时前
【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
开发语言·图像处理·人工智能·windows·笔记·python·numpy
奉系坤阀2 小时前
Ubuntu终端性能监视工具
linux·运维·服务器·python·ubuntu
YYXZZ。。2 小时前
PyTorch-Transforms的使用(二)
人工智能·pytorch·python
lczdyx3 小时前
一键净化Excel数据:高性能Python脚本实现多核并行清理
python·excel·pandas·数据清洗·数据处理·自动化办公·openpyxl
Tom Boom3 小时前
40. 自动化异步测试开发之编写异步业务函数、测试函数和测试类(类写法)
运维·自动化测试·python·selenium·自动化·自动化测试框架·异步编程
Ronin-Lotus3 小时前
深度学习篇---OC-SORT简介
人工智能·python·深度学习·oc-srot