Typer,构建出色的命令行界面。易于编码。基于Python类型提示。
项目描述
Typer,构建出色的命令行界面。易于编码。基于Python类型提示。
文档: https://typer.fastapi.org.cn
源代码: https://github.com/fastapi/typer
Typyer 是一个用于构建用户会喜欢使用且开发者会喜欢创建的 CLI 应用的库。它基于 Python 类型提示。
它也是一个用于运行脚本的命令行工具,可以自动将脚本转换为 CLI 应用。
其主要特性包括:
- 易于编写:优秀的编辑器支持。到处都是 补全。更少的调试时间。设计用于易于使用和学习。更少的阅读文档时间。
- 易于使用:对于最终用户来说很容易使用。自动帮助,以及所有外壳的自动补全。
- 简洁:最小化代码重复。每个参数声明提供多个功能。更少的错误。
- 简单开始:最简单的例子只需为您的应用程序添加 2 行代码:1 个导入,1 个函数调用。
- 扩展性:可以根据需要扩展复杂性,创建任意复杂的命令和子命令树,包括选项和参数。
- 运行脚本:Typer 包含一个
typer
命令/程序,您可以使用它来运行脚本,自动将其转换为 CLIs,即使它们没有内部使用 Typer。
CLI 的 FastAPI
Typyer 是 FastAPI 的兄弟,它是 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]"
标准额外依赖项是 rich
和 shellingham
。
注意:typer 命令仅包含在 typer
包中。
许可证
本项目采用 MIT 许可协议。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分布
构建分布
typer-0.12.5.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722 |
|
MD5 | 267bc81544aaa0145f96a3ac3a89f8c1 |
|
BLAKE2b-256 | c558a79003b91ac2c6890fc5d90145c662fd5771c6f11447f116b63300436bc9 |
typer-0.12.5-py3-none-any.whl 的哈希值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b |
|
MD5 | d3886eb623cb60238fad7e3369ffd9c2 |
|
BLAKE2b-256 | a82b886d13e742e514f704c33c4caa7df0f3b89e5a25ef8db02aa9ca3d9535d5 |