Pythonic方法设置外部fi的模块化设置

2024-09-30 22:11:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

问题:在模块中设置一些配置全局参数或完成我正在尝试的功能,是否有更为python式的方法?(我不想依赖第三方模块。)我是否可能在某些基本方面完全偏离轨道?在


Tags: 模块文件方法函数命令行用户命令config
1条回答
网友
1楼 · 发布于 2024-09-30 22:11:57

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

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。。。在

相关问题 更多 >