一个扩展模块,用于单击以启用通过setuptools入口点注册cli命令。
click-plugins的Python项目详细描述
用于click注册的扩展模块 通过setuptools入口点的外部cli命令。
为什么?
假设您开发了一个命令行接口,有人请求一个新功能 这与你的项目绝对相关,但会产生负面影响 像其他的依赖关系,主要的重构,或者可能只是它的域 特定于直接支持。而不是单独开发一个独立的 你可以提供一个setuptools entry point 它允许其他人使用您的命令行实用程序作为他们相关的 子命令。您可以选择这些子命令或子组的位置 已注册,但插件开发人员可以选择它们已注册。你 可以让所有插件在核心命令旁边注册,在一个特殊的 子组,跨多个子组,或某些组合。
启用插件
有关更详细的示例,请参见examples部分。
唯一的要求是用^{tt2}装饰click.group()。$ 它处理附加外部命令和组。在本例中,核心cli开发人员 从core_package.cli_plugins注册cli插件。
frompkg_resourcesimportiter_entry_pointsimportclickfromclick_pluginsimportwith_plugins@with_plugins(iter_entry_points('core_package.cli_plugins'))@click.group()defcli():"""Commandline interface for yourpackage."""@cli.command()defsubcommand():"""Subcommand that does something."""
开发插件
插件开发人员需要将其子命令或子组注册到 核心包加载的入口点setup.py。
fromsetuptoolsimportsetupsetup(name='yourscript',version='0.1',py_modules=['yourscript'],install_requires=['click',],entry_points=''' [core_package.cli_plugins] cool_subcommand=yourscript.cli:cool_subcommand another_subcommand=yourscript.cli:another_subcommand ''',)
损坏且不兼容的插件
任何无法加载的子命令或子组都将被捕获并转换为 一个click_plugins.core.BrokenCommand(),而不是把整个 克利。短帮助将转换为警告消息,如:
Warning: could not load plugin. See ``<CLI> <command/group> --help``.
如果执行子命令或组,则打印整个回溯。
最佳实践和额外积分
向插件打开cli可以鼓励其他开发人员独立扩展 功能独立,但不能保证这些新功能 要“有品牌”。插件开发人员几乎肯定已经在使用功能了 在核心包中,cli属于定义常用参数和 一个地方的选项允许插件开发人员重用这些标志来生成更多 内聚cli。如果cli很简单,可以在 yourpackage/cli.py或更复杂的包,如 yourpackage/cli/options.py。这些常见的选项需要容易找到 并且有很好的文档记录,以便插件开发人员知道要给什么变量 他们的子命令的功能,以及他们期望接收的对象。不要 忘记记录不明显的回调。
请记住,插件开发人员也可以访问父组的 ctx.obj,对于传递详细级别或 配置子命令周围的值。
下面是一些子命令可以重用的代码:
frommultiprocessingimportcpu_countimportclickjobs_opt=click.option('-j','--jobs',metavar='CORES',type=click.IntRange(min=1,max=cpu_count()),default=1,show_default=True,help="Process data across N cores.")
插件开发人员可以使用:
importclickimportparent_cli_package.cli.options@click.command()@parent_cli_package.cli.options.jobs_optdefsubcommand(jobs):"""I do something domain specific."""
安装
使用pip:
$ pip install click-plugins
来源:
$ git clone https://github.com/click-contrib/click-plugins.git $cd click-plugins $ python setup.py install
开发
$ git clone https://github.com/click-contrib/click-plugins.git $cd click-plugins $ pip install -e .\[dev\]$ pytest tests --cov click_plugins --cov-report term-missing
更改日志
见CHANGES.txt
许可证
见LICENSE.txt