flake8 是什么
flake8 是组合式的 Python 检查工具:把 pycodestyle(风格)、pyflakes(未使用导入、未定义名称这类逻辑问题)与 mccabe(复杂度)三类检查合并在一次运行里输出。它的定位是快而稳的基础检查,常与 Black、Ruff 一起构成 Python 项目的质量组合。
基本信息
| 组成 | pycodestyle + pyflakes + mccabe |
|---|---|
| 典型告警 | E501 行宽、F401 未使用导入、W291 行尾空白 |
| 配置位置 | setup.cfg 的 [flake8] 段,或 tox.ini、.flake8 |
| 运行方式 | 本地命令与 CI 步骤共用同一份配置 |
典型使用场景
- 项目刚引入静态检查:作为最简单的起点,一条命令就能跑
- 与 Black 搭配:行宽对齐到 88,忽略冲突的 E203
- 快速拦截低级问题:未使用导入、未定义名称、行尾空白
- CI 门禁兜底:本地钩子可以跳过,流水线无法跳过
- 存量项目渐进治理:按规则码分批忽略与修复
与 Black 同用时的配置要点
- max-line-length 设为 88,与 Black 保持一致
- extend-ignore 加上 E203,避开切片空格上的分歧
- 与 Black 冲突的其它风格规则同样需要忽略
- 忽略项在团队内公开,避免各自在本地偷偷追加
最小配置
最小配置
[flake8]
max-line-length = 88
extend-ignore = E203
# 分工:格式交给 Black,flake8 负责逻辑问题与基础风格
exclude = .venv,build,dist常见告警速查
| 代码 | 含义 | 处理方向 |
|---|---|---|
| E501 | 行超过设定的宽度 | 交给 Black,或调整配置里的行宽 |
| E203 | 切片冒号前有空格 | 与 Black 冲突,通常直接忽略 |
| F401 | 导入之后没有使用 | 删除导入,或改为显式标注 |
| W291 | 行尾存在空白字符 | 交给编辑器设置或格式化工具 |
插件机制(如 flake8-bugbear)能补上更多检查,但插件会拉长运行时间,按需启用即可。
在评审中的用法:把 flake8 接进流水线并固定版本,作者先在本地跑一遍再提交;评审者则把注意力放在检查覆盖不到的地方,例如逻辑分支、边界条件与并发行为。
告警代码本身就是沟通语言:评论里写 F401 比写「这个导入没用」更准确,配置里也能直接按代码定位到具体规则。
extend-ignore 越加越多:真实问题会连同风格争议一起被关掉。