Radon:Python 代码复杂度分析工具

rubik/radon 是一个 Python 代码分析工具,专注于计算源代码的各项复杂度指标,在 GitHub 上获得了近 2000 个 Star。对于开发团队来说,代码复杂度是评估质量和识别重构优先级的重要参考,Radon 将这一过程简化成了几条命令就能完成的操作。

正文顶部截图

核心指标

Radon 计算四种代码指标。

圈复杂度基于 McCabe 方法,统计代码中线性独立路径的数量。数值越高,代码分支越多,测试和维护难度越大。Radon 将结果分为 A 到 F 六个等级,A 代表最低复杂度,F 代表最高。一条函数如果得到 A 或 B,说明结构清晰;如果得到 E 或 F,说明分支过多,应该考虑拆分。

原始指标提供代码行数(SLOC)、注释行数、空白行数等基础数据。这些数字可以用来评估代码库的规模和注释密度,是代码审查中的参考。

Halstead 指标从操作符和操作数的角度出发,通过数学公式计算程序的词汇量、长度、体积和难度。它衡量的是代码的阅读成本,而非执行路径。

可维护性指数综合了圈复杂度、Halstead 体积和代码行数等因素,输出 0 到 100 的分数。这个指数在 Visual Studio 中也有使用,可以作为重构优先级的参考。

兼容性

Radon 支持 Python 2.7 到 Python 3.12,一套代码库运行,无需 2to3 或 six。它也运行在 PyPy 上。

依赖方面,Radon 仅依赖 mando 用于命令行接口。colorama 是可选依赖,未安装时输出不带颜色。

README区域截图

安装

通过 pip 安装:

pip install radon

Python 3.11 以下版本如需配置 pyproject.toml,需要额外安装 toml 依赖:

pip install radon[toml]

也可以下载源码后手动安装。

命令行使用

以圈复杂度计算为例:

radon cc sympy/solvers/solvers.py -a -nc

这条命令分析指定文件的圈复杂度,-a 在末尾计算平均分,-nc 限制只显示 C 级及更差的代码块。

输出格式为每行包含文件路径、行号、函数名和等级。F 表示函数,M 表示方法,C 表示类。等级字母直观标示代码质量,方便定位需要重构的区域。

Radon 还支持 raw、hal 和 mi 三个子命令,分别对应原始指标、Halstead 指标和可维护性指数。

Python API

Radon 的各个模块可以直接在 Python 代码中导入使用。例如导入 radon.complexity 模块后,可以调用 cc_visit 函数对抽象语法树进行圈复杂度分析。分析结果以对象形式返回,便于进一步处理或输出。这种方式适合集成到自定义工具链或批量分析项目中。

CI 集成

Radon 在持续集成领域有广泛支持。

Codacy 默认使用 Radon 计算代码指标。Code Climate 将其作为官方引擎提供。coala 通过 RadonBear 集成。CodeFactor 也默认使用 Radon 计算圈复杂度。

如果需要阈值监控,可以配合 xenon 使用。Radon 偏向报告,xenon 在指标超标时以非零退出码提醒,适合放在 CI 流程中。

Jupyter Notebook 支持

Radon 可以分析 .ipynb 文件中的 Python 代码单元格,自动忽略 % 宏指令。启用 --include-ipynb 参数扫描 Notebook 文件,–ipynb-cells 参数展示每个单元格的详细数据。

小结

Radon 将代码复杂度分析变成了一条命令可以完成的事情。它覆盖圈复杂度、Halstead 指标和可维护性指数等多个维度,命令行和 API 两种方式均可调用,主流 CI 平台也提供了现成集成方案。对于关注代码质量的 Python 项目,它是一个实用工具。

性指数等多个维度,命令行和 API 两种方式均可调用,主流 CI 平台也提供了现成集成方案。对于关注代码质量的 Python 项目,它是一个实用工具。

更多推荐