argparse的层次结构和高度复杂的变体。
hiargparse的Python项目详细描述
层次argparse
hiargparse是argparse的一个层次结构和高度复杂的变体。
最小代码
fromhiargparseimportArgsProvider,Arg,ChildProvider,ArgumentParserchild=ArgsProvider(args=[Arg('baz',default=42)])root=ArgsProvider(args=[Arg('foo',default='bar')],child_providers=[ChildProvider(provider=child,name='child')])parser=ArgumentParser()parser.add_arguments_from_provider(root)print(parser.parse_args())
说明
hiargparse会自动生成命令行参数,这些参数包含树状模块结构中的所有类,代码最少。
假设您创建了一个大模块,并且您的层次结构深层类,比如foo.bar.baz.ham.spam.Egg
,需要一些参数,比如heights
和widths
。
Foo
生成Bar
的实例,Bar
生成Baz
,…,并且Spam
生成具有这两个参数的Egg
。
当您要传递命令行选项时,必须在Foo
、Bar
、…、和Spam
的构造函数中编写这两个选项heights
和widths
。
如果Egg
被更新并需要一些新的参数,比如depth
或length
,该怎么办?
hiargparse将参数直接传递给类,而不使用任何黑色魔法。
功能
使用此模块,您可以
- 使用argparse
- 每个参数都会被自动帮助发送文本并分组到
argparse.ArgumentGroup
。 - 获取比原始名称空间更有用的名称空间对象
- 使用类似dict的键进行访问,获取子命名空间,转换到/从字典进行转换,等等
- 使用已知格式在某些配置文件中写入/读取参数
- 目前我们支持yaml和toml。
此外,此模块
- 几乎与原始argparse兼容;您可以逐渐将其引入到大型项目中。
- 在没有命令行参数的情况下工作;使用hiargparse分发模块时, 用户仍然可以选择是用命令行还是编程的方式向它提供参数。
本模块的灵感来自FacebookAIResearch/ELF中的rlpytorch.args_provider。
安装
pip install hiargparse
要求
- python>;=3.6.0
- 键入扩展(用于在Python3.6中键入扩展协议)>;=3.6.2.1
- pyyaml>;=3.12(仅当使用yaml write/read时)
- toml>;=0.9.4(仅当使用toml write/read时)
示例
- 请参阅^{
} 以轻松开始。 - 可以将hiargparse与原始argumentparser一起使用。见^{
} 。 - 如果要使用不带命令行参数的hiargparse,请参见^{
} 。 - ^{
} 描述如何使用配置文件写入和读取参数。 - 可以使用hiargparse执行的许多操作都显示在^{
} 中。
贡献
- 欢迎任何贡献!
- 分叉回购,创建一个分支,添加令人敬畏的更改,并提出一个新的拉取请求。
- 如果您发现一些错误,请在问题中报告。
作者
- Keigo Kawamura(东京大学工程研究院电气工程和信息系统系)
- kkawamura@logos.t.u-tokyo.ac.jp