首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Python 项目配置管理框架技术选型

编程知识
2024年09月23日 20:44

一、背景介绍

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

(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 功能全面,又是专业配置管理库,为最优选择。

From:https://www.cnblogs.com/zengzuo613/p/18427958
本文地址: http://shuzixingkong.net/article/2244
0评论
提交 加载更多评论
其他文章 比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛
本文主要介绍了“大唐杯”信息通信技术大赛的简介、比赛形式、备赛方向,并结合往年题目进行了分析和总结,对参与比赛的同学有一定帮助作用。
比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛 比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛 比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛
RDK X5首发上手体验!真的太帅啦!!!
RDK X5首发上手体验!真的太帅啦!!! 本Blog同步发表于以下平台: ·地瓜机器人开发者论坛:https://developer.d-robotics.cc/forumDetail/251934743552436286 · CSDN:https://blog.csdn.ne
RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!!
76.最小覆盖子串 Golang实现
题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子
最好的文件管理器-dolphin
title: 最好的文件管理器-dolphin author: ivhu date: 2024-09-23 19:04:30 categories: - 计算机 - linux tags: - 文件管理器 description: WARN:windows没有,废话少说,直接开始 what'
最好的文件管理器-dolphin 最好的文件管理器-dolphin 最好的文件管理器-dolphin
密码学承诺原理与应用 - 概览
作者:@warm3snow https://github.com/warm3snow 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ 标签:技术分享模板 目录简介承诺方案原理符号定义方案定义常见承诺方案和原理哈希承诺ElGamal承
密码学承诺原理与应用 - 概览 密码学承诺原理与应用 - 概览 密码学承诺原理与应用 - 概览
不是,哥们,谁教你这样处理生产问题的?
你好呀,我是歪歪。 最近遇到一个生产问题,我负责的一个服务触发了内存使用率预警,收到预警的时候我去看了内存使用率已经到了 80%,看了一眼 GC 又发现还没有触发 FullGC,一次都没有。 基于这个现象,当时推测有两种可能,一种是内存溢出,一种是内存泄漏。 好,假设现在是面试,面试官目前就给了这点
不是,哥们,谁教你这样处理生产问题的? 不是,哥们,谁教你这样处理生产问题的? 不是,哥们,谁教你这样处理生产问题的?
java基础 -反射笔记
710,反射快速入门 代码: 先创建一个 re.properties 文件: classfullpath=com.hspedu.Cat method=hi Cat.java package com.hspedu; public class Cat { private String name = &q
java基础 -反射笔记 java基础 -反射笔记 java基础 -反射笔记
Redis系列补充:聊聊布隆过滤器(go语言实践篇)
★ Redis24篇集合 1 介绍 布隆过滤器(Bloom Filter)是 Redis 4.0 版本之后提供的新功能,我们一般将它当做插件加载到 Redis Service服务器中,给 Redis 提供强大的滤重功能。 它是一种概率性数据结构,可用于判断一个元素是否存在于一个集合中。相比较之 Se
Redis系列补充:聊聊布隆过滤器(go语言实践篇) Redis系列补充:聊聊布隆过滤器(go语言实践篇)