【问题标题】:using a config.py as a configuration file for a Python application使用 config.py 作为 Python 应用程序的配置文件
【发布时间】:2021-05-05 16:31:13
【问题描述】:

有多个帖子讨论是否推荐这样做,但假设您想为您的 python 应用程序做一个config.py。以下两种(类似于我)方法有什么区别:

  • 1)。将模块制作为 ini 文件,然后使用 exec(Path()) 解析它

如以下示例,取自here

## config.py ##

value1 = 32
value2 = "A string value"

value3 = ["lists", "are", "handy"]
value4 = {"and": "so", "are": "dictionaries"}

然后

from pathlib import Path

if __name__ == "__main__":
    config = {}
    exec(Path("config.py").read_text(encoding="utf8"), {}, config)
    
    print config["value1"]
    print config["value4"]
  • 2)。编写一个仅包含带有设置的字典的模块,然后导入该模块:

因此:

## config.py ##

DEFAULT = {
    value1: 32,
    value2: "A string value",

    value3: ["lists", "are", "handy"],
    value4 : {"and": "so", "are": "dictionaries"},
}

然后

import config.py

if __name__ == "__main__":
    cfg = config.DEFAULT
    
    print cfg["value1"]
    print cfg["value4"]

【问题讨论】:

  • 第二个肯定比简单地执行一个没有输入控制的文件要好...但是为什么不只是有一个config.ini并使用内置的configparser读取呢?跨度>

标签: python


【解决方案1】:

您可以同时使用这两种方法,但正如 Tomerikoo 解释的那样,作为代码的配置既有优点也有缺点:

优点:它很优雅(尤其是您的第二种方式),并且您可以轻松执行一些动态设置或类似的设置,因为您的配置是代码。

缺点:如果您无法控制配置,则有人可以执行他不应该执行的代码。由于这个原因,事情也会变得更糟。

ConfigParser 是执行此操作的首选方式,除非您的配置更像是脚本,而不仅仅是基于键值的普通配置。

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2021-06-20
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多