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

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

关注我公众号的同学都知道,我非常喜欢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会报错:


1.png


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


2.png


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


3.png



子命令与自动补全更好用


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


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非常方便,只需要加两个装饰器就可以了

4.png


运行效果如下图所示:


5.png


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


6.png


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


7.png



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


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


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


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


例如:


8.png


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


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


9.png


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


10.png


自动生成文档也简单


我们知道,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的软件打开这个文档,可以看到文档内容如下:


11.png


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


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
存储 IDE API
最佳实践:通过 FastAPI APIRouter 提升开发效率
FastAPI 是一个现代的、高性能的 Python Web 框架,它提供了 APIRouter 来帮助组织和管理路由。APIRouter 是一个可用于组织和分组路由的类,使得代码结构更加清晰和可维护。本文将介绍 FastAPI APIRouter 的用法,包括实践案例以及在 IDE 编辑器中的运行步骤。
|
7月前
|
JSON API 网络架构
FastAPI+React全栈开发13 FastAPI概述
FastAPI是一个高性能的Python Web框架,以其快速编码和代码清洁性著称,减少了开发者错误。它基于Starlette(一个ASGI框架)和Pydantic(用于数据验证)。Starlette提供了WebSocket支持、中间件等功能,而Pydantic利用Python类型提示在运行时进行数据验证。类型提示允许在编译时检查变量类型,提高开发效率。FastAPI通过Pydantic创建数据模型,确保数据结构的正确性。FastAPI还支持异步I/O,利用Python 3.6+的async/await关键词和ASGI,提高性能。此外,
259 0
|
NoSQL Redis 数据库
FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发
FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发
|
测试技术 Python
FastAPI 学习之路(三十九)对开发接口进行测试
FastAPI 学习之路(三十九)对开发接口进行测试
FastAPI 学习之路(三十九)对开发接口进行测试
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论
FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论
FastAPI(七十七)实战开发《在线课程学习系统》接口开发-- 课程编辑和查看评论
FastAPI(七十七)实战开发《在线课程学习系统》接口开发-- 课程编辑和查看评论