python 单配置文件

23 投票
4 回答
7067 浏览
提问于 2025-04-15 19:48

我正在开发一个项目,需要一个配置文件,里面的数据会被多个模块使用。
我的问题是:通常大家是怎么处理这个的?是让每个模块(文件)都去读取配置文件,还是有其他更好的方法呢?

我在想可以创建一个叫做 config.py 的模块,专门用来读取配置文件。每当我需要配置的时候,就用 import config 导入这个模块,然后像 config.data['teamsdir'] 这样获取 'teamsdir' 这个属性(比如说)。

回复:我选择了 conf.py 的方法,因为它模块化、灵活,而且简单。

我可以直接把配置数据放在这个文件里。如果以后我想从一个 json 文件、xml 文件或者多个来源读取数据,只需要修改 conf.py,确保数据的访问方式不变就行。

被接受的回答:我选择了 "Alex Martelli" 的回答,因为它最完整。我也给其他好的、有用的回答投了赞。

4 个回答

3

一种不错的方法是在应用程序启动时,把配置文件解析成一个Python对象,然后把这个对象传递给所有需要访问配置的类和模块。

这样可以节省很多解析配置的时间。

4

你说的方法是可以的。如果你想添加对用户配置文件的支持,可以使用 execfile(os.path.expanduser("~/.yourprogram/config.py")) 这段代码。

11

我喜欢用一个单独的 config.py 模块来处理配置。这个模块在第一次被导入时,会读取一个或多个配置文件,并设置一些“全局变量”。我更倾向于用 config.teamdata 这种方式,而不是用 config.data['teamdata'] 这种绕圈子的方式。

这个方法假设一旦加载了配置设置,它们就是只读的(当然,可能在单元测试的情况下,测试代码会人为地设置 config 变量,以便更好地测试代码)。基本上,这种做法利用了模块的特性,因为模块是最简单的 Python 形式的“单例”,当你不需要子类化或其他只有类支持的特性时,这种方式非常合适。

使用“一或多个”配置文件的方式很常见且有用。例如,首先在 /etc 目录下放一个文件,用于一般的默认设置;然后在 /usr/local 下放一个文件,用于特定站点的覆盖设置;最后,可能在用户的主目录下再放一个文件,用于用户特定的设置。

撰写回答