当前位置: 首页 > 后端技术 > Python

types-paddle:为Paddle添加Tensor类型标注功能

时间:2023-03-26 12:48:46 Python

Paddle没有Tensor类,导致在IDE中写代码时无法提供智能提示。我提供一个解决方案。思路是修改安装的Paddle包的paddle/tensor/tensor.py文件,添加未实现的Tensor类。在paddle包中添加tensor.pyi文件,实现智能代码提示。类型注解的三种解决方案python中给代码提供类型注解的三种方式,让IDE实现智能提示:直接在代码中写类型注解defadd(x:int,y:int)->int:returnx+y这种方式也是python3.7+最推荐的方式。原代码中没有类型注解,所以在包中添加了一个pyi文件。.pyi文件是什么?可以理解为一个python接口文件,它提供了一个python模块的接口定义信息。#foo.pydefadd(x,y):returnx+y#foo.pyidefadd(x:int,y:int)->int:...在这种情况下,pyi文件名必须与py文件名,这样浏览器加载原始文件类型信息时,直接从pyi文件加载。其中,PyGithub就是使用这种方式来提供类型注解。作者不想在包中添加pyi存根文件。如果每个文件都需要添加一个pyi文件,代码文件的数量会直接翻倍,增加维护难度,所以pyi文件可以通过第三方包发布。详细原理请阅读PEP561–分发和打包类型信息为什么选择这个解决方案?我遇到的问题是我最初的做法是第三种方法,但是我发现如果我使用第三方包发布,我的包中所有paddle的类型提示都会被去掉:也就是说,我会添加所有paddlepyi存根文件的模块。这是很多工作,很多模块都在改变。无法及时获取最新变化,容易导致版本不兼容,接口不兼容。解决方案所以,我又回到了第二种方法,只是使用types-paddle修改paddle包来支持类型注解。pyi是怎么生成的?核心模块所属的pyi文件是如何生成的?毕竟这代表了所有Tensor类的所有属性:根据runtimeTensor生成,伪代码如下:importpaddletensor=paddle.randn([3,4])members=get_members(tensor)gen_stub_file_by_tensor_members(members)即可详细可以看:gen_tensor_stub.py包的未来,相信paddle以后肯定会支持类型注解的。毕竟原来的paddle/tensor/tensor.py文件里写了TODO。只是这个工具可以在功能还没有完善的时候提升大家的编码体验。我希望这个工具可以让写板球对每个人来说越来越有趣。pythonPEP561–DistributingandPackagingTypeInformation中pythoninstalltypehintspackage中stubfilemissingimports的参考介绍