【问题标题】:How to implement a settings file in a Python program如何在 Python 程序中实现设置文件
【发布时间】:2012-06-08 09:52:39
【问题描述】:

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

【问题讨论】:

标签: python settings ini


【解决方案1】:

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

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

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

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

*edit: 没有双关语...

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2015-08-30
          • 2011-12-26
          • 2021-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-20
          • 2012-10-12
          • 1970-01-01
          相关资源
          最近更新 更多