首页/开发/代码质量与评审速查/flake8:组合式 Python 检查
规范与静态检查65 条

flake8:组合式 Python 检查

flake8 组合 pycodestyle(风格)、pyflakes(未使用导入等)与 mccabe(复杂度)三类检查;经典告警如 E501 行太长、F401 未使用导入。

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 越加越多:真实问题会连同风格争议一起被关掉。

易错点

  • 不配 max-line-length:与 Black 的 88 冲突,告警刷屏
  • extend-ignore 越加越多:把真实问题一起关掉
  • 让 flake8 与 Black 都管格式:两边互相覆盖,提交来回改
  • 只在本地运行:钩子可被跳过,问题要靠 CI 兜底
  • 把 flake8 当成万能检查:它不做类型检查也不做安全扫描,误以为覆盖完整就会漏掉整类问题

数据来源与参考

  • flake8 官方文档(flake8.pycqa.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌