“设置文件”是定义了“背景颜色”、“执行速度”、“x 的数量”等内容的文件。目前,我将它实现为一个setting.py
文件,我在一开始就导入了该文件。有人告诉我我应该把它变成一个settings.ini
文件,但我不明白为什么!请澄清一下,最佳选择是什么?
4 回答
没有最优解;这是一个偏好问题。*
通常,设置不需要用图灵完备的语言来表达:它们通常只是一堆标志和选项,有时是字符串和数字等。拥有settings.py
文件的一个论点(尽管非常不正统)是如果最终用户被期望编写代码来生成非常深奥的配置(例如游戏的地图)。这将与 shell script.bashrc
样式文件非常相似。
但同样,在 99.9% 的程序中,设置通常只是一堆标志和选项,有时是字符串和数字等。可以将它们存储为 JSON 或 XML。它还可以轻松地对您的设置执行反射:例如,以树状方式自动列出它们,或根据描述自动创建 GUI。
(如果您允许人们通过修改设置文件来注入代码,这也可能是一个(不太可能?)安全问题。)
*编辑:没有双关语......
将配置文件从主代码库中分离出来是个好主意有几个原因。当然,这取决于您的用例,您应该根据您的用例进行评估。
配置可由不懂编程语言的最终用户管理。将配置分解并使用一个简单的文件更有意义,该
ini
文件使用简单的键值对作为配置参数。配置因安装环境而异。您的代码在多个环境中运行,它们都使用不同的配置。通过在这些环境中安装单独的配置文件和相同的源代码,很容易维护这种情况。
有些包管理器知道什么是配置文件,什么是源文件。它们很聪明,不会在版本升级等时覆盖任何更改的配置。因此您不必担心在软件包版本升级后重置配置参数。例如,您使用默认配置文件发布您的产品。用户微调了一些参数。您运送了另一个版本的软件包。用户不应期望在版本升级后重置配置。
将设置文件设置为 Python 模块的一个问题是它可以包含在导入时将执行的代码。这可能允许将恶意代码插入您的程序。
对于 Python 使用库存库:
YAML 样式配置文件:
http://www.yaml.org/start.html
http://pypi.python.org/pypi/PyYAML/
(例如使用 Google App Engine)
INI:http ://docs.python.org/library/configparser.html
不要将 XML 用于手动编辑的配置文件。