一、背景介绍

在实际生产项目中,不同环境(如开发、测试、生产环境)常有不同配置需求,如数据库链接等。我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 “一份代码,多处部署”的需求,以提升系统部署灵活性及配置管理能力。具体而言,支持“多环境配置”的配置管理框架(类库)应支持以下功能:

(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 项目配置管理框架技术选型的更多相关文章

  1. 【SSM之旅】Spring+SpringMVC+MyBatis+Bootstrap整合基础篇(一)项目简介及技术选型相关介绍

    试水 一直想去搭建个自己的个人博客,苦于自己的技术有限,然后也个人也比较懒散.想动而不能动,想动而懒得动,就这么一直拖到了现在.总觉得应该把这几年来的所学总结一番,这样才能有所成长. 不知在何时,那就 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...

  3. python 项目配置虚拟环境

    # Windows 环境1, 安装 Visual C++ 2015 Build Tools, 依赖.Net Framework 4.6, 安装包位置 ./tools/windows/visualcpp ...

  4. 【Alpaca】.Net版开源配置中心 - 技术选型 Vue 3.0

    是否可以用 Vue 3.0 现有的Vue 2.* 不推荐,坐等Vue 3.0出迁移工具吧,手动改的话工作量还是不小的 新项目 考虑下团队内对Vue + TS + VS Code的熟练程度.过程中你会遇 ...

  5. CNBlog客户端--项目介绍以及技术选型

    项目背景 由于现在开始在博客园写博客,再加上我是android程序员!所以呢,就自然而然的想到自己开发一个自己认为"美"的客户端!!其实还有个原因就是最近我比较闲!!纯属自己给自己 ...

  6. [转]聊聊技术选型 - Angular2 vs Vue2

    转载:https://juejin.im/post/58cab85b44d9040069f38f7a "Come, and take choice of all my library, An ...

  7. 聊聊技术选型 - Angular2 vs Vue2

    作者介绍:李旸,美团点评前端工程师,3 年 Web 前端开发经验,现在是美团点评点餐团队的一员. "Come, and take choice of all my library, And ...

  8. (转).net项目技术选型总结

    原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作 ...

  9. Python环境配置及项目建立

    一.安装Python Python比较稳定的两个版本是Python 3.5和Python 2.7,我用的是Python 2.7,下载地址是:https://www.python.org/downloa ...

  10. 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区

    以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...

随机推荐

  1. C#从6.0~9.0都更新了什么?

    一.C#6中新增的功能 get 只读属性 简洁的语法来创建不可变类型,仅有get访问器: public string FirstName { get; } public string LastName ...

  2. [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding

    0 引言 在近期项目一场景中,一 Web API (响应内容:7MB - 40MB.数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s. 在这个场 ...

  3. app专项测试:app弱网测试

    app专项测试:app弱网测试 弱网测试背景 用户体验 APP使用过程中,弱网的高延迟和高丢包,在实时性要求非常高的场景,容易伤害用户体验 非正常情况下,Bug出现几率会增加 在解决日常支持需求中,经 ...

  4. IDL根据Landsat QA波段去云处理【代码】

    IDL根据Landsat QA波段去云处理[代码] ​ landsat QA波段(质量评估波段)是Landsat卫星影像数据中的一个特殊波段,他在Landsat5-9的每个产品中都存在.虽然我们常用的 ...

  5. 【H5】08 图片

    摘自: https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Multimedia_and_embedding 在这份教程中,到目前为止我们已经看到了 ...

  6. 基于 ChatGPT 的聊天软件合集打包分享

      「基于 ChatGPT 的聊天软件合集打包」 链接:https://pan.quark.cn/s/ef1f5e9c48e4 BotGem(原名AMA) 官网:https://botgem.com/ ...

  7. Google搜索居然也搞言论封锁

    昨天的一个blog: https://www.cnblogs.com/devilmaycry812839668/p/18334275 居然被Google搜索封禁了: 老美,你的言论自由呢???怎么到了 ...

  8. 人形机器人(humanoid)(双足机器人、四足机器人) —— 硬件测试的方法

    硬件测试的方法: 硬件的稳定性.鲁棒性.为机器人设定好固有的执行策略,然后长时间的让机器人重复执行这些既定好的动作.该种测试方法主要测试硬件的设计是否合理,硬件在长时间的运行中是否可以稳定运行而不是出 ...

  9. 人形机器人 —— Figure 01机器人亮相 | OpenAI多模态能力加持 | 与人类流畅对话交互 | 具身智能的GPT-4时刻

    视频地址: https://www.youtube.com/watch?v=vO1wnHA0tZg Figure AI 公司主页: https://www.figure.ai/ 根据Figure 01 ...

  10. Git的GPG签名 —— Tag签名 Verified验证,防伪造的gitee/github commit验证

    相关资料: 如何使用git通过ssh协议拉取gitee上的项目代码--如何正确的免密使用git 不论是gitee还是GitHub都有两种公钥设置,一种是ssh公钥,另一种则是GPG公钥.ssh公钥是为 ...