mcpField
T
typer

typer

github.com/jamie-bitflight开发39 次安装
代码仓库

关于 typer

用于使用 Typer 构建 Python 命令行应用的参考技能。它按任务引导开发者查阅命令、参数、子命令、测试和高级 CLI 行为的专题资料。

主要功能

  1. 01创建应用并注册命令
  2. 02定义和验证命令行参数
  3. 03组合嵌套子命令
  4. 04使用 CliRunner 测试应用
  5. 05添加输出、进度和自动补全

适用场景

  1. 01构建新的 Typer 命令行应用
  2. 02添加选项和带类型的参数
  3. 03将命令组织为子应用
  4. 04测试 CLI 输出和提示输入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jamie-bitflight/claude_skills --skill typer

安装后在 Claude Code 中输入/typer确认已加载。

详细介绍

Typer 知识

通过为 Python 函数添加注解,使用 Typer 构建 CLI 应用。Typer 会将类型注解转换为经过验证的 CLI 参数,并自动生成帮助文本。

Typer 版本: !python -c "import typer; print(typer.__version__)" 2>/dev/null || echo "not found in PATH"

范围

共享规则(架构、类型、测试、CLI 规则)请参阅 python-engineering:standards-for-python-development。

触发条件:用户询问如何使用 Typer 构建 CLI、定义 CLI 参数或选项、组合子命令、测试 CLI 应用,或使用提示词、枚举、进度条、自动补全等 Typer 功能时,激活本知识。

涵盖内容:

  • 使用 typer.Typer() 和 typer.run() 创建应用
  • CLI 参数(typer.Argument())和选项(typer.Option())
  • 参数类型——枚举、路径、数字、日期、UUID、自定义类型
  • 使用 app.add_typer() 组合子命令
  • 使用 typer.testing.CliRunner 进行测试
  • 输出、颜色、进度条、回调和自动补全

不涵盖:

  • Typer 未公开的 Click 内部实现
  • 超出 typer.echo / typer.style 范围的 Rich 库
  • FastAPI 或其他 Web 框架

工作流

flowchart TD
    Start([Task received]) --> Q1{Task type?}
    Q1 -->|Create app or add commands| AppCmd[Load reference — app-and-commands.md]
    Q1 -->|Define arguments or options| Params[Load reference — parameters.md]
    Q1 -->|Use enum, path, date, UUID| Types[Load reference — parameter-types.md]
    Q1 -->|Add subcommands or sub-apps| Sub[Load reference — subcommands.md]
    Q1 -->|Write tests| Test[Load reference — testing.md]
    Q1 -->|Callbacks, output, progress, packaging| Adv[Load reference — advanced-patterns.md]

参考文件

应用和命令

创建 Typer 应用、使用 @app.command() 注册命令、配置多命令应用,以及控制命令名称和帮助文本的核心模式。 创建新应用、添加命令或配置应用级行为时加载。

../python3-cli/references/typer-app-and-commands.md

参数

CLI 参数和 CLI 选项的完整参考——typer.Argument()、typer.Option()、默认值、必需与可选参数、帮助文本、提示词、密码输入、选项名称、环境变量绑定、多个值、布尔标志和版本选项。 定义任何 CLI 参数或控制输入接收方式时加载。

../python3-cli/references/typer-parameters.md

参数类型

Typer 可识别的类型注解——str、int、float、bool、enum.Enum、Literal、pathlib.Path、文件对象、datetime、UUID 和自定义 Click ParamType 子类。 需要将参数值限制在某个集合内、验证路径、解析日期或实现自定义类型时加载。

../python3-cli/references/typer-parameter-types.md

子命令

使用 app.add_typer() 组合多个 typer.Typer() 实例,以创建嵌套命令层级。涵盖单文件和多文件模式、命名、帮助文本以及回调覆盖。 添加子应用、创建命令组或构建类似 git 的多级命令树时加载。

../python3-cli/references/typer-subcommands.md

测试

使用 pytest 和 typer.testing.CliRunner 测试 Typer 应用。涵盖在测试中调用应用、检查退出代码和输出、模拟提示输入,以及测试裸函数。 为任何 Typer CLI 编写测试时加载。

../python3-cli/references/typer-testing.md

高级模式

上下文(typer.Context)、急切回调、typer.echo / typer.secho / typer.style、进度条、typer.Exit / typer.Abort、typer.confirm、自动补全配置、使用 pyproject.toml 打包,以及 typer.launch。 实现版本标志、彩色输出、进度报告、Shell 补全,或将 CLI 打包为可分发工具时加载。

../python3-cli/references/typer-advanced-patterns.md

快速参考

import typer
from typing import Annotated

app = typer.Typer()


@app.command()
def main(
    name: str,  # required argument
    count: Annotated[int, typer.Option()] = 1,  # optional option
    formal: bool = False,  # --formal / --no-formal
):
    """Greet NAME."""
    for _ in range(count):
        greeting = f"Good day, {name}." if formal else f"Hello {name}"
        typer.echo(greeting)


if __name__ == "__main__":
    app()
$ python main.py Alice --count 2 --formal
Good day, Alice.
Good day, Alice.

评论

支持 Markdown