使用 argparse 解析配置文件。
项目描述
支持的文件类型
类型 | 读者 | 第三者 | 笔记 | |
✅ | cfg/ini |
configparser |
不 | 支持自定义ConfigParser 阅读器 |
✅ | json |
json |
不 | |
✅ | toml |
tomli /tomllib |
是/否 | tomllib 从 Python 3.11 内置并基于tomli |
✅ | yaml |
pyyaml |
是的 |
安装
pip install cargparse
基本用法
给定 config.yaml
:
text: hello world
number: 42
像往常一样使用argparse
命令行参数!
import argparse
import cargparse
import sys
parser = argparse.ArgumentParser()
parser.add_argument('--text', type=str, required=True)
parser.add_argument('--number', type=int, required=True)
parser.add_argument('--decimal', type=float)
config = cargparse.Cargparse(parser).parse_file(sys.argv[1])
python test.py config.yaml
>> config
{'text': 'hello world', 'number': 42)
>> config.text
'hello world'
>> type(config.number)
<class 'int'>
⚠️ 阅读文档以获取有关类型验证的更多信息。
高级用法
您不限于平面层次结构。
model:
lstm:
input_size: 100
hidden_size:
- 128
- 64
summary: True
定义一个帮助函数来解析每个嵌套部分args
,它被解释为一个字典str
。
from __future__ import annotations
def parse_config(filename: Path | str) -> cargparse.Namespace:
def model_namespace(args: str) -> cargparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument('--cnn', type=cnn_namespace)
parser.add_argument('--lstm', type=lstm_namespace)
parser.add_argument('--summary', type=cargparse.boolean)
return cargparse.Cargparse(parser).parse_dict(args)
def cnn_namespace(args: str) -> cargparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument('--in_channels', type=int, required=True)
parser.add_argument('--out_channels', type=int, required=True)
parser.add_argument('--kernel_width', type=int, required=True)
return cargparse.Cargparse(parser).parse_dict(args)
def lstm_namespace(args: str) -> cargparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument('--input_size', type=int, required=True)
parser.add_argument('--hidden_size', type=cargparse.list_int, required=True)
return cargparse.Cargparse(parser).parse_dict(args)
parser = argparse.ArgumentParser()
parser.add_argument('--model', type=model_namespace, required=True)
return cargparse.Cargparse(parser).parse_file(filename)
if __name__ == '__main__':
config = parse_config(filename=sys.argv[1])
>> config.model.cnn
>> config.model.lstm.hidden_units
*** AttributeError: hidden_units not in namespace: ['hidden_size', 'input_size']
>> config.model.lstm.hidden_size
[128, 64]
⚠️ 阅读文档以获取有关类型验证的更多信息。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
cargparse-0.0.9.tar.gz
(6.0 kB
查看哈希)
内置分布
cargparse-0.0.9-py3-none-any.whl
(6.5 kB
查看哈希)