black+flake8 配合git提高python代码质量

本文将介绍如何使用black ,flake8 对python项目的代码进行检查修改,同时讲解如何与git想配合,在每次commit时都能自动的检查代码是否符合PEP8的要求,black可以自动帮你修改python脚本里的不符合规范要求的代码,少数遗漏之处可以再通过flake8进行检查和提示。

1. 什么是PEP8

PEP8是Python语言的编码规范,它是由Python社区制定的一种代码风格指南,旨在提高代码的可读性和一致性。PEP8规范包括了Python代码中的各种细节,如变量命名、注释、缩进、空格等,以及一些特殊的约定,如函数参数的顺序、类方法的定义方式等。

python开源社区里有很多开源的模块可以用来帮助你检查代码是否符合该规范,比如flake8, pylint, pycodestyle, black和autopep8 则能够自动的将不符合PEP8规范的代码自动转换为符合规范的代码。

2. black ,flake8 配合git来使用

他们的安装和使用都非常方便

pip install black
pip install flake8

他们的使用都极为方便简单

cd yourproject
black .     # 遍历当前目录所有的python脚本,修改不符合PEP8规范的代码
flake8 .    # 检查当前目录下所有的python脚本

对你的python项目先执行black 命令,他能帮助我们将大部分不符合规范的代码修改为符合规范的代码,剩下的,使用flake8进行仔细的检查,flake8 会输出不符合规范的代码所在的脚本以及行数,并提示你不符合哪一条规范,你可以根据提示进行相应的修改。

如果你的项目是通过git来管理源码的,那么我们可以使用git提供的pre-commit 功能在每次使用git commit 提交代码时自动的来执行black和flake命令。在你的项目里,有一个.git 的隐藏文件夹,这里存放的就是git用于管理项目的工具,在.git/hooks 里有很多以sample结尾的文件,他们都是git命令的钩子,pre-commit.sample就是commit命令的钩子,但是需要将sample这个后缀去掉才能生效。我们要做的就是编写一个名为pre-commit的文件,git commit 在执行时,会先执行这个脚本。

pre-commit 可以是python脚本,也可以是shell脚本,我这里提供一个shell脚本的例子

#!/bin/sh

#!/bin/sh

black lp_optools --exclude .ipynb_checkpoints 
exit_code=$?        # 获得上一条命令的退出码
if [ $exit_code -ne 0 ];then     # 如果上一条命令退出码不是0 ,就说明执行的有问题,整个脚本也退出,commit命令就执行失败了
   exit $exit_code
fi

flake8 lp_optools --ignore=E501  --exclude .ipynb_checkpoints
exit_code=$?
if [ $exit_code -ne 0 ];then
   exit $exit_code
fi

在我的项目里,所有的代码都存放在optools这个文件夹中,因此,我直接指定这个目录,特别强调一点,pre-commit 的工作目录就是你项目的所在目录,所以,你不必在脚本里特地设置项目的路径。在代码里,我检查两条命令的退出码,如果他们的退出码不是0,就是非正常退出,说明代码有问题,pre-commit同样以非0状态码退出,git commit 命令就不会提交代码,这是一个比较严格的检查,只要代码不符合PEP8的规范,就无法提交,不过hooks 里的pre-commit 是你自己编写的,你不想这么严格,就把exit_code 这段代码删除,那么这两条命令只会帮你修改代码并提示哪些代码不符合规范,不影响你提交代码。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案