关于使用traitlets实现工具配置功能的相关问题咨询
问题1:配置文件的正确加载方式、默认读取路径及最佳实践
- 正确加载方式:优先基于
traitlets.config.Application派生你的工具主类,它内置了完整的配置加载链路,配置文件按照c.{类名}.{属性名} = 配置值的格式编写即可,主类初始化时会自动完成加载。如果不使用Application类,也可以手动调用ConfigLoader类的相关方法读取配置文件生成Config对象,再将其传入所有Configurable子类的实例化参数中。
配置文件示例:
c.MyApp.debug = True c.MyApp.service_port = 8080
- 默认读取路径:按优先级从高到低依次为:当前工作目录、当前用户的配置目录(类Unix系统为
~/.config/{你的应用名}/,Windows系统为%APPDATA%\{你的应用名}\)、系统级配置目录/etc/{你的应用名}/,默认会读取匹配{应用名}_config.py命名规则的配置文件。 - 最佳实践:将全局配置统一放在继承自Application的主类中定义,各模块的配置放在对应模块的Configurable子类中定义,不要跨模块硬编码配置值。
问题2:是否需要将所有命令行选项定义为trait,如何添加自定义命令行选项
- 不需要将所有命令行选项都定义为trait。自定义非trait参数有两种常用实现方式:
- 先通过标准库
argparse解析这部分自定义参数,剩余未识别的参数再传递给traitlets的parse_command_line方法处理 - 重写Application类的
add_arguments方法,直接调用内置的parser实例self.parser.add_argument添加自定义参数,解析后的参数可以在self.args属性中获取
- 先通过标准库
- 更推荐尽量将所有命令行选项都定义为trait,可直接获得类型校验、默认值管理、变更事件监听等原生能力,减少额外的校验和处理代码。
问题3:实现--config config_file.py参数加载指定配置文件的方法
- 如果你基于
traitlets.config.Application实现工具入口,该能力是默认内置的,无需额外开发,用户执行命令时直接传入--config 配置文件路径即可自动加载对应配置。 - 如果你是手动实现配置加载逻辑,可以先自行解析命令行参数拿到指定的配置文件路径,再调用
load_config_file(配置文件路径)方法加载生成Config对象,再将该对象传入所有Configurable实例的config参数即可。
内容的提问来源于stack exchange,提问作者hans_meine
相关产品推荐
相关产品推荐

