本文从项目中的配置文件出发,逐步学习 black、flake8
代码格式化和检查工具,并了解了如何在客户端 pre-commit
和在服务端 Travis CI
进行代码审查。
服务端校验 Travis CI
不知道你是否在 Github
某个仓库中看到过上图这样的徽标,今天看 DAIR-V2X
的源码,发现了一个名为 .travis.yml
的文件,这个其实是 Travis CI
的配置文件。
Travis CI
能够为 Github
中的项目提供持续集成(Continuous Integration
)服务,被监听的仓库一旦有了 Commit
,就会去找仓库中的 .travis.yml
文件,执行里面的命令。
下面是示例代码,表示以 python 3.7
的环境运行 black
和 flake8
命令,在执行命令前先进行安装操作,命令执行完无需进行通知操作。
yaml
language: python
python:
- "3.7"
install:
- pip install black
- pip install flake8
script:
- black v2x --line-length=120
- flake8 v2x
notifications:
email: false
DAIR-V2X
的仓库没有这个徽标,但是应该是在服务端做过校验的,其代码编写规范是我们需要学习的,这里涉及到 black
和 flake8
两个模块。
black、flake8
black 源码库 中的说明写着它是一种决不妥协的 Python
代码排版器。black
是能够对我们编写的 python
代码按照 PEP 8
进行自动排版的工具,其中 PEP 8
是 python
官方建议的代码排版规范。使用时直接指定文件就可以。
flake8
则是代码是否符合 PEP 8
规范的代码排版检测器。它有配置文件,可以放在顶级用户目录或者项目中的 setup.cfg、tox.ini、.flake8
中,配置文件以 [flake8]
开头。
下面的 flake8
配置中,flake8-typing-imports
是检查 typing
模块的插件,用于检测该模块是否按规范使用。ignore
则是忽略 一些不符合规范的行为检查,像 E402
表示 import
模块操作未在文件最上方,各代码详细说明可以查阅以下两个链接:pycodestyle error-codes 、flake8 warnings
.flake8
[flake8]
flake8-typing-imports==1.9.0
max-line-length=200
ignore = E402, F403, F405, E302, E241, F401, W292, W293, E902, W503
客户端校验 pre-commit
与 Travis CI
在服务端校验不同的是,pre-commit
的操作是在客户端。pre-commit
是 git
的一个钩子脚本,目的是在提交代码送给代码审查之前,在客户端本地对代码进行一次校验。像下面的 .pre-commit-config.yaml
文件就是 pre-commit
的配置,利用 black
格式化代码,再用 flake8
进行代码检查。其中,repo
和 rev
是仓库和版本号,hooks
里指明要执行的命令、参数和依赖等。
.precommitconfig.yaml
repos:
- repo: https://github.com/psf/black
rev: 21.12b0
hooks:
- id: black
language_version: python3
args: [--line-length=120]
additional_dependencies: ['click==8.0.4']
- repo: https://gitlab.com/pycqa/flake8
rev: 3.9.0
hooks:
- id: flake8
additional_dependencies: [flake8-typing-imports==1.9.0]
args: ['--config=.flake8', '--max-line-length=200', '--ignore=E402, F403, F405, E302, E241, F401, W292, W293, E902, W503']
总结
为了使得 python
代码更加规范,我们需要用 black
格式化我们的代码,并用 flake8
进行代码审查,在代码提交评审之前需要在客户端 pre-commit
中做检查,提交到服务器上之后(这里指 github
)服务器端也做一遍检查。