Radon:Python 代码复杂度分析工具
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 是可选依赖,未安装时输出不带颜色。

安装
通过 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 项目,它是一个实用工具。
更多推荐



所有评论(0)