研究生科研必备Python库:Commandline_Config

对于计算机相关,尤其是搞机器学习的同学们,或者任何需要用到Python写实验代码的朋友,在跑Python实验的时候,可以用commandline_config库来提升自己写代码的效率(图片请看下方链接原文):

天际青年:Python commandline-config简洁命令行配置工具: 一个供用户以Python Dict或JSON格式编写(科研中实验)配置的库,同时可以从命令行中读取参数2 赞同 · 0 评论文章

这是一个可以直接用pip安装的python工具包,适合经常写python代码跑实验的研究生们,工具可以通过Python原生字典dict(支持嵌套)的形式来写实验的参数配置,同时可以通过命令行传参的方式以及代码直接赋值的方式来修改参数值。同时,工具还有配置拷贝,保存到本地或数据库,传参给函数等功能,以及参数完整性检查,参数值类型检查功能以保证代码或命令行参数不会写错,欢迎有需要的朋友使用。

工具可通过pip install commandline_config直接安装使用。

Github 网址

GitHub - NaiboWang/CommandlineConfig: A library for users to write (experiment in research) configurations in Python Dict or JSON format, while can read parameters from the command line.github.com/NaiboWang/CommandlineConfig

简单示例

# 通过pip安装

pip install commandline_config

# 导包

from commandline_config import Config

# 定义配置字典

config = {

  "index":1,

  "lr": 0.1,

  "dbinfo":{

    "username":"NUS"

  }

}

# 根据配置生成配置类

c = Config(config)

# 打印参数配置

print(c)

# 代码中通过点.直接读写参数,支持多层:

c.index = 2

c.dbinfo.username = "ZJU"

print(c.index, c.dbinfo.username, c["lr"])

# 在命令行中,通过--修改参数值:

python example.py --index 3 --dbinfo.username XDU

# 代码中通过help方法,或命令行中通过-h或-help来获取参数说明(需要自定义,详情请看下面详细文档)

c.help()

python example.py -h

新特性

v2.2.*

支持字典内参数无限层级嵌套

自动版本检查

支持参数值限定为指定值(枚举)

支持元组类型tuple

支持从本地JSON文件中读取配置

可设置参数帮助,并通过命令行-h打印参数说明

文档更新提供简单示例

请您Star

如果您觉得此工具不错,请轻轻点击github页面右上角Star按钮增加项目曝光度,谢谢!

简单使用示例图

example.py

则在命令行中,可通过--dataset cifar10来给dataset参数赋值为字符串cifar10:

python example.py --dataset cifar10 --lr 0.001 --normalization --multi-information [1,[],[2,[3]]]

原来需要用argparse写的很多行的代码,现在使用此工具之后只需两行即可,并且代码结果更加清晰,易于理解:

配置文件支持嵌套,并可通过.的方式访问和修改属性值:

嵌套配置设置

配置文件支持以直接通过print打印,并以表格或json形式呈现:

开发原因

对于经常跑科研实验的朋友们,大家是不是经常需要在python文件开头设置大量的命令行参数,并在下方代码中以args.*的方式调用:

比如下面的这段示例:

parser = argparse.ArgumentParser(description='index')

parser.add_argument('--index', default=0, type=int, help='party index')

parser.add_argument('--party_num', default=100, type=int)

args = parser.parse_args()

print(args.index)

每多一个参数,代码中就会多一行parser.add_argument,手写每个参数的配置时会很繁琐,如名称需要加--,还有修改默认值,类型以及描述的时候很麻烦,最后也会导致自己的代码很冗长,维护不便。

就算用了更高级一点的Click,也需要不停的写option, 而且有几个option对应函数就要写几个输入参数与之匹配,写代码实在是繁琐,比如以下Click代码:

import click

from caesar_encryption import encrypt

@click.command()

@click.argument('text', nargs=-1)

@click.option('--decrypt/--encrypt', '-d/-e')

@click.option('--key', '-k', default=1)

def caesar(text, decrypt, key):

    text_string = ' '.join(text)

    if decrypt:

        key = -key

    cyphertext = encrypt(text_string, key)

    click.echo(cyphertext)

if __name__ == '__main__':

    caesar()

我并不想在写代码的时候反复指定option选项,并在函数名参数栏写一大堆对应参数,麻烦的很。

因此,如果可以在代码中通过Python对象/JSON的形式写参数配置,会不会就让代码看得更加结构化,更清晰呢?

同时,能不能直接将命令行参数当做Python对象进行读写,深拷贝等操作,就如同没有配置过命令行参数一样?

能不能很方便的将一次实验的配置保存到本地文件或者插入如mongodb这样的数据库中?

另一个问题,能不能保证自己在传递命令行参数或者在python代码中修改键值的时候不会出现如参数名称写错,或者赋值的参数值的类型与初始设置类型不匹配的问题?

最重要的是,能不能让写代码的速度变的很快,而不需要一行一行的添加一点一点的配置呢?

为了解决以上痛点,因此开发了此工具。

我的目标是让大家用更加简单的写出和繁琐的argparse或click这类命令行解析包一样的效果的代码,同时让配置看起来结构化简洁化,选择json格式是因为Python字典类型dict原生就是json格式,所以可以做到和Python代码格式保持一致,从而使我们可以将配置信息直接嵌入到Python代码文件中(任意位置),而不需要建立类似toml这样单独的配置文件,同时,此库也可以在代码文件的任意位置写配置以读取命令行参数以及随时修改配置各字段值的功能等。

简洁命令行配置工具

一个供用户以Python Dict或JSON格式编写(科研中实验)配置的库,同时可以从命令行中读取参数。

文档目录

- [请您Star](#请您star)

- [简洁命令行配置工具](#简洁命令行配置工具)

- [目录](#目录)

- [使用方式](#使用方式)

- [请提出issue](#请提出issue)

- [安装方法](#安装方法)

- [配置方式](#配置方式)

- [配置参数读写方式](#配置参数读写方式)

- [写入方式](#写入方式)

- [读取方式](#读取方式)

- [传递配置给函数](#传递配置给函数)

- [拷贝配置](#拷贝配置)

- [配置参数存储至本地或数据库](#配置参数存储至本地或数据库)

- [注意事项](#注意事项)

- [与Argparse冲突](#与argparse冲突)

- [输入值会自动强制转换为默认值对应类型](#输入值会自动强制转换为默认值对应类型)

- [list参数赋值时字符串元素引号前需加反斜线](#list参数赋值时字符串元素引号前需加反斜线)

- [参数命名规范](#参数命名规范)

- [嵌套对象目前只支持一层](#嵌套对象目前只支持一层)

- [参数完整性检查,所有要修改的参数必须预定义](#参数完整性检查所有要修改的参数必须预定义)

- [ZSH环境特殊配置](#zsh环境特殊配置)

- [完整转换示例](#完整转换示例)

具体安装和使用方式,请参考github中文文档:

CommandlineConfig 中文文档 (github.com)github.com/NaiboWang/CommandlineConfig/blob/master/Readme_CN.md

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容