跳转到主要内容

Typer,构建出色的命令行界面。易于编码。基于Python类型提示。

项目描述

Typer

Typer,构建出色的命令行界面。易于编码。基于Python类型提示。

Test Publish Coverage Package version


文档: https://typer.fastapi.org.cn

源代码: https://github.com/fastapi/typer


Typyer 是一个用于构建用户会喜欢使用且开发者会喜欢创建的 CLI 应用的库。它基于 Python 类型提示。

它也是一个用于运行脚本的命令行工具,可以自动将脚本转换为 CLI 应用。

其主要特性包括:

  • 易于编写:优秀的编辑器支持。到处都是 补全。更少的调试时间。设计用于易于使用和学习。更少的阅读文档时间。
  • 易于使用:对于最终用户来说很容易使用。自动帮助,以及所有外壳的自动补全。
  • 简洁:最小化代码重复。每个参数声明提供多个功能。更少的错误。
  • 简单开始:最简单的例子只需为您的应用程序添加 2 行代码:1 个导入,1 个函数调用
  • 扩展性:可以根据需要扩展复杂性,创建任意复杂的命令和子命令树,包括选项和参数。
  • 运行脚本:Typer 包含一个 typer 命令/程序,您可以使用它来运行脚本,自动将其转换为 CLIs,即使它们没有内部使用 Typer。

CLI 的 FastAPI

TypyerFastAPI 的兄弟,它是 CLI 的 FastAPI。

安装

创建并激活一个 虚拟环境,然后安装 Typyer

$ pip install typer
---> 100%
Successfully installed typer rich shellingham

示例

绝对最小化

  • 创建一个包含以下内容的 main.py 文件
def main(name: str):
    print(f"Hello {name}")

此脚本甚至没有内部使用 Typer。但您可以使用 typer 命令将其作为 CLI 应用程序运行。

运行它

使用 typer 命令运行您的应用程序

// Run your application
$ typer main.py run

// You get a nice error, you are missing NAME
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Try 'typer [PATH_OR_MODULE] run --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'.                          │
╰───────────────────────────────────────────────────╯


// You get a --help for free
$ typer main.py run --help

Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME

Run the provided Typer app.

╭─ Arguments ───────────────────────────────────────╮
│ *    name      TEXT  [default: None] [required]   |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help          Show this message and exit.       │
╰───────────────────────────────────────────────────╯

// Now pass the NAME argument
$ typer main.py run Camila

Hello Camila

// It works! 🎉

这是最简单的用例,甚至没有内部使用 Typer,但它对于简单的脚本已经非常有用了。

注意:自动补全在您创建一个 Python 软件包并用 --install-completion 运行,或者使用 typer 命令时工作。

在您的代码中使用 Typer

现在让我们开始在您的代码中使用 Typer,更新 main.py

import typer


def main(name: str):
    print(f"Hello {name}")


if __name__ == "__main__":
    typer.run(main)

现在您可以直接用 Python 运行它

// Run your application
$ python main.py

// You get a nice error, you are missing NAME
Usage: main.py [OPTIONS] NAME
Try 'main.py --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'.                          │
╰───────────────────────────────────────────────────╯


// You get a --help for free
$ python main.py --help

Usage: main.py [OPTIONS] NAME

╭─ Arguments ───────────────────────────────────────╮
│ *    name      TEXT  [default: None] [required]   |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help          Show this message and exit.       │
╰───────────────────────────────────────────────────╯

// Now pass the NAME argument
$ python main.py Camila

Hello Camila

// It works! 🎉

注意:您也可以使用 typer 命令调用此相同的脚本,但您不需要这样做。

示例升级

这是可能的最简单示例。

现在让我们看一个稍微复杂一点的。

带有两个子命令的示例

修改 main.py 文件。

创建一个 typer.Typer() 应用程序,并创建带有其参数的两个子命令。

import typer

app = typer.Typer()


@app.command()
def hello(name: str):
    print(f"Hello {name}")


@app.command()
def goodbye(name: str, formal: bool = False):
    if formal:
        print(f"Goodbye Ms. {name}. Have a good day.")
    else:
        print(f"Bye {name}!")


if __name__ == "__main__":
    app()

然后它将

  • 显式创建一个 typer.Typer 应用程序。
    • 之前的 typer.run 实际上为您隐式创建了一个。
  • 使用 @app.command() 添加两个子命令。
  • 执行 app() 本身,就像它是一个函数(而不是 typer.run)。

运行升级后的示例

查看新帮助信息

$ python main.py --help

 Usage: main.py [OPTIONS] COMMAND [ARGS]...

╭─ Options ─────────────────────────────────────────╮
│ --install-completion          Install completion  │
│                               for the current     │
│                               shell.              │
│ --show-completion             Show completion for │
│                               the current shell,  │
│                               to copy it or       │
│                               customize the       │
│                               installation.       │
│ --help                        Show this message   │
│                               and exit.           │
╰───────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────╮
│ goodbye                                           │
│ hello                                             │
╰───────────────────────────────────────────────────╯

// When you create a package you get ✨ auto-completion ✨ for free, installed with --install-completion

// You have 2 subcommands (the 2 functions): goodbye and hello

现在查看 hello 命令的帮助信息

$ python main.py hello --help

 Usage: main.py hello [OPTIONS] NAME

╭─ Arguments ───────────────────────────────────────╮
│ *    name      TEXT  [default: None] [required]   │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help          Show this message and exit.       │
╰───────────────────────────────────────────────────╯

现在查看 goodbye 命令的帮助信息

$ python main.py goodbye --help

 Usage: main.py goodbye [OPTIONS] NAME

╭─ Arguments ───────────────────────────────────────╮
│ *    name      TEXT  [default: None] [required]   │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --formal    --no-formal      [default: no-formal] │
│ --help                       Show this message    │
│                              and exit.            │
╰───────────────────────────────────────────────────╯

// Automatic --formal and --no-formal for the bool option 🎉

现在您可以尝试新的命令行应用程序

// Use it with the hello command

$ python main.py hello Camila

Hello Camila

// And with the goodbye command

$ python main.py goodbye Camila

Bye Camila!

// And with --formal

$ python main.py goodbye --formal Camila

Goodbye Ms. Camila. Have a good day.

总结

总的来说,您只需 一次 声明参数的类型(CLI 参数CLI 选项),作为函数参数。

您可以使用标准现代 Python 类型来这样做。

您不需要学习新的语法,特定库的方法或类等。

只是标准的 Python

例如,对于 int

total: int

或对于 bool 标志

force: bool

对于 文件路径枚举(选择)等也是如此。还有工具可以创建 子命令组、添加元数据、额外的 验证 等。

您将获得:优秀的编辑器支持,包括 补全类型检查

您的用户将获得:自动的 --help,以及安装您的软件包或使用 typer 命令时在他们的终端(Bash,Zsh,Fish,PowerShell)中的自动完成。

要查看包含更多功能的完整示例,请参阅 教程 - 用户指南

依赖项

typer 建立在巨人的肩膀上。它唯一的内部必需依赖项是 Click

默认情况下,它还附带额外的标准依赖项

  • rich:用于自动显示格式化的错误。
  • shellingham:用于在安装完成时自动检测当前shell。
    • 使用 shellingham,您只需使用 --install-completion
    • 如果没有 shellingham,您必须传递要为其实施完成的shell名称,例如 --install-completion bash

typer-slim

如果您不需要额外的标准可选依赖项,请安装 typer-slim

当您使用以下方式安装时

pip install typer

...它包含与以下相同的代码和依赖项

pip install "typer-slim[standard]"

标准额外依赖项是 richshellingham

注意:typer 命令仅包含在 typer 包中。

许可证

本项目采用 MIT 许可协议。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分布

typer-0.12.5.tar.gz (99.0 kB 查看散列)

上传时间

构建分布

typer-0.12.5-py3-none-any.whl (47.3 kB 查看散列)

上传时间 Python 3

支持者