基于python的CLI应用程序开发(第一节):简单了解一下Typer

Typer开发(第一节):简单了解一下Typer

1. 简介

Typer 是一个python用于构建 CLI 应用程序的库,简单说就是开发控制台程序,开发简单。要求Python 3.6+, 它唯一的内部依赖是Click

主要特点是:

  • 编写直观:强大的编辑器支持。处处圆满。更少的调试时间。旨在易于使用和学习。阅读文档的时间更少。
  • 易于使用:最终用户易于使用。所有 shell 的自动帮助和自动完成。
  • 简短:最小化代码重复。每个参数声明的多个功能。更少的错误。
  • 从简单开始:最简单的示例仅向您的应用程序添加 2 行代码:1 次导入,1 次函数调用。
  • 强大的扩展能力:随心所欲地增加复杂性,创建任意复杂的命令树和子命令组,带有选项和参数。
  • Typer CLI工具Typer CLI是一种运行Typer脚本的工具,可在您的终端中为您提供自动补全。

Typer文档链接:https://typer.tiangolo.com/

GitHub源码链接:https://github.com/tiangolo/typer

2. 安装

typer安装非常简单,只需要在命令行执行pip命令就可以,(对于需要安装虚拟环境的用户请自行解决)

$ pip install "typer[all]"
---> 100%
Successfully installed typer

在win下安装如下:
在这里插入图片描述

注意:使用pip install "typer[all]"命令安装,会自动将typer推荐的扩展库也安装下来,如上图:

我这个自动安装了Richcommonmark。Rich 是一个 Python 库,用于将文本(带有颜色和样式)写入终端,并用于显示高级内容,例如表格、markdown 和语法高亮代码。CommonMark是一个强定义、高度兼容的 Markdown 规范。

虽然安装简单,但是我们还是有必要介绍一下安装的过程中都干了什么:

Typer 在内部使用Click。那是唯一的依赖。因此从原则上来说pip install typer[all]包含Click这个就够了。

但是它同时会选择安装一些附加的功能,来增强你的Typer 应用:

  1. rich: 格式化Typer显示,自动格式输出正确和错误,使输出具有颜色更加直观。
  2. shellingham:检测当前 Python 可执行文件在哪个 shell 中运行。
    • 有了shellingham你就可以使用--install-completion
    • 如果没有shellingham,您必须传递 shell 的名称才能完成安装,例如--install-completion bash

注意:当你在安装typer使用的是pip install typer[all] 那么rich和shellingham将会自动安装

3. 在编辑器中使用Typer

Typer的设计易于使用且直观,以确保最佳的开发体验。很多编辑器都支持Typer开发的自动补全功能。

您很少需要返回文档。以下是您的编辑可能会如何帮助您:

你会完成所有的事情。这是目前其他 CLI 库无法提供的。不再猜测那个变量是什么类型,如果它可以是None等等。

4. 简单应用1

下面我们就在编辑器中使用Typer:

创建一个文件main.py

# main.py
import typer

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


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

命令行运行python main.py --help:

命令行运行python main.py XiaoMing:
在这里插入图片描述

5. 简单应用2

上面是最简单的例子。

现在让我们看一个稍微复杂一点的。带有两个子命令的示例:

修改文件main.py,创建一个typer.Typer()应用程序,并创建两个带有参数的子命令。

# main.py

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:
在这里插入图片描述

命令行运行python main.py hello --help:
在这里插入图片描述

命令行运行python main.py goodbye --help:
在这里插入图片描述

命令行运行python main.py hello XiaoMing:

命令行运行python main.py goodbye XiaoMing:

命令行运行python main.py goodbye --formal Camila:
在这里插入图片描述

6. 命令参数

通过上面我们发现,对于命令行参数配置:

  1. 首先在创建命令函数的时候,要声明函数参数的类型,这对于python3.6+来说非常简单。
  2. 将参数类型(CLI 参数CLI 选项)声明为函数参数,就可以实现cmd的参数传递。
  3. 不必学习新的语法、特定库的方法或类等。

例如:

对于一个int

total: int

对于bool类型:

force: bool

文件路径枚举(选择)等也类似。后面我们会详细的介绍。

7.其它

Typer很强大,它还可以利用一些工具就可以创建子命令组、添加元数据、额外的验证等。这个后面会介绍。

它具有强大的编辑器支持,包括补全和类型检查。

当你的用户安装您的软件包或使用Typer CLI时,他们的终端(Bash、Zsh、Fish、PowerShell)将获得TAB自动补全功能;

有关包含更多功能的更完整示例,后面会有详细的介绍,同时请参阅教程 - 用户指南

这篇只是一个简单的介绍,后面会持续更新。

猜你喜欢

转载自blog.csdn.net/Zhichao_Zhang/article/details/128084765