python代码规范利器-Flake8

1,445 阅读3分钟

一、简介

代码规范不仅能减少bug,有助于代码审查,降低维护成本,更重要的是在大型项目中,能够提升团队间的合作效率。

Flake8 是一款辅助检测Python代码是否规范的工具,它是下面三个工具的封装集合:

  1. PyFlakes
  2. Pep8
  3. NedBatchelder’s McCabe script

Flake8 通过启动单个flake8命令来运行所有工具。它在每个文件的合并输出中显示警告。

它还增加了一些功能:

  • 跳过此行检测:
# flake8:noqa
  • 忽略此行特定错误# noqa: <error>,例如, # noqa: E234。可以给出多个错误代码,用逗号分隔。
  • Git 和 Mercurial 钩子
  • 通过flake8.extensionflake8.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]