2

“设置文件”是定义了“背景颜色”、“执行速度”、“x 的数量”等内容的文件。目前,我将它实现为一个setting.py文件,我在一开始就导入了该文件。有人告诉我我应该把它变成一个settings.ini文件,但我不明白为什么!请澄清一下,最佳选择是什么?

4

4 回答 4

4

没有最优解;这是一个偏好问题。*

通常,设置不需要用图灵完备的语言来表达:它们通常只是一堆标志和选项,有时是字符串和数字等。拥有settings.py文件的一个论点(尽管非常不正统)是如果最终用户被期望编写代码来生成非常深奥的配置(例如游戏的地图)。这将与 shell script.bashrc样式文件非常相似。

但同样,在 99.9% 的程序中,设置通常只是一堆标志和选项,有时是字符串和数字等。可以将它们存储为 JSON 或 XML。它还可以轻松地对您的设置执行反射:例如,以树状方式自动列出它们,或根据描述自动创建 GUI。

(如果您允许人们通过修改设置文件来注入代码,这也可能是一个(不太可能?)安全问题。)

*编辑:没有双关语......

于 2012-06-04T10:00:20.213 回答
3

将配置文件从主代码库中分离出来是个好主意有几个原因。当然,这取决于您的用例,您应该根据您的用例进行评估。

  1. 配置可由不懂编程语言的最终用户管理。将配置分解并使用一个简单的文件更有意义,该ini文件使用简单的键值对作为配置参数。

  2. 配置因安装环境而异。您的代码在多个环境中运行,它们都使用不同的配置。通过在这些环境中安装单独的配置文件和相同的源代码,很容易维护这种情况。

  3. 有些包管理器知道什么是配置文件,什么是源文件。它们很聪明,不会在版本升级等时覆盖任何更改的配置。因此您不必担心在软件包版本升级后重置配置参数。例如,您使用默认配置文件发布您的产品。用户微调了一些参数。您运送了另一个版本的软件包。用户不应期望在版本升级后重置配置。

于 2012-06-04T10:05:25.983 回答
2

将设置文件设置为 Python 模块的一个问题是它可以包含在导入时将执行的代码。这可能允许将恶意代码插入您的程序。

于 2012-06-04T10:00:55.790 回答
1

对于 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 用于手动编辑的配置文件。

于 2012-06-04T12:21:03.510 回答