typer

typer

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

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

TyperCLI开发Python命令行界面FastAPIGithub开源项目
<p align="center"> <a href="https://typer.tiangolo.com"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg#only-light" alt="Typer"></a> </p> <p align="center"> <em>Typer,构建优秀的命令行界面。易于编码。基于Python类型提示。</em> </p> <p align="center"> <a href="https://github.com/fastapi/typer/actions?query=workflow%3ATest" target="_blank"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/885f4f7b-a24f-4785-867b-2182dc7cfc0c.svg" alt="测试"> </a> <a href="https://github.com/fastapi/typer/actions?query=workflow%3APublish" target="_blank"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/96507f3d-d500-4744-bd0c-a1366d1eb60b.svg" alt="发布"> </a> <a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/typer" target="_blank"> <img src="https://coverage-badge.samuelcolvin.workers.dev/fastapi/typer.svg" alt="覆盖率"> <a href="https://pypi.org/project/typer" target="_blank"> <img src="https://img.shields.io/pypi/v/typer?color=%2334D058&label=pypi%20package" alt="包版本"> </a> </p>

文档: <a href="https://typer.tiangolo.com" target="_blank">https://typer.tiangolo.com</a>

源代码: <a href="https://github.com/fastapi/typer" target="_blank">https://github.com/fastapi/typer</a>


Typer是一个用于构建<abbr title="命令行界面,从终端执行的程序">CLI</abbr>应用程序的库,用户将喜欢使用,开发人员将喜欢创建。基于Python类型提示。

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

主要特点是:

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

CLI的FastAPI

Typer<a href="https://fastapi.tiangolo.com" class="external-link" target="_blank">FastAPI</a>的小兄弟,它是CLI的FastAPI。

安装

<div class="termy">
$ pip install typer ---> 100% 成功安装typer rich shellingham
</div>

示例

最简单的示例

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

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

运行它

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

<div class="termy">
// 运行您的应用程序 $ 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 // 成功了!🎉
</div>

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

<div class="termy">
// 运行您的应用程序 $ 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 // 成功了!🎉
</div>

注意:您也可以用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)。

运行升级后的示例

查看新的帮助:

<div class="termy">
$ python main.py --help Usage: main.py [OPTIONS] COMMAND [ARGS]... ╭─ 选项 ─────────────────────────────────────────╮ │ --install-completion 为当前shell安装 │ │ 自动补全功能 │ │ --show-completion 显示当前shell的 │ │ 自动补全内容, │ │ 以便复制或自定义 │ │ 安装 │ │ --help 显示此消息并退出 │ ╰───────────────────────────────────────────────────╯ ╭─ 命令 ────────────────────────────────────────────╮ │ goodbye │ │ hello │ ╰───────────────────────────────────────────────────╯ // 当你创建一个包时,你可以免费获得 ✨ 自动补全 ✨ 功能,通过 --install-completion 安装 // 你有两个子命令(两个函数):goodbye 和 hello

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

<div class="termy">
$ python main.py hello --help 用法: main.py hello [选项] 名称 ╭─ 参数 ─────────────────────────────────────────────╮ │ * 名称 文本 [默认: 无] [必填] │ ╰───────────────────────────────────────────────────╯ ╭─ 选项 ─────────────────────────────────────────────╮ │ --help 显示此消息并退出 │ ╰───────────────────────────────────────────────────╯
</div>

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

<div class="termy">
$ python main.py goodbye --help 用法: main.py goodbye [选项] 名称 ╭─ 参数 ─────────────────────────────────────────────╮ │ * 名称 文本 [默认: 无] [必填] │ ╰───────────────────────────────────────────────────╯ ╭─ 选项 ─────────────────────────────────────────────╮ │ --formal --no-formal [默认: no-formal] │ │ --help 显示此消息并退出 │ ╰───────────────────────────────────────────────────╯ // 布尔选项自动生成 --formal 和 --no-formal 🎉
</div>

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

<div class="termy">
// 使用 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.
</div>

回顾

总之,你只需要通过函数参数声明一次参数类型(CLI 参数和 CLI 选项)。

你可以使用标准的现代 Python 类型来实现这一点。

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

只需使用标准的 Python

例如,对于 int 类型:

total: int

或者对于 bool 标志:

force: bool

类似地,还可以用于 文件路径枚举(选项)等。还有工具可以创建 子命令组,添加元数据,额外的 验证 等。

你获得:出色的编辑器支持,包括全面的 自动补全类型检查

你的用户获得:自动生成的 --help,当他们安装你的包或使用 typer 命令时,可在终端(Bash、Zsh、Fish、PowerShell)中使用 自动补全

有关更完整的示例,包括更多功能,请参阅 <a href="https://typer.tiangolo.com/tutorial/">教程 - 用户指南</a>

依赖项

Typer 站在巨人的肩膀上。它唯一的内部必需依赖是 <a href="https://click.palletsprojects.com/" class="external-link" target="_blank">Click</a>

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

  • <a href="https://rich.readthedocs.io/en/stable/index.html" class="external-link" target="_blank"><code>rich</code></a>:用于自动显示格式良好的错误。
  • <a href="https://github.com/sarugaku/shellingham" class="external-link" target="_blank"><code>shellingham</code></a>:用于在安装自动补全时自动检测当前 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 许可证的条款进行许可。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多