如何在Python程序中实现设置文件

3
一个“设置文件”是一个定义了像“背景颜色”,“执行速度”,“x的数量”之类的东西的文件。目前,我将其实现为一个单独的setting.py文件,并在开头导入它。有人告诉我应该将其改为settings.ini文件,但我不明白为什么!请您说明一下,哪个选项更优?

如果您决定走.ini这条路,请查看http://docs.python.org/library/configparser.html。 - lvc
我认为存储配置细节本身并不是一种不好的做法。一些知名的实用工具,如IPython[1]和rope[2],使用Python文件来存储配置细节。
  1. http://ipython.org/ipython-doc/rel-0.12.1/config/overview.html#configuration-objects-and-files
  2. http://rope.sourceforge.net/overview.html#ropeproject-folder
- sateesh
4个回答

5

没有最佳解决方案,只是个人喜好的问题。

通常,设置不需要用 Turing 完备语言来表达:它们通常只是一堆标志和选项,有时是字符串和数字等。拥有一个 settings.py 文件的理由(虽然非常不正统)是如果预计终端用户将编写代码以生成非常奇特的配置(例如游戏地图),那么这将与 shell 脚本 .bashrc 类型的文件相当类似。

但是,在 99.9% 的程序中,设置通常只是一堆标志和选项,有时是字符串和数字等。将它们存储为 JSON 或 XML 是可以接受的。这也使得很容易在设置上执行反射:例如以树形方式自动列出它们或根据描述自动创建 GUI 等。

(此外,如果允许人们通过修改设置文件注入代码,则可能会成为(不太可能的?)安全问题。)

*编辑:无意刺痛...


3
有几个原因说明将配置文件与主代码库分离是个好主意。当然,这取决于您的用例,您应该根据实际情况进行评估。
  1. 配置可以由不懂编程语言的终端用户管理。将配置拆分出来,并使用简单的ini文件,使用简单的键值对来设置配置参数,比较合理。

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

  3. 存在知道何为配置文件和源文件的包管理器。它们很聪明,不会覆盖任何已更改的配置,例如版本升级等。因此,您无需在软件包版本升级后担心重置配置参数。例如,您将您的产品与默认配置文件一起发布。用户微调了几个参数。您发布了另一个版本的软件包。用户在版本升级后不应期望配置重置。


2

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接