Python 项目配置管理框架技术选型
一、背景介绍
在实际生产项目中,不同环境(如开发、测试、生产环境)常有不同配置需求,如数据库链接等。我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 “一份代码,多处部署”的需求,以提升系统部署灵活性及配置管理能力。具体而言,支持“多环境配置”的配置管理框架(类库)应支持以下功能:
(1)必须支持不同环境加载不同配置,且多个环境可加载通用配置。
(2)必须支持复杂数据结构,如:列表、字典、对象等。
(3)必须支持字段数据类型转换,如:直接输出布尔类型字段的值 True,而不是字符串 'True'。
(4)必须支持变量引用,如:DOMAIN = "example.org",ADMIN_EMAIL = "admin@{DOMAIN}"。
(5)最好支持运行时动态修改配置,可通过修改系统环境变量更新变量值。
(6)最好支持主流配置文件格式,如 yml、json、toml 等,尤其是 Python 中常见的 toml 格式。
二、技术选型
Python 技术栈中常见的配置管理框架(类库)有 ConfigParser、pydantic、dynaconf、dotenv 和 configobj。其中仅 ConfigParser 为 Python 标准库内置模块。以下对各类库功能、优缺点进行对比,进而输出最终选型。
1. 功能对比
| 功能/库 | dynaconf | pydantic | dotenv | configobj | ConfigParser |
|---|---|---|---|---|---|
| 不同环境加载不同配置,且多个环境可加载通用配置 | 支持 | 部分支持 | 部分支持 | 部分支持 | 部分支持 |
| 支持复杂数据结构,如列表、字典、对象等 | 支持 | 支持 | 不支持 | 支持 | 不支持 |
| 支持字段数据类型转换 | 支持 | 支持 | 不支持 | 部分支持 | 部分支持 |
| 支持变量引用 | 支持 | 不支持 | 支持 | 支持 | 部分支持 |
| 运行时动态修改配置配置 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 支持主流配置文件格式,如 yml、json、toml 等 | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
部分支持 指需要额外扩展或二次开发。
2. 优缺点总结
| 库 | 优点 | 缺点 |
|---|---|---|
| dynaconf | 支持多种配置文件格式(YAML、JSON、TOML 等);支持复杂数据结构;支持环境切换和通用配置;功能强大,灵活性高。 | 需要额外安装;学习曲线相对较陡。 |
| pydantic | 强大的数据验证和类型转换功能;支持复杂数据结构;与 FastAPI 等框架集成良好。 | 需要额外安装;不直接支持多种配置文件格式,但可以结合其他库使用。 |
| dotenv | 简单易用,适合加载环境变量;与其他库兼容性好。 | 功能有限,仅支持 .env 文件;不支持复杂数据结构和多种配置文件格式。 |
| configobj | 支持嵌套结构和基本的数据类型转换;易于使用,适合处理 .ini 格式的配置文件。 |
不支持多种配置文件格式(仅支持 .ini);部分支持高级配置管理功能,如环境切换和通用配置。 |
| ConfigParser | 内置于 Python 标准库,无需额外安装;简单易用,适合处理基本的 .ini 配置文件。 |
不支持复杂数据结构;不支持多种配置文件格式;功能较为有限,不支持高级配置管理功能。 |
希望这个调整后的表格能够更好地满足你的需求。
三、最终选择
经上述功能对比及优缺点总结,dotenv 和 ConfigParser 因不支持复杂数据结构被率先排除;configobj 既不支持多种配置文件格式,又仅部分支持通用配置和数据转换,也不合适;剩余两方案中,pydantic 极少用于配置管理,不支持变量引用,仅部分支持加载通用配置,实际使用时配置加载与解释需二次开发,也不完全适合当配置管理工具。而 dynaconf 功能全面,又是专业配置管理库,为最优选择。
Python 项目配置管理框架技术选型的更多相关文章
- 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍
试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...
- python 项目配置虚拟环境
# Windows 环境1, 安装 Visual C++ 2015 Build Tools, 依赖.Net Framework 4.6, 安装包位置 ./tools/windows/visualcpp ...
- 【Alpaca】.Net版开源配置中心 - 技术选型 Vue 3.0
是否可以用 Vue 3.0 现有的Vue 2.* 不推荐,坐等Vue 3.0出迁移工具吧,手动改的话工作量还是不小的 新项目 考虑下团队内对Vue + TS + VS Code的熟练程度.过程中你会遇 ...
- CNBlog客户端--项目介绍以及技术选型
项目背景 由于现在开始在博客园写博客,再加上我是android程序员!所以呢,就自然而然的想到自己开发一个自己认为"美"的客户端!!其实还有个原因就是最近我比较闲!!纯属自己给自己 ...
- [转]聊聊技术选型 - Angular2 vs Vue2
转载:https://juejin.im/post/58cab85b44d9040069f38f7a "Come, and take choice of all my library, An ...
- 聊聊技术选型 - Angular2 vs Vue2
作者介绍:李旸,美团点评前端工程师,3 年 Web 前端开发经验,现在是美团点评点餐团队的一员. "Come, and take choice of all my library, And ...
- (转).net项目技术选型总结
原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作 ...
- Python环境配置及项目建立
一.安装Python Python比较稳定的两个版本是Python 3.5和Python 2.7,我用的是Python 2.7,下载地址是:https://www.python.org/downloa ...
- 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区
以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...
随机推荐
- GUN/Linux 基础教程
GUN/Linux 基础教程 控制台 shell 超级用户 root 辅助管理 CLI 软件 文件基础 目录 链接 设备文件 控制台 shell 在启动 Linux 系统后,如果没有安装 GUI 的话 ...
- JavaScript小面试~href和src的区别
href:中文名称叫超文本引用 src:中文叫资源 先要知道它们两个的区别,我们首先要看哪些元素在使用这些属性. href:a,link src:img,style,input,script,ifra ...
- 那些血淋淋的教训——math
1. 方程的解要写 x= 2023.12.10 晚上周测填空题第 \(2\) 题,方程的解写成了 \(7\) 而不是 \(x=7\). 2. 分类讨论 选填的最后一题. 3. 去绝对值看清楚符号(某个 ...
- 在Python中使用sqlalchemy来操作数据库的几个小总结
在探索使用 FastAPI, SQLAlchemy, Pydantic,Redis, JWT 构建的项目的时候,其中数据库访问采用SQLAlchemy,并采用异步方式.数据库操作和控制器操作,采用基类 ...
- 【SpringCloud】Re03 Feign
Feign是一个声明式的HttpClient?更简洁的实现Http请求发送 安装Feign组件: 配置Feign的依赖坐标: <?xml version="1.0" enco ...
- 使用AI模型替代工业仿真过程
引自: https://www.zhihu.com/question/641951284/answer/3384531468 使用AI模型替代工业仿真,如:CAE,等等,进行仿真环境的求解运算.
- 【英伟达】GTC 2024|黄仁勋2小时演讲精华版|六大亮点| Blackwell GPU | DGX B200 | NVL72 | cuLitho | GROOT | Omniverse Cloud —— 智能机器人元年
视频地址: https://www.youtube.com/watch?v=zBIddyiMXsU
- 神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题
神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题 Webpack是现代化的静态资源模块化管理和打包工具,其能够通过插件配置处理和打包多种文件格式,生成优化后的静态资源,核心原理是将 ...
- Grafana的仪表盘URL参数设置
转载请注明出处: 在调试grafana时,需要对grafana进行share的url图表进行一些自定义设置,总结下常用的参数 参考网站:https://grafana.com/docs/grafana ...
- HTTP 常见状态码【5种最最最常见的状态码】
HTTP 常见状态码 一.200 [ok] 一切正常 二.400 [Bad Request] 客户端 出现问题 需要注意:前端传入的参数与后台接收数据时的 参数名 必须保持一致 三.500 [Inte ...