简单、优雅、类型化的参数解析
simple-parsing
允许您将丑陋的argparse
脚本转换为结构良好、类型强大的精美艺术品。这不是一个花哨复杂的新命令行工具,它只是为普通的argparse添加了新功能!
使用dataclasses,simple-parsing
使共享和重用命令行参数变得更加容易 - 不再需要复制粘贴!
支持继承、嵌套、轻松序列化为json/yaml、从注释自动生成帮助字符串等等!
# examples/demo.py
from dataclasses import dataclass
from simple_parsing import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--foo", type=int, default=123, help="foo帮助")
@dataclass
class Options:
""" 这组命令行参数的帮助字符串 """
log_dir: str # 必需的str参数的帮助字符串
learning_rate: float = 1e-4 # float参数的帮助字符串
parser.add_arguments(Options, dest="options")
args = parser.parse_args()
print("foo:", args.foo)
print("options:", args.options)
$ python examples/demo.py --log_dir logs --foo 123
foo: 123
options: Options(log_dir='logs', learning_rate=0.0001)
$ python examples/demo.py --help
用法: demo.py [-h] [--foo int] --log_dir str [--learning_rate float]
可选参数:
-h, --help 显示此帮助消息并退出
--foo int foo帮助 (默认: 123)
Options ['options']:
这组命令行参数的帮助字符串
--log_dir str 必需的str参数的帮助字符串 (默认:
None)
--learning_rate float
float参数的帮助字符串 (默认: 0.0001)
(新) 简化API:
对于只想解析单个dataclass的简单用例,您可以使用simple_parsing.parse
或simple_parsing.parse_known_args
函数:
options: Options = simple_parsing.parse(Options)
# 或:
options, leftover_args = simple_parsing.parse_known_args(Options)
安装
pip install simple-parsing
示例
API文档 (建设中)
特性
-
自动生成"--help"字符串
作为开发人员,我们希望让进入我们项目的人能够轻松理解如何运行它们。然而,用户友好的
--help
消息通常很难编写和维护,尤其是随着参数数量的增加。使用
simple-parsing
,您的参数及其描述在同一个地方定义,使您的代码更易于阅读、编写和维护。 -
模块化、可重用、清晰分组的参数
(不再需要复制粘贴)
当您需要添加一组与现有参数类似的新命令行参数时,您可以重用您的参数类,而不是复制粘贴一块
argparse
代码并重命名变量,让ArgumentParser
为您处理为参数添加相关前缀的工作:parser.add_arguments(Options, dest="train") parser.add_arguments(Options, dest="valid") args = parser.parse_args() train_options: Options = args.train valid_options: Options = args.valid print(train_options) print(valid_options)
$ python examples/demo.py \ --train.log_dir "training" \ --valid.log_dir "validation" Options(log_dir='training', learning_rate=0.0001) Options(log_dir='validation', learning_rate=0.0001)
这些前缀也可以显式设置,或者完全不使用。更多信息,请查看前缀指南
-
参数子组
使用
subgroups
函数可以轻松选择不同的参数组! -
从配置文件设置默认值
命令行参数的默认值可以轻松从多种格式中读取,包括json/yaml!
-
轻松序列化:
轻松保存/加载配置到
json
或yaml
! -
继承!
您可以通过扩展现有参数类并添加自己的属性来轻松自定义它,这有助于跨项目促进代码重用。更多信息,请查看继承示例
-
嵌套!:
数据类可以在数据类内嵌套,深度随您所需!
-
更容易解析列表和元组 :
这在常规
argparse
中有时很棘手,但simple-parsing
通过使用Python的内置类型注解自动将值转换为正确的类型,使其变得更加容易。 作为一个附加功能,通过使用这些类型注解,simple-parsing
允许您解析嵌套的列表或元组,如此示例所示 -
枚举支持
-
(更多功能即将推出!)
示例:
上述所有功能的其他示例可以在示例文件夹中找到