Python 中脚本集合的配置变量

Configuration variables for a collection of scripts in Python

我有一组用 Python 编写的脚本。它们中的每一个都可以独立执行。然而,大多数时候它们应该一个接一个地执行,所以有一个 MainScript.py 以适当的顺序调用它们。每个脚本都有一些可配置的变量(我们称它们为 Root_DirData_DirLinWinFlag)。如果将此脚本集合移动到不同的计算机,或者需要处理不同的数据,则需要更改这些变量值。由于有许多脚本,这种重复很烦人且容易出错。我想将所有配置变量分组到一个文件中。

我尝试制作 Config.py,它将根据 this thread 包含它们,但是 import Config 生成 ImportError: No module named Config,因为它们不是包的一部分。

然后我尝试依赖变量继承:在调用所有其他变量的 MainScript.py 中定义一次。这行得通,但我意识到每个脚本都无法单独 运行。为了解决这个问题,我尝试在 MainScript.py 和其他文件中添加 useGlobal=True

if (useGlobal is None or useGlobal==False):
  # define all variables

但是当脚本 运行 独立时,这会失败:NameError: name 'useGlobal' is not defined。解决方法是定义 useGlobal 并在 运行 独立于 MainScript.py 运行脚本时将其设置为 False。有更优雅的解决方案吗?

执行此操作的最佳方法是使用位于主目录 (~/.config/yourscript/config.json) 中的配置文件。

然后您可以在启动时加载文件并在文件不存在时提供默认值:

示例(config.py):

import json

default_config = {
    "name": "volnt",
    "mail": "oh@hi.com"
}

def load_settings():
    settings = default_config
    try:
        with open("~/.config/yourscript/config.json", "r") as config_file:
            loaded_config = json.loads(config_file.read())
            for key in loaded_config:
                settings[key] = loaded_config[key]
    except IOError: # file does not exist
        pass
    return settings

对于配置文件,最好使用 json 而不是 python,因为使用您的脚本的人可以轻松编辑它。

想法是 python 想要访问文件 - 包括 Config.py - 主要作为模块的一部分。

好的是 Python 使构建模块(即 python 包)变得非常容易 - 初始化它可以通过创建

__init__.py

每个目录中的文件作为模块、子模块、子子模块等。

所以如果您已经创建了这个文件,您的导入应该会完成。

如果还有什么问题,请看优秀的python documentation


正如 cleros 所建议的,ConfigParser module 似乎是最接近我想要的东西(每个文件中的一行语句将设置多个变量)。