众人的力量

联系 通讯 +49 221/ 82 00 85 - 0
阅读时间:9分钟
by Marie Volkert, Tomás Silveira Salles / 2021年9月9日
Python蛇象征着Next Kraftwerke的新配置文件库。必威登录官方网站

Python配置文件变得简单:了解我们新的开源库

大多数复杂的软件应用程序需要某种形式的配置,通常通过配置文件进行配置。应用程序越复杂,就越难在提供灵活性和提高可用性之间做出选择。配置是两全其美的解决方案。然而,要做好这件事需要知识、经验和纪律,而且往往需要你自己犯所有必威最新娱乐网址常见的错误,并从中吸取教训。现在,我们的开发人员和数据分析师团队已经发布了他们的解决方案,作为一个开源python库:PyConfig。

我们将向您展示它是如何工作的,以及它如何帮助解决常见问题,并提供一些见解我们的软件开发方法。

不知道我们在说什么吗?别担心,这篇文章不只是针对软件开发人员的。你是一个经验丰富的程序员,想跳过这个介绍,直接进入业务?看看包文档来个深度潜水。


什么是软件配置?我们为什么需要它?

让我们从一个非常简单的例子开始:智能手机上的计时器。作为用户,你期望的体验是这样的:你输入一定的时间,比如5分钟,然后按“开始”。5分钟后,应用程序会告诉你时间到了。再简单不过了。现在你可能会问:在这5分钟结束的时候,应用到底做了什么?它会发出哔哔声吗?它会播放我最喜欢的歌曲吗?我的手机应该震动吗?

解决这个问题的一种方法是,开发人员提前为您做出选择,并直接在代码中编写。在这个例子中,我们定义了一个python函数,它只接受时间作为输入,等待同样长的时间,然后播放mp3文件“beep_beep”并震动手机:

def run_timer浮动睡眠play_sound文件=“beep_beepmp3”振动=真正的

这是最简单的解决方案,但是用户失去了所有的灵活性和控制权无缘无故就用了应用!用户永远不能改变应用程序的行为!让我们再试一次,但这次问用户他们到底想要什么。每次你想使用计时器时,你都必须告诉它要用多长时间,播放哪种声音,以及是否震动手机。每一次。请注意,在下面的代码中,mp3文件和是否振动的选择现在是如何作为输入参数传递给“run_timer”的(它们不再是“硬编码”):

def run_timer浮动sound_filestr振动保龄球睡眠play_sound文件=sound_file振动=振动

这给了用户最大的好处灵活性和控制力当然,但代价是让应用程序几乎无法使用,因为设置一个简单的计时器需要花费太多时间和精力!

配置是摆脱这种权衡的方法,这样你就不必妥协了。基本上,在你手机的某个地方有一个存储这些您很少想要更改的“输入”参数的文件.它可能看起来像这样:

timer_settings]sound_file=“la_cucarachamp3”振动=是的

当你使用计时器时,你所要做的就是输入时间,然后按“开始”。额外的“输入”将是自动从这个配置文件中读取,所以你不必每次都输入。

cfg=get_configurationdef run_timer浮动睡眠play_sound文件=cfgsound_file振动=cfg振动

另一方面,如果你厌倦了“la cucaracha”,应用程序通常会有一个设置菜单,你可以在其中选择不同的曲调(应用程序会通过编辑上面的文件保存这个新选择)。两全其美:优秀的可用性,但有很多的灵活性和控制。

PyConfig:配置解析器的备选方案

配置有各种形状和大小。有时配置参数对普通用户来说太技术性了,但对非常高级的用户甚至是开发应用程序的程序员来说很有趣。其他时候配置参数是你不想一直输入的秘密(如密码)。通常,配置参数可能因用户而异,但在选择之后很少更改。

Python有一个称为“configparser”的标准配置库,它非常方便和强大,但不能解决许多常见问题。因此,我们开始编写自己的库,以便更容易地遵循应用配置的最佳实践.我们将在这里介绍其中一些常见问题,并解释PyConfig如何解决它们。

免责声明:有许多有趣的应用程序配置包,我们重视对开源社区的每一个贡献。有些人可能更喜欢其他软件包而不是我们的,这取决于他们的编程风格、需求和心态。当然,PyConfig是我们的宝贝,我们可能会有偏见,但我们会尽可能保持客观。

默认最佳实践

如果你真的知道你在做什么,如果你是自律的和小心的,你可以做一个很好的工作,只使用configparser。但是让你放松警惕一分钟,在这方面任何人都可能犯一些错误。PyConfig旨在使“正确的方式”成为“唯一的方式”。.在不可能的情况下,我们尝试用“正确的方式”,至少是“自然的方式”。让我们开始崩溃吧!

早期检查配置
手机上的应用程序通常有一个专门用于更改“设置”的菜单屏幕。然而,在程序员为其他程序员制作的应用程序中,或者为数据分析师制作的应用程序中,或者作为公司内部工具的应用程序中,我们通常不会花时间制作这样的屏幕,实际上这些应用程序通常根本没有屏幕,而只是在基于文本的终端上运行。因此,配置文件只是作为文本文档由用户直接编辑作为开发者,我们必须为一切做好准备!

在我们的计时器应用程序的简单示例中,例如,“振动”参数应该是“yes”或“no”。但是由于用户只是在编写他们自己的配置文件,所以没有什么可以阻止他们在那里输入单词“maybe”!

万一配置无效,你总是想要尽快知道。如果您正在部署一个重要的、长期运行的web服务,并且配置文件中缺少密码,那么通常可以立即失败,并提供一个有用且清晰的错误消息,说明丢失了哪个密码,然后在几分钟内修复配置并再次启动服务。危险在于服务运行时,尽管配置无效。它可以运行好几天而不需要丢失密码,没有人会注意到,直到它第一次需要密码,然后可怕地崩溃。根据墨菲定律,这种情况总是发生在半夜,或者当所有能解决问题的人都在度假的时候。第二天早上醒来,你的收件箱里装满了来自客户的愤怒邮件,还有一些来自老板的。

如果你使用上面的“计时器”来烤蛋糕,而“声音文件”参数缺失,应用程序将首先等待25分钟,直到你的蛋糕准备好,然后才尝试访问缺失的参数并崩溃。你会在很久之后才收到烟雾探测器的通知。另一方必威登录官方网站面,在Next Kraftwerke,这种在长时间运行的服务中未被发现的崩溃可能会让我们错过很多重要的数据,阻止我们发挥我们的作用稳定电网或者只是让我们在交易大厅损失了很多钱。

PyConfig通过以下方式避免了这种情况一旦加载,就自动验证应用的配置.所有的一切。它将检查每个参数是否有一个值(或者至少是一个默认值),并且每个值是否具有正确的“数据类型”(即数字、日期、文本、URL、是/否等)。另外,开发人员可以定义更复杂的自动执行检查。如果有问题,它会在应用程序启动时被注意到。


用PyConfig保守秘密

另一个常见的错误是无意的敏感配置参数泄漏(如密码)。在开发过程中,在错误消息中包含配置参数是很常见的,因此我们可以更好地理解错误的上下文。一个开发人员记录了一条无辜的错误消息,其中包括应用程序的配置,另一个开发人员单独添加了一个应该是秘密的新配置参数……突然之间,你就有了一个严重的安全问题!

PyConfig提供了自定义数据类型“SecretString”特别为这种情况制作的。每个敏感参数都应该用这种特殊的类型来标记。当您在错误消息或任何其他日志中打印配置时,PyConfig会自动将secret屏蔽为" ***** "。它不仅为您省去了检查是否有需要屏蔽的秘密的麻烦,而且还确保以后添加的新秘密也会被适当地屏蔽。

该库还将禁止您为秘密参数提供默认值(不幸的是,在开发过程中,为了方便起见,这种技巧仍然很常见)。除非您从代码中删除“未来的尴尬”,否则它不会运行。

保持文档更新

关于应用程序配置选项的所有信息都可以在代码的某个地方找到,要么是加载配置的地方,要么是验证配置的地方,要么是实际使用配置的地方。但是用户还必须按顺序获得这些信息(不知道源代码)编写自己的配置文件有哪些参数?它们的数据类型是什么?他们如何改变应用程序的行为?每个参数的值有什么限制?该文档通常以PDF或wiki页面的形式单独提供。最后还有“模板”配置文件,其中已经列出了所有参数,但缺少值(或使用默认值填充)。这些模板很方便,因为用户可以简单地复制它们并快速设置应用程序。

总的来说,我们现在有三个不同的位置,其中包含了有关配置的部分或全部细节,并且它们需要保持同步!如果您更改了代码中的一个参数的名称,却忘记更新wiki页面上的文档,就会惹恼用户。修改参数的默认值而忘记更新模板文件?愤怒的用户。你懂的。

这种情况经常发生。因此,经验丰富的程序员通常更喜欢直接查看源代码来检查细节,因为他们知道文档不可信。

PyConfig解决了这个问题通过直接从源代码自动生成配置选项的完整详细文档,以及模板文件。用户可以随时生成任何一个,并且根据定义,结果是最新的。

作为开发人员,您不必担心同步所有这些信息源,而可以专注于真正重要的内容,即源代码。

分离应用程序逻辑和配置文件格式

有几种不同的格式通常用于应用程序配置(例如.INI, .YAML, .JSON或。env),有时为了这个目的使用“环境变量”而不是文件是很方便的(但是如果你不知道它们是什么也不用担心)。通常,开发人员必须选择他们想要支持的格式。不同的格式需要不同的代码来读取文件并将其内容转换为python变量,因此支持多个选项需要大量的工作。事实上,开发者根本不想处理这个问题,因为配置文件、格式和环境变量与他们试图用软件解决的实际问题毫无关系。它是无聊的,重复的,分散了我们对真正的挑战的注意力,比如我们的案例必威正规网站虚拟电厂管理全国数千家电厂的能源生产,保障电力系统的平稳运行!

我们的库将应用程序逻辑从配置加载机制中分离出来,并允许开发人员编写自己的代码独立于任何配置格式.另一方面,应用用户可以灵活地选择自己喜欢的格式或环境变量,或者两者兼而有之。

更重要的是:格式支持与库一起发展。在早期,PyConfig只支持. ini和. yaml文件,以及环境变量。在未来的版本中,我们打算添加更多的格式(例如JSON)。应用程序开发人员只需切换到最新的库版本(但不必更改源代码中的任何内容),就可以为用户提供这种额外的灵活性。

走向开源

在Ne必威登录官方网站xt Kraftwerke,我们享受了富人的福利Python开源社区很长一段时间,是时候我们回报一些东西了。PyConfig是我们的第一个开放项目,希望很快就会成为众多开放项目中的一个。我们邀请您查看我们的代码github,试一试,提交bug报告,特性请求,pull请求,甚至只是联系一下。对python社区:感谢你们所做的一切。谢谢你让我们进来。我们很高兴能尽自己的一份力。

免责声明:必威登录官方网站Next Kraftwerke对所提供信息的完整性、准确性和现实性不承担任何责任。本文仅供参考,不能取代个人法律意见。

玛丽Volkert

玛丽Volkert

网络营销经理

Tomás Silveira Salles是Next Kraftwerke的软件开发人员。必威登录官方网站

Tomás西尔维拉·萨莱斯

软件开发人员

Baidu
map