一、简介
代码规范不仅能减少bug,有助于代码审查,降低维护成本,更重要的是在大型项目中,能够提升团队间的合作效率。
Flake8 是一款辅助检测Python代码是否规范的工具,它是下面三个工具的封装集合:
- PyFlakes
- Pep8
- NedBatchelder’s McCabe script
Flake8 通过启动单个flake8命令来运行所有工具。它在每个文件的合并输出中显示警告。
它还增加了一些功能:
- 跳过此行检测:
# flake8:noqa
- 忽略此行特定错误
# noqa: <error>,例如,# noqa: E234。可以给出多个错误代码,用逗号分隔。 - Git 和 Mercurial 钩子
- 通过
flake8.extension和flake8.formatting入口扩展更多功能
二、安装
python -m pip install flake8
三、使用
flake8 my_project
你可以在命令行上进行配置,也可以使用配置文件,配置文件可以在最高级的用户目录下,或者当前目录下,setup.cfg,tox.ini, 或者.flake8 文件都可以,文件需要以 [flake8] 段落开头:
[flake8]
ignore = D203
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-complexity = 10
如果使用本地的插件的话,可以进行如下配置:
[flake8:local-plugins]
extension =
MC1 = project.flake8.checkers:MyChecker1
MC2 = project.flake8.checkers:MyChecker2
report =
MR1 = project.flake8.reporters:MyReporter1
MR2 = project.flake8.reporters:MyReporter2
配置项列表:
- count 打印错误总数
- diff 仅检查修改的文件并报告 diff 中包含的错误
- exclude 排除,使用逗号分隔
- filename 检查的文件
- format 选择用于向用户显示错误的格式化程序,默认情况下,有两种可用的格式化程序:default 和 pylint
- hang-closing 切换 pycodestyle 是否应该强制匹配左括号行的缩进
- ignore 要忽略的错误代码列表,默认为E121,E123,E126,E226,E24,E704,W503,W504
- extend-ignore 添加到要忽略的错误代码列表,无需完全覆盖默认列表
- max-line-length 最大长度
- select 希望 Flake8 报告的错误代码列表
- extend-select 添加到要报告错误的代码列表,无需完全覆盖默认列表
- disable-noqa 报告所有错误,即使它与注释在同一行
- show-source 打印生成相关错误/警告的源代码
- statistics 计算每个错误/警告代码的出现次数并打印报告
- enabled-extensions 启用默认关闭扩展
- exit-zero 即使有错误,也强制 Flake8 使用退出状态代码 0
- jobs 指定 Flake8 将用于并行运行检查的子进程数
- output-file 将所有输出重定向到指定的文件
- tee 如果已配置输出文件,还将输出打印到标准输出
- append-config 提供额外的配置文件来解析
- config 配置文件的路径
- isolated 忽略任何配置文件并使用 Flake8
- builtins 提供内置函数、对象、名称等的自定义列表
- doctests 在 docstrings 中启用 doctests 的 PyFlakes 语法检查
- include-in-doctest 指定 PyFlakes 检查哪些文件的 doctest 语法
- exclude-from-doctest 指定 PyFlakes 不检查哪些文件的 doctest 语法
四、与git hooks 配合
安装 pre-commit:
pip install pre-commit
配置 .pre-commit-config.yaml
- repo: https://github.com/pycqa/flake8
rev: '' # pick a git hash / tag to point to
hooks:
- id: flake8
用pre-commit install安装git hooks到你的.git/目录,即可。
要使用flake8插件,设置additional_dependencies :
- id: flake8
additional_dependencies: [flake8-docstrings]