Python 代码的一种规范化流程 | black、flake8 -> pre-commit -> Travis CI

本文从项目中的配置文件出发,逐步学习 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 的环境运行 blackflake8 命令,在执行命令前先进行安装操作,命令执行完无需进行通知操作。

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 的仓库没有这个徽标,但是应该是在服务端做过校验的,其代码编写规范是我们需要学习的,这里涉及到 blackflake8 两个模块。

black、flake8

black 源码库 中的说明写着它是一种决不妥协的 Python 代码排版器。black 是能够对我们编写的 python 代码按照 PEP 8 进行自动排版的工具,其中 PEP 8python 官方建议的代码排版规范。使用时直接指定文件就可以。

flake8 则是代码是否符合 PEP 8 规范的代码排版检测器。它有配置文件,可以放在顶级用户目录或者项目中的 setup.cfg、tox.ini、.flake8 中,配置文件以 [flake8] 开头。

下面的 flake8 配置中,flake8-typing-imports 是检查 typing 模块的插件,用于检测该模块是否按规范使用。ignore 则是忽略 一些不符合规范的行为检查,像 E402 表示 import 模块操作未在文件最上方,各代码详细说明可以查阅以下两个链接:pycodestyle error-codesflake8 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-commitgit 的一个钩子脚本,目的是在提交代码送给代码审查之前,在客户端本地对代码进行一次校验。像下面的 .pre-commit-config.yaml 文件就是 pre-commit 的配置,利用 black 格式化代码,再用 flake8 进行代码检查。其中,reporev 是仓库和版本号,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)服务器端也做一遍检查。

相关推荐
科学创新前沿4 分钟前
逆向设计新范式:深度学习驱动的声学超材料智能优化!
人工智能·python·深度学习·声学·逆向设计·声学超材料
Sagittarius_A*22 分钟前
传统图像分割:阈值 / 区域生长 / 分水岭 / 图割全解析【计算机视觉】
图像处理·人工智能·python·opencv·计算机视觉·图像分割
猫咪老师23 分钟前
Day4 Python的函数和参数机制
后端·python
电商API&Tina1 小时前
比价 / 选品专用:京东 + 淘宝 核心接口实战(可直接复制运行)
大数据·数据库·人工智能·python·json·音视频
love530love1 小时前
Windows 开源项目部署评估与决策清单(完整版)
人工智能·windows·python·开源·github
今夕资源网1 小时前
零基础 Python 环境搭建工具 一键安装 Python 环境自动配置 升级 pip、setuptools、wheel
开发语言·python·pip·环境变量·python环境变量·python自动安装
Derrick__11 小时前
Scrapling 爬取豆瓣电影Top250
开发语言·python·网络爬虫·豆瓣·scrapling
2401_835792541 小时前
Java复习上
java·开发语言·python
Ai财富密码2 小时前
AI生成大屏可视化:数据智能驱动下的高维洞察与决策中枢
开发语言·人工智能·python·sdd
半兽先生2 小时前
01阶段:大模型语言入门
开发语言·python