FastAPI的小兄弟,开发命令行工具更给力!

Posted Python猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastAPI的小兄弟,开发命令行工具更给力!相关的知识,希望对你有一定的参考价值。

△点击上方“Python猫”关注 ,回复“1”领取电子书

关注我公众号的同学都知道,我非常喜欢FastAPI这个web框架。它在易用性上面做到了极致,帮助开发者减少了很多不必要的工作。

FastAPI的开发组织叫做tiangolo,他家除了FastAPI外,还有另一个项目也非常好用,叫做typer

三年前,我写过一篇文章一日一技:快速实现Python 命令行参数介绍另一个命令行工具fire. 而typer做得比fire还要好。

首先使用pip来安装它:

python3 -m pip install typer

函数参数等于命令行参数

我们首先来看看typer怎么使用。创建一个example_1.py文件,写入如下代码。

import typer


def main(name: str, salary: int):
    print(f'name月薪salary元')


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

直接运行,Python会报错:

使用参数--help可以查看这个脚本的命令行参数:

于是我们根据这里的提示,输入正确的参数,从而正常运行程序:

子命令与自动补全更好用

假设我们有一个神经网络的程序,其中的入口函数代码如下:

def train_data(train_folder: str, test_folder: str, rate: float = 0.8):
    """
    训练人脸检测模型
    """
    print(f'使用文件夹train_folder中的数据进行训练')
    print(f'使用test_folder中的数据用来验证训练效果,确保准确率>rate')
    return True

def predict(folder: str):
    """
    使用训练好的模型预测
    """
    print(f'对文件夹folder中的数据进行预测。')

显然,这个程序可以用来训练数据,也可以用来预测数据,所以有两种不同的命令,每一种命令有不同的参数。

这种情况下,使用typer非常方便,只需要加两个装饰器就可以了:

运行效果如下图所示:

输入具体的子命令,还可以查看每个子命令的参数:

因此,我可以使用两个不同的子命令来运行程序:

你以为这样就完了?我们再安装它的一个辅助工具typer-cli,还可以做更多事情:

python3 -m pip install typer-cli
typer --install-completion

有了这个东西,我们运行程序可以这样写:

typer example_2.py run 子命令 参数1 参数2 --可选参数1 可选参数1的值

例如:

并且,typer可以帮我们可以实现自动补全:

输入typer example_2.py run 然后按下Tab键,自动告诉你可以输入哪些子命令,如下图所示:

除此之外,如果你的命令行程序只有一个命令,那么你甚至只需要写一个函数,连typer都不需要导入,就可以使用typer来运行:

自动生成文档也简单

我们知道,FastAPI自动生成接口文档的功能非常好用。typer作为它的兄弟,也继承了这个高级功能。我们来看看:

import typer

app = typer.Typer(help="人脸检测模型")


@app.command()
def train_data(train_folder: str, test_folder: str, rate: float = 0.8):
    """
    训练人脸检测模型
    """
    print(f'使用文件夹train_folder中的数据进行训练')
    print(f'使用test_folder中的数据用来验证训练效果,确保准确率>rate')
    return True

@app.command()
def predict(folder: str):
    """
    使用训练好的模型预测
    """
    print(f'对文件夹folder中的数据进行预测。')

运行命令:

typer main.py utils docs --name "python3 main.py" --output readme.md

自动在当前文件夹生成一个readme.md文件。我们使用任何能够渲染Markdown的软件打开这个文档,可以看到文档内容如下:

这样一来,我们不需要额外花心思去维护文档,只需要在修改完代码、增删新的命令或者参数以后,运行这个命令,就可以把文档自动更新。

Python猫技术交流群开放啦!群里既有国内一二线大厂在职员工,也有国内外高校在读学生,既有十多年码龄的编程老鸟,也有中小学刚刚入门的新人,学习氛围良好!想入群的同学,请在公号内回复『交流群』,获取猫哥的微信(谢绝广告党,非诚勿扰!)~

还不过瘾?试试它们

终于,Python 标准库要做“瘦身手术”了!

Python猫 2021 文章小结,翻译竟比原创多!

Python 图形界面框架 PyQt5 使用指南!

通过 for 循环,比较 Python 与 Ruby 编程思想的差别

与 Python 之父聊天:更快的 Python!

玩转 Python 命令行:4 大主流工具库的对比

如果你觉得本文有帮助

请慷慨分享点赞,感谢啦

以上是关于FastAPI的小兄弟,开发命令行工具更给力!的主要内容,如果未能解决你的问题,请参考以下文章

高性能的机器学习让边缘计算更给力-iMX8M Plus为边缘计算赋能

jq:给力的命令行 JSON 处理工具

更新 | 夜猫影视iPad与iPhone版的“空投

26.FastAPI安全性

[python]fastapi安装后hello world

API接口开发其实特简单,Python FastApi Web 框架教程来了