
01
引言
当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置管理。
良好的配置管理应允许在任何环境中执行软件而不更改代码。最常见的配置包括数据库认证配置、部署服务器的主机名、动态参数等。在本文中,我想与大家分享一些配置管理的良好实践,以及如何在Python中实现它们。
闲话少说,我们直接开始吧!
02
如何选择配置文件的格式
一个好的配置文件一般需要满足以下三个标准:
易于阅读和编辑:它应该以文本为基础,以易于理解的方式进行构建。即使是非开发人员也应该能够阅读。
允许注释:配置文件不是只有开发人员才能读取的文件。当非开发人员试图理解代码行为时,注释就显得很重要。编写注释是快速解释某些事情的一种方式,从而使配置文件更具表现力。
易于部署:所有操作系统和环境都应接受该配置文件。
如果你仍然不知道哪一个更好,但是在Python中,我推荐的答案将是YAML或INI。这是由于YAML和INI被大多数Python程序和包所接受。
03
INI文件示例
INI文件通常是最简单的解决方案,由于它只有一个层次结构。然而,`INI`文件中没有数据类型,所有内容都被编码为字符串。
示例如下:
[APP]ENVIRONMENT = testDEBUG = True# Only accept True or False[DATABASE]USERNAME = xiaoxuPASSWORD = xiaoxuHOST = 127.0.0.1PORT = 5432DB = xiaoxu_database
04
YAML文件示例
使用YAML针对上述示例的相同配置如下所示。如下所示,`YAML`文件支持嵌套结构。此外,YAML也支持一些常见的数据类型,如字符串、整数、双精度、布尔值、列表、字典等。
APP:ENVIRONMENT: testDEBUG: True# Only accept True or FalseDATABASE:USERNAME: xiaoxuPASSWORD: xiaoxuHOST: 127.0.0.1PORT: 5432DB: xiaoxu_database
05
使用Cofigureparser读取ini文件
首先,我们来介绍Python专门为配置管理而设计的包,我们从内置的配置包Configureparser开始。Configureparser主要用于读取和写入INI文件,但它也同样支持字典和可迭代文件对象作为输入。每个INI文件由多个部分组成,其中有多个键、值对。
下面是上述ini文件读取的示例:
import configparserdef read_ini(file_path, config_json):config = configparser.ConfigParser()config.read(file_path)for section in config.sections():for key in config[section]:print((key, config[section][key]))read_ini("source/data/sample.ini", config_json)('environment', 'test')('debug', 'True')('username', 'xiaoxu')('password', 'xiaoxu')('host', '127.0.0.1')('port', '5432')('db', 'xiaoxu_database')
Configureparser并不会猜测配置文件中的数据类型,因此每个配置项都被存储为字符串。但它提供了一些将字符串转换为正确数据类型的方法。这里面最有趣的是布尔类型,因为它能够识别诸如yes/no、on/off、true/false和1/0的布尔值。
06
yaml文件读取示例
示例代码如下:
import yamldef read_yaml(file_path):with open(file_path, "r") as f:return yaml.safe_load(f)data = read_yaml("data/sample.yaml")print(data)
07
总结
您学废了嘛?
点击上方小卡片关注我
寄语:
所求皆如愿,
所行皆坦途。
多喜乐,长安宁。

