Click脚手架生成器Skill click-scaffolder

Click脚手架生成器是一个自动化工具,用于快速生成基于Python Click框架的命令行界面应用程序。该工具提供完整的项目结构、命令组管理、上下文传递、类型验证和丰富的终端输出功能,帮助开发者快速搭建符合最佳实践的CLI应用。关键词:Python CLI开发、Click框架、命令行工具生成、脚手架工具、自动化代码生成、Python项目模板、终端应用开发。

后端开发 0 次安装 0 次浏览 更新于 2/23/2026

name: click-scaffolder description: 使用装饰器、命令组、上下文和现代Python模式生成基于Click的Python CLI应用程序。创建具有适当项目结构的完整脚手架CLI。 allowed-tools: Read, Write, Edit, Bash, Glob, Grep

Click脚手架生成器

生成一个完整的Click CLI应用程序,包含Python、适当的项目结构和最佳实践。

能力

  • 生成基于Python的Click CLI项目
  • 使用装饰器创建命令组
  • 在命令之间设置上下文传递
  • 配置类型强制转换和验证
  • 实现自定义参数类型
  • 设置Poetry/pip项目结构

使用场景

在以下情况下调用此技能:

  • 使用Click引导一个新的CLI应用程序
  • 创建基于装饰器的Python CLI
  • 设置命令组和上下文
  • 配置丰富的终端输出

输入参数

参数 类型 是否必需 描述
projectName 字符串 CLI项目名称(kebab-case格式)
description 字符串 CLI的简短描述
commands 数组 要搭建的命令列表
usePoetry 布尔值 使用Poetry进行依赖管理(默认:true)
pythonVersion 字符串 Python版本要求(默认:“>=3.9”)

命令结构

{
  "commands": [
    {
      "name": "init",
      "description": "初始化新项目",
      "options": [
        { "name": "template", "type": "string", "help": "使用的模板" },
        { "name": "force", "is_flag": true, "help": "覆盖现有文件" }
      ],
      "arguments": [
        { "name": "directory", "required": true }
      ]
    }
  ],
  "groups": [
    {
      "name": "config",
      "description": "配置管理",
      "commands": ["get", "set", "list"]
    }
  ]
}

输出结构

<projectName>/
├── pyproject.toml
├── README.md
├── .gitignore
├── src/
│   └── <package_name>/
│       ├── __init__.py
│       ├── __main__.py        # 入口点
│       ├── cli.py             # 主Click设置
│       ├── commands/
│       │   ├── __init__.py
│       │   └── <command>.py   # 单个命令
│       ├── utils/
│       │   ├── __init__.py
│       │   ├── config.py      # 配置
│       │   └── console.py     # 丰富控制台输出
│       └── types/
│           ├── __init__.py
│           └── custom.py      # 自定义参数类型
└── tests/
    ├── __init__.py
    ├── conftest.py
    └── test_<command>.py

生成的代码模式

主CLI入口(src/<package>/cli.py)

import click
from rich.console import Console

from .commands import init, config

console = Console()

@click.group()
@click.version_option()
@click.option('--verbose', '-v', is_flag=True, help='启用详细输出')
@click.pass_context
def cli(ctx: click.Context, verbose: bool) -> None:
    """<description>"""
    ctx.ensure_object(dict)
    ctx.obj['verbose'] = verbose
    ctx.obj['console'] = console

cli.add_command(init.init)
cli.add_command(config.config)

def main() -> None:
    cli(obj={})

if __name__ == '__main__':
    main()

命令模板

import click
from rich.console import Console

@click.command()
@click.argument('directory', type=click.Path())
@click.option(
    '--template', '-t',
    type=click.Choice(['basic', 'advanced']),
    default='basic',
    help='使用的模板'
)
@click.option('--force', '-f', is_flag=True, help='覆盖现有文件')
@click.pass_context
def init(ctx: click.Context, directory: str, template: str, force: bool) -> None:
    """在DIRECTORY中初始化新项目。"""
    console: Console = ctx.obj['console']
    verbose: bool = ctx.obj['verbose']

    if verbose:
        console.print(f"[dim]使用模板: {template}[/dim]")

    console.print(f"[green]在{directory}中初始化项目[/green]")

命令组模板

import click

@click.group()
def config() -> None:
    """配置管理命令。"""
    pass

@config.command()
@click.argument('key')
@click.pass_context
def get(ctx: click.Context, key: str) -> None:
    """获取配置值。"""
    console = ctx.obj['console']
    console.print(f"获取{key}")

@config.command()
@click.argument('key')
@click.argument('value')
def set(key: str, value: str) -> None:
    """设置配置值。"""
    click.echo(f"设置{key} = {value}")

依赖项

[tool.poetry.dependencies]
python = ">=3.9"
click = "^8.1.0"
rich = "^13.0.0"

[tool.poetry.group.dev.dependencies]
pytest = "^8.0.0"
pytest-cov = "^4.0.0"
mypy = "^1.0.0"
ruff = "^0.1.0"

工作流程

  1. 验证输入 - 检查项目名称、命令结构
  2. 创建目录结构 - 设置文件夹和基础文件
  3. 生成pyproject.toml - 配置项目元数据
  4. 创建CLI入口点 - Click组设置
  5. 生成命令 - 单个命令文件
  6. 创建实用工具 - 控制台、配置助手
  7. 设置测试 - pytest夹具和命令测试
  8. 初始化git - 可选的git初始化

应用的最佳实践

  • 全程类型提示
  • 用于共享状态的Click上下文
  • 用于终端输出的Rich库
  • 用于组织的命令组
  • 自定义参数类型
  • 适当的错误处理

参考

目标流程

  • cli-application-bootstrap
  • cli-command-structure-design
  • argument-parser-setup