Google出品的Python代码静态类型分析器:Pytype
Pytype检查并推断Python代码的类型——不需要类型注解。Pytype可以:
- 使用lint检查纯Python代码,标记常见错误,如属性名拼写错误、不正确的函数调用,等等更多,它甚至可以跨文件。
- 强化用户提供的类型注解。虽然注解对于pytype是可选的,但是当注解存在时,它会检查并应用们。
- 在独立文件(“pyi文件”)中生成类型注解,可以使用自身提供的merge-pyi工具将其合并回Python源代码中。
Pytype是一个静态分析器,这意味着它不执行它所检查的代码。
谷歌的数千个项目都依赖pytype来保持其Python代码类型良好和无错误。
更多信息,请查看用户指南或FAQ。
快速入门
要快速开始对一个文件或目录进行类型检查,你只需运行以下命令,用你的输入替换file_or_directory :
要在整个包上设置pytype,请将以下内容添加到包上级目录中的setup.cfg文件中,用包名替换package_name:
现在,你可以运行无参数命令pytype来对包进行类型检查。将pytype添加到你的自动化测试中也很容易;参见在Travis上运行pytype的GitHub项目的示例。
最后,pytype会生成含有推断出的类型信息的文件,默认情况下位于.pytype/pyi中。你可以使用此信息对相应的源文件进行类型注解,用文件的导入路径替换module.py:
需求
你需要一个Python 2.7或3.5+解释器来运行pytype,还需要在$PATH中设置一个与所分析代码的Python版本相同的Python解释器。
平台支持:
- Pytype目前是在Linux上开发和测试的,Linux是主要支持的平台。
- 在MacOSX上安装需要OSX 10.7或更高版本,以及Xcode v8或更高版本。
- 目前不支持windows。
安装
Pytype可以通过pip来安装。注意,安装过程需要使用wheel和setuptools。(如果你在virtualenv中工作,这两个包应该已经存在。)
或者从GitHub上的源码进行安装 :
代替使用--recurse-submodules参数进行安装, 你也可以在pytype目录中使用以下命令来安装:
用法
常见选项:
- -V,--Python-Version:目标代码的Python版本(major.minor)。默认为3.6。
- -o,--output:所有pytype输出的保存目录,包括生成的.pyi文件。默认为.pytype。
- -d,--disable。以逗号分隔的要忽略的错误名称列表。pytype错误名称的详细说明在此文档中。默认为空。
要获得选项的完整列表,请运行pytype --help。
除了上面所述,你还可以通过设置$TYPESHED_HOME来直接运行pytype命令使用定制的typeshed安装替代它自己的绑定副本。
配置文件
为了方便起见,你可以将你的pytype配置保存在一个文件中。配置文件是一个带有[pytype]部分的INI-样式的文件;如果没有提供显式配置文件,pytype会从当前目录向上遍历查找第一个setup.cfg文件中的[pytype]部分。
我们从生成一个配置文件示例开始:
现在我们根据本地设置来自定义文件,只保留需要的部分。目录可能是配置文件的相对路径,如果你想将配置文件作为项目的一部分进行检查,这是非常有用的。
例如,假设你有以下目录结构,并且想要分析包 ~/repo1/foo,它依赖于包 ~/repo2/bar:
下面是设置好的配置文件,它将指示pytype将~/repo1/foo作为Python 3.6代码进行类型检查,在~/repo1和~/repo2中查找包,并忽略属性错误。注意,到包的路径不包括包本身。
我们可能会发现需要通过运行pytype的损坏依赖项检查器来将~/repo2添加到pythonpath中:
子工具
除了pytype本身外,Pytype还附带了三个脚本:
- merge-pyi, 用于将.pyi文件中的类型信息合并到Python文件中.
- pytd, 一个 .pyi 文件解析器.
- pytype-single, pytype开发人员的调试工具,用来对单个Python文件进行分析,并假定已经为该Python文件的所有依赖项生成了.pyi文件。
产品路线图
•支持Windows系统
许可证
Google出品的Python代码静态类型分析器:Pytype相关推荐
- Google 内部的 Python 代码风格指南(译)
微信搜索逆锋起笔关注后回复编程pdf 领取编程大佬们所推荐的 23 种编程资料! 来自:Why GitHub? 链接:https://github.com/shendeguize/GooglePyth ...
- python 功能 代码_让你的Python代码实现类型提示功能
Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...
- python语言必背代码-让你的Python代码实现类型提示功能
Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...
- python代码-让你的Python代码实现类型提示功能
Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...
- Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 Facebook 正式发布安全工具 Pysa,它专用于查找并修复 Instagram app 庞大Python 代码库中的漏洞. Py ...
- Google 内部的 Python 代码风格指南
1.背景 Python是谷歌主要使用的动态语言,本风格指导列举了使用Python编程时应该做和不该做的事项(dos & don'ts) 为了帮助你正确地组织代码,我们编写了一个Vim的设置文件 ...
- Python静态类型解析工具简介和实践
简介: Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型,但类型不匹配的操作是不被允许的.动态类型帮助开发者写代码轻松愉快,然而,俗话说:动态一时爽,重构火葬场.动态类型也带来了许 ...
- Python 静态类型解析工具简介和实践
一 背景 Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型(动态),但类型不匹配的操作是不被允许的(强类型,如str和int两个变量无法相加). 动态类型帮助开发者写代码轻松愉快, ...
- Google内部 Python 代码风格指南(中文版)
文末有干货 "Python高校",马上关注 真爱,请置顶或星标 这是一位大佬翻译的Google Python代码风格指南,很全面.可以作为公司的code review 标准,也可以 ...
最新文章
- 通过pcl 库的八叉树方法实现点云压缩与解压缩
- Internet History, Technology, and Security----第三周
- js 判断字符串中是否包含某个字符串
- 创建下标为1-10的整形数组
- 强大的独立日期选择器(date picker)插件 - Kalendae
- TypeError: Cannot read property ‘publish‘ of undefined“报错问题解决
- 大项目之网上书城(一)——注册页面
- Java SPI机制简介
- git 基于master分支 创建其他本地分支,并关联
- (转)霍华德·马克斯:警惕那些人人都追捧的事物
- 在android中如何显示维语
- 基于RFM模型的Kmeans聚类算法实现
- 微信查询对账单对账+数据读取解析入库
- 《Android深度探索卷一》读书笔记六
- BJTU 懒羊羊吃青草
- java codeCache
- 【M24】了解虚方法、多继承、虚基类、RTTI的成本
- Android 超高仿微信图片选择器
- 【NOIP2014】解方程【秦九韶】【高精度处理】
- 操作系统学习——分时操作系统