Typer开发(第一节):简单了解一下Typer
文章目录
- Typer开发(第一节):简单了解一下Typer
- 1. 简介
- 2. 安装
- 3. 在编辑器中使用Typer
- 4. 简单应用1
- 5. 简单应用2
- 6. 命令参数
- 7.其它
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推荐的扩展库也安装下来,如上图:我这个自动安装了Rich和commonmark。Rich 是一个 Python 库,用于将富文本(带有颜色和样式)写入终端,并用于显示高级内容,例如表格、markdown 和语法高亮代码。CommonMark是一个强定义、高度兼容的 Markdown 规范。
虽然安装简单,但是我们还是有必要介绍一下安装的过程中都干了什么:
Typer 在内部使用Click。那是唯一的依赖。因此从原则上来说pip install typer[all]
包含Click这个就够了。
但是它同时会选择安装一些附加的功能,来增强你的Typer 应用:
rich
: 格式化Typer显示,自动格式输出正确和错误,使输出具有颜色更加直观。shellingham
:检测当前 Python 可执行文件在哪个 shell 中运行。- 有了
shellingham
你就可以使用--install-completion
。 - 如果没有
shellingham
,您必须传递 shell 的名称才能完成安装,例如--install-completion bash
。
- 有了
注意:当你在安装typer使用的是
pip install typer[all]
那么rich
和shellingham将会自动安装
3. 在编辑器中使用Typer
Typer的设计易于使用且直观,以确保最佳的开发体验。很多编辑器都支持Typer开发的自动补全功能。
您很少需要返回文档。以下是您的编辑可能会如何帮助您:
-
在Visual Studio 代码中:
-
在PyCharm中:
你会完成所有的事情。这是目前其他 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. 命令参数
通过上面我们发现,对于命令行参数配置:
- 首先在创建命令函数的时候,要声明函数参数的类型,这对于python3.6+来说非常简单。
- 将参数类型(CLI 参数和CLI 选项)声明为函数参数,就可以实现cmd的参数传递。
- 不必学习新的语法、特定库的方法或类等。
例如:
对于一个int
:
total: int
对于bool
类型:
force: bool
文件、路径、枚举(选择)等也类似。后面我们会详细的介绍。
7.其它
Typer很强大,它还可以利用一些工具就可以创建子命令组、添加元数据、额外的验证等。这个后面会介绍。
它具有强大的编辑器支持,包括补全和类型检查。
当你的用户安装您的软件包或使用Typer CLI时,他们的终端(Bash、Zsh、Fish、PowerShell)将获得TAB
自动补全功能;
有关包含更多功能的更完整示例,后面会有详细的介绍,同时请参阅教程 - 用户指南。
这篇只是一个简单的介绍,后面会持续更新。