简介
接着上篇(python项目最佳实践(上))
继续把预提交流程、编码检测、自动格式化、静态类型检测等执行一遍。
面向对象:python初、中级、有一定其他语言基础准备转python的人员
本文目标:了解如何标准化、规范化开始一个python项目
在提交代码前运行检查
版本控制工具:git
具体如何安装这里不做说明,请参考git官网。
在初始化一个新的git仓库后会有个 .gitignore 文件,该文件是用来忽略临时和二进制文件提交到存储库,
对于python项目,github上有个模板,链接:.gitignore
问题:为什么要在提交前运行检查?
在你将一个功能开发完后将代码提交到远程仓库之前,很容易错过一些内容,比如代码的格式风格错误,通不过 CI 自动化,这个时候自动代码检查就可以让你避免不必要的麻烦。
pre-commit 就可以完美解决该问题,它会在每一个git提交前运行自动检测工具,虽然是用python编写的,但是可以用于各种编程语言项目。
安装 pre-commit
如何使用 pre-commit
可以看到,pre-commit 已经为我们创建好一些钩子
# 让我们 手动运行检查:
运行后,它已经找到了问题,提示文件末尾没有换行符,不符合编码规范。
其实在运行pre-commit后,它已经自动发现问题并解决了,在运行发现已经没有问题了。
让git 使用脚本自动检测
让我们测试下 git 提交,随便更改一点东西,进行提交测试
更新 pre-commit
使用 Flake8 linter 进行代码检测
linter 是什么?
在ide中提示代码错误和语法错误检测。在 linter 的帮助下,IDE 可以让你时刻知道代码错误。
python 的 linters 有很多,常用的有 flake8 和 pylint。
pylint 是一个非常严格的 linter,它不允许你的代码中有任何一点小错误,你的代码要严格按照要求规格编写,否则就会被标记出来。虽然这种方式能让你的代码更安全和规范,但也会导致你的开发时间延长。
而在大多的开源项目中都是使用 flake8,其相对宽松,但是足够使用了。
linter 是什么?
在ide中提示代码错误和语法错误检测。可以在你代码运行之前提示你的代码有哪些错误。在 linter 的帮助下,IDE 可以让你时刻知道代码错误。
python 的 linters 有很多,常用的有 flake8 和 pylint,
pylint 是一个非常严格的 linter,它不允许你的代码中有任何一点小错误,你的代码要严格按照要求规格编写,否则就会被标记出来。虽然这种方式能让你的代码更安全和规范,但是这个会导致你的开发时间延长。
而在大多的开源项目中都是使用 flake8,其相对宽松,但是足够使用了。
Python风格指南 - PEP8.
每一个python 开发人员都应该且必须知PEP8,以及 Zen of Python.
安装 Flake8
如果你是用的是vscode,那么你只需要在 ctrl+shift+p 输入 linter 选择 python: linter, 然后选择 flake8
VScode 会自动选择你的虚拟环境,并安装 flake8
也可以使用poetry 将 flake8 添加到 开发环境
poetry add flake --dev
手动执行 flake8 检测
将 flake8 添加到 git 钩子中
将 flake8 添加到 git 自动代码前运行。
代开 上面 pre-commit 添加的 .pre-commit-config.yaml, 添加如下内容, 这样在下次自动提交代码时就会自动运行。
使用 Black 格式化代码
那么为什么需要格式化代码呢?
在多人开发的项目中,我们无法保证每个开发人员的编码风格一致,即使大家都按照pep8的要求编码,也无法做到万无一失,毕竟人是会犯错误的,有时你在接手另外一个同事开发的功能时,可能会遇到和你自己编码风格完全不同的代码,你可能会看起来有点吃力和别扭,此时程序的优势就体现出来,借助 Black 按照团队指定的格式来自动格式化代码,让整个团队成员的编码风格逐渐一致。
安装 Black
在 pyproject.tom 配置文件中配置 Black
执行Black
我们在执行预提交检测
同样 Black 加入到 git 钩子中
使用 Mypy 进行静态类型检测
为什么要使用静态类型检查?
静态代码分析工具,可确保代码是类型安全的;可以使解释器更好的进行代码的检测,使代码出错的概率大大降低,并降低团队开发人员上手代码的难度, 使得代码对人来说更具可读性。关于 Mypy这里不做过多讲解,我们现在只讨论一个项目的大概流程如何进行。具体的Mypy讲解请参考官方文档,
官方文档地址 Mypy
安装mypy
使用 mypy
将 mypy 添加到 git 钩子
将以下内容添加到 .pre-commit-config.yaml
使用 isort 对 import 进行自动排序
PEP8规定导入应按以下顺序排序:标准库、第三方库、本地库。此外,我们希望 import 美观且对人类友好。
刚好 isort 可以很好的做到这点, 下面是 isort 的官方示例:
错误示例(不优雅的 包导入)
正确合理示例
把 isort 添加到 git hooks
最后:快速配置示例
快速开启一个新项目的所有流程。
1.使用 poetry安装依赖
2.配置 pyproject.tom 文件
3.setup.cfg 文件
4. .pre-commit-config.yaml 文件
如果你看完前后两篇教程,恭喜你应该已经知道如何优雅的开启一个新的python项目,如果还不太清楚具体流程,那么,实践是最好的老师。如果你记不住具体的流程也没关系,我们最后提供设置整个项目的快捷步骤,只需要几分钟就能快速开启python新项目。接下来就交给你了,开始动手实践一遍吧~
[参考链接]
结构化您的工程
语义化版本
Toml语言
Poetry官网
Pyenv
pyenv-win
廖雪峰-单元测试
pytest-cov
Best_Practice_For_Python最佳实践指南
Python中PEP8、flake8、autopep8、black
我为什么不喜欢 black
Mypy
PEP8
声明:本文由南京林科斯拉原创发布,转载请注明。
联系我们:电话 400-828-1855。