Project Icon

typer

Python类型提示驱动的直观命令行界面框架

Typer是一个基于Python类型提示的命令行界面(CLI)应用程序开发库。它为开发者提供直观的编写体验和简洁的代码结构,支持从简单到复杂的CLI应用开发。Typer还包含一个命令行工具,可自动将Python脚本转换为CLI应用。作为FastAPI的兄弟项目,Typer为CLI开发带来了高效便捷的体验,使开发者能够轻松创建功能强大的命令行工具。

Typer

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

测试 发布 覆盖率 包版本


文档: https://typer.tiangolo.com

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


Typer是一个用于构建CLI应用程序的库,用户将喜欢使用,开发人员将喜欢创建。基于Python类型提示。

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

主要特点是:

  • 直观编写:出色的编辑器支持。所有地方都有补全。减少调试时间。设计易于使用和学习。减少阅读文档的时间。
  • 易于使用:对最终用户来说很容易使用。自动帮助,以及所有shell的自动补全。
  • 简洁:最小化代码重复。每个参数声明都具有多个功能。更少的bug。
  • 简单开始:最简单的示例只需要在您的应用程序中添加2行代码:1个导入,1个函数调用
  • 可扩展:根据需要增加复杂性,创建任意复杂的命令树和子命令组,带有选项和参数。
  • 运行脚本:Typer包含一个typer命令/程序,您可以用它来运行脚本,自动将它们转换为CLI,即使它们内部没有使用Typer。

CLI的FastAPI

TyperFastAPI的小兄弟,它是CLI的FastAPI。

安装

$ pip install typer
---> 100%
成功安装typer rich shellingham

示例

最简单的示例

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

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

运行它

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

// 运行您的应用程序
$ typer main.py run

// 您得到一个友好的错误,缺少NAME参数
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Try 'typer [PATH_OR_MODULE] run --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'.                          │
╰───────────────────────────────────────────────────╯


// 您可以免费获得--help
$ 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.       │
╰───────────────────────────────────────────────────╯

// 现在传入NAME参数
$ typer main.py run Camila

Hello Camila

// 成功了!🎉

这是最简单的用例,甚至内部没有使用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运行它:

// 运行您的应用程序
$ python main.py

// 您得到一个友好的错误,缺少NAME参数
Usage: main.py [OPTIONS] NAME
Try 'main.py --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'.                          │
╰───────────────────────────────────────────────────╯


// 您可以免费获得--help
$ python main.py --help

Usage: main.py [OPTIONS] NAME

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

// 现在传入NAME参数
$ python main.py Camila

Hello Camila

// 成功了!🎉

注意:您也可以用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]...
╭─ 选项 ─────────────────────────────────────────╮
│ --install-completion          为当前shell安装   │
│                               自动补全功能      │
│ --show-completion             显示当前shell的   │
│                               自动补全内容,    │
│                               以便复制或自定义  │
│                               安装              │
│ --help                        显示此消息并退出  │
╰───────────────────────────────────────────────────╯
╭─ 命令 ────────────────────────────────────────────╮
│ goodbye                                           │
│ hello                                             │
╰───────────────────────────────────────────────────╯

// 当你创建一个包时,你可以免费获得 ✨ 自动补全 ✨ 功能,通过 --install-completion 安装

// 你有两个子命令(两个函数):goodbye 和 hello

现在检查 hello 命令的帮助信息:

$ python main.py hello --help

 用法: main.py hello [选项] 名称

╭─ 参数 ─────────────────────────────────────────────╮
│ *    名称      文本  [默认: 无] [必填]             │
╰───────────────────────────────────────────────────╯
╭─ 选项 ─────────────────────────────────────────────╮
│ --help          显示此消息并退出                   │
╰───────────────────────────────────────────────────╯

现在检查 goodbye 命令的帮助信息:

$ python main.py goodbye --help

 用法: main.py goodbye [选项] 名称

╭─ 参数 ─────────────────────────────────────────────╮
│ *    名称      文本  [默认: 无] [必填]             │
╰───────────────────────────────────────────────────╯
╭─ 选项 ─────────────────────────────────────────────╮
│ --formal    --no-formal      [默认: no-formal]     │
│ --help                       显示此消息并退出      │
╰───────────────────────────────────────────────────╯

// 布尔选项自动生成 --formal 和 --no-formal 🎉

现在你可以尝试使用这个新的命令行应用:

// 使用 hello 命令

$ python main.py hello Camila

Hello Camila

// 使用 goodbye 命令

$ python main.py goodbye Camila

Bye Camila!

// 使用 --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]"

standard 额外依赖项是 richshellingham

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

许可证

本项目根据 MIT 许可证的条款进行许可。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号