python项目分析工具
有个网友对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 | 是 |
pydeps | Python 模块依赖可视化,导出 .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 | 是 |
jedi | Python 静态分析工具,侧重于自动补全和跳转,通常作为编辑器的插件使用。 | Python | 是 |
mypy | 静态类型检查器(PEP 484),能够对 Python 程序中的类型注释执行静态检查。 | Python | 是 |
pyright (Microsoft) | 可用于大型 Python 源代码库的快速类型检查器,使用内置的类型存根进行类型推断,可以在监视模式下运行,支持增量更新。 | TypeScript、Python | 是 |
pytype (Google) | 静态分析器,无需类型注释就能检查和推断 Python 代码的类型,也利用了类型存根(pyi 文件)。 | Python | 是 |
Vulture | 查找 Python 程序中未使用的代码(死代码),存在漏报,并且隐式调用可能会被误报。支持设置最小置信度、白名单等功能,可以对单个文件或目录的 py 文件执行分析。 | Python | 是 |
PyCG | 使用静态分析为 Python 代码生成调用图,支持高阶函数、类继承、导入的模块、嵌套定义。详见论文 ICSE 2021 paper | Python | 是 |
Wily | 复杂性检查 | Python | 是 |