有个网友对python 程序分析工具进行了比较系统的调研,里边有很多的工具及使用的场景和优缺点对比,具体对比如下:

工具描述开发语言是否开源
PySonar2语义索引器,用于批量处理大型代码库。牺牲实时索引能力,使用过程间分析来推断变量、参数和函数的类型。目前作为大型代码索引服务的基础引擎,Sourcegraph 中也有使用该工具。Java
Sourcegraph代码搜索和导航引擎,帮助阅读和理解大型项目的代码。目前支持 Go、Java、Python 等多种编程语言,能够以浏览器插件的形式提供在线代码阅读的功能。Go、TypeScript
coala使用配置文件检测和修复代码,可自定义规则和标准检查代码质量,扩展性强。支持 Python、Java、C/C++、JavaScript 等多种编程语言,支持作为编辑器插件使用。Python
vprof性能分析工具,为 Python 程序的运行时间、内存使用情况等提供交互式可视化,不适用于大型代码的分析。Python、JavaScript
Code2Flow为动态语言生成生成调用图(Call Graph),目前支持 Python、JavaScript、Ruby、PHP。主要是提供一个粗略的概览,不适用于大型代码的分析。Python、JavaScript
pydepsPython 模块依赖可视化,导出 .svg 或 .png 文件。只考虑导入的文件(模块必须安装),在 Python 字节码中查找导入操作码,同时支持外部模块的分析。Python
pycallgraph*为 Python 应用生成调用图(Call Graph),包括函数的调用次数、执行时间等信息,提供一定程度的性能分析功能。同时支持过滤函数,避免生成的图太大无法分析,默认导出 .png 文件。Python
undebt*执行大规模自动化代码重构,根据自定义模式对代码进行查找和替换,适用于任何语言。Python
pyt*基于理论基础的 Python Web 应用静态分析(控制流图、定点、数据流分析),能够检测 SSRF、SQL 注入、XSS、目录遍历等攻击,支持自定义源点和汇点、传播污点的函数。目前已停更,作者建议使用 Pyre 。Python
Pyre (Facebook)性能类型检查器,集成静态分析工具 Pysa(污点分析)Pysa 通过跟踪数据流实现安全检查,依赖类型注释,能够高速处理大型代码。OCaml、Python
Bandit构建 AST 并使用插件检查安全问题,最初在 OpenStack 安全项目中开发,后来被重新定位到 PyCQA。主要用于扫描危险函数,支持自定义漏洞测试和扩展插件。Python
Sourcetrail跨平台的源代码浏览器,支持 C/C++、Java、Python,提供搜索、代码、图形三个交互式视图。亮点是给出了源代码的结构,但只有符号名称。C++、Java
radon计算源代码的度量(metrics),包括 McCabe、Halstead、可维护性索引三种度量指标,支持在 coala 中使用。主要用于评估代码的复杂度。Python
xenon基于 radon 的监测工具,检查代码复杂性。可应用于 CI/CD,在每次提交代码时运行,根据自定义代码复杂性阈值返回成功或失败。Python
jediPython 静态分析工具,侧重于自动补全和跳转,通常作为编辑器的插件使用。Python
mypy静态类型检查器(PEP 484),能够对 Python 程序中的类型注释执行静态检查。Python
pyright (Microsoft)可用于大型 Python 源代码库的快速类型检查器,使用内置的类型存根进行类型推断,可以在监视模式下运行,支持增量更新。TypeScript、Python
pytype (Google)静态分析器,无需类型注释就能检查和推断 Python 代码的类型,也利用了类型存根(pyi 文件)。Python
Vulture查找 Python 程序中未使用的代码(死代码),存在漏报,并且隐式调用可能会被误报。支持设置最小置信度、白名单等功能,可以对单个文件或目录的 py 文件执行分析。Python
PyCG使用静态分析为 Python 代码生成调用图,支持高阶函数、类继承、导入的模块、嵌套定义。详见论文 ICSE 2021 paperPython
Wily复杂性检查Python

来源:https://mp.weixin.qq.com/s/Ur2qBwIaYgmA_jyOPaTSyw