gpt4 book ai didi

从外部文件设置模块范围设置的 Pythonic 方式

转载 作者:行者123 更新时间:2023-12-01 04:42:04 26 4
gpt4 key购买 nike

一些背景知识(不是强制性的,但可能很高兴知道):我正在编写一个 Python 命令行模块,它是 latexdiff 的包装器。在将文件传递给 latexdiff 之前,它基本上用写出且格式正确的引用替换 LaTeX 文件中的所有 \cite{ref1, ref2, ...} 命令,以便latexdiff 将正确标记对文本中引用的更改(否则,它将整个 \cite{...} 命令视为单个“单词”)。目前所有代码都位于一个文件中,可以使用 python -m Latexdiff-cite 运行,但我尚未决定如何打包或分发它。为了使脚本对其他人有用,引文格式需要可配置。我实现了一个可选的命令行参数 -c CONFIGFILE 来允许用户指向自己的 JSON 配置文件(默认文件驻留在模块文件夹中,如果不使用该参数,则会加载该文件) .

当前实现:我的单文件命令行 Python 模块当前解析 if __name__ == '__main__' 中的命令行参数,并加载配置文件 (在运行程序的 main 函数之前,由用户在 -c CONFIGFILE 中指定。因此,配置变量在整个模块中可用,一切都很好。但是,我正在考虑按照 this guide 发布到 PyPI这似乎要求我将命令行解析放入 main() 函数中,这意味着 config 变量将不可用于其他函数,除非传递为需要它的地方的参数。这种“通过参数传递”的方法对我来说似乎有点困惑。

问题:是否有一种更Pythonic的方法来在模块中设置一些配置全局变量或以其他方式完成我想要的事情? (我不想依赖第三方模块。)我是否在某些基本方面完全偏离了轨道?

最佳答案

一种方法是在类或简单的字典中定义配置:

class Config(object):
setting1 = "default_value"
setting2 = "default_value"

@staticmethod
def load_config(json_file):
""" load settings from config file """
with open(json_file) as f:
config = json.load(f)
for k, v in config.iteritems():
setattr(Config, k, v)

然后您的应用程序可以通过此类访问设置:Config.setting1 ...

关于从外部文件设置模块范围设置的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com