关于json:在Python中设置配置文件的最佳方法是什么

What is the best method for setting up a config file in Python

我意识到了这个问题(在python中使用设置文件的最佳实践是什么?)但正如7年前所问的那样,我认为再次讨论技术是如何发展的是有道理的。

我有一个python项目,它要求根据环境变量的值使用不同的配置。由于使用环境变量选择配置文件非常简单,所以我的问题如下:

当需要基于环境的多个配置时,软件行业将哪种格式视为在python中设置配置文件的最佳实践?

我知道python附带了一个configparser模块,但是我想知道使用yaml或json这样的格式是否更好,因为它们在不同语言间的易用性提高了流行性。当您有多个配置时,哪种格式更容易维护?


如果您真的想使用基于环境的yaml配置,可以这样做:

组态软件

1
2
3
4
5
6
7
8
9
10
11
12
13
import yaml
import os

config = None

filename = getenv('env', 'default').lower()
script_dir = os.path.dirname(__file__)
abs_file_path = os.path.join(script_dir, filename)
with open(abs_file_path, 'r') as stream:
    try:
        config = yaml.load(stream)
    except yaml.YAMLError as exc:
        print(exc)

我认为查看python-django设置模块的标准配置就是一个很好的例子,因为python-django web框架在商业项目中非常流行,因此是软件行业的代表。

对于JSON或YAML配置文件,它不会变得过于花哨——它只使用一个名为settings.py的python模块,该模块可以导入到任何其他需要访问设置的模块中。基于环境变量的设置也在这里定义。以下是指向Github上Django的示例settings.py文件的链接:

https://github.com/deis/example-python-django/blob/master/helloworld/settings.py


这实际上取决于您的需求,而不是格式的流行程度。例如,如果您只需要简单的键值对,那么一个ini文件就足够了。一旦您需要复杂的结构(例如数组或字典),我就选择JSON或YAML。JSON只存储数据(它更适合于系统之间的自动数据流),而YAML更适合于人工生成(或维护或读取)文件,因为它有注释,您可以在文件中的其他地方引用值…除此之外,如果您想要健壮性、灵活性和检查文件结构是否正确的方法(但不太关心数据的手动版本),我会选择XML。