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相关推荐

  1. Google 内部的 Python 代码风格指南(译)

    微信搜索逆锋起笔关注后回复编程pdf 领取编程大佬们所推荐的 23 种编程资料! 来自:Why GitHub? 链接:https://github.com/shendeguize/GooglePyth ...

  2. python 功能 代码_让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  3. python语言必背代码-让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  4. python代码-让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  5. Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 Facebook 正式发布安全工具 Pysa,它专用于查找并修复 Instagram app 庞大Python 代码库中的漏洞. Py ...

  6. Google 内部的 Python 代码风格指南

    1.背景 Python是谷歌主要使用的动态语言,本风格指导列举了使用Python编程时应该做和不该做的事项(dos & don'ts) 为了帮助你正确地组织代码,我们编写了一个Vim的设置文件 ...

  7. Python静态类型解析工具简介和实践

    简介: Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型,但类型不匹配的操作是不被允许的.动态类型帮助开发者写代码轻松愉快,然而,俗话说:动态一时爽,重构火葬场.动态类型也带来了许 ...

  8. Python 静态类型解析工具简介和实践

    一 背景 Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型(动态),但类型不匹配的操作是不被允许的(强类型,如str和int两个变量无法相加). 动态类型帮助开发者写代码轻松愉快, ...

  9. Google内部 Python 代码风格指南(中文版)

    文末有干货 "Python高校",马上关注 真爱,请置顶或星标 这是一位大佬翻译的Google Python代码风格指南,很全面.可以作为公司的code review 标准,也可以 ...

最新文章

  1. 通过pcl 库的八叉树方法实现点云压缩与解压缩
  2. Internet History, Technology, and Security----第三周
  3. js 判断字符串中是否包含某个字符串
  4. 创建下标为1-10的整形数组
  5. 强大的独立日期选择器(date picker)插件 - Kalendae
  6. TypeError: Cannot read property ‘publish‘ of undefined“报错问题解决
  7. 大项目之网上书城(一)——注册页面
  8. Java SPI机制简介
  9. git 基于master分支 创建其他本地分支,并关联
  10. (转)霍华德·马克斯:警惕那些人人都追捧的事物
  11. 在android中如何显示维语
  12. 基于RFM模型的Kmeans聚类算法实现
  13. 微信查询对账单对账+数据读取解析入库
  14. 《Android深度探索卷一》读书笔记六
  15. BJTU 懒羊羊吃青草
  16. java codeCache
  17. 【M24】了解虚方法、多继承、虚基类、RTTI的成本
  18. Android 超高仿微信图片选择器
  19. 【NOIP2014】解方程【秦九韶】【高精度处理】
  20. 操作系统学习——分时操作系统

热门文章

  1. 详解深度学习之经典网络:AlexNet(2012) 并利用该网络架构实现人脸识别
  2. 赛码网--求数列的和
  3. 锡瓦塔内霍 墨西哥 / 巴克斯顿 /
  4. video全屏操作栏自定义样式js 指定元素全屏视频截图下载
  5. Linux(程序设计):65---同步HTTP请求、异步HTTP请求
  6. pyQT5 AES 加解密
  7. 读书笔记程序员修炼之道(英文版2版)一习惯
  8. Pytorch+PyG实现GraphSAGE
  9. 人见人爱A^B之解题思路
  10. 【linux驱动分析】之dm9000驱动分析