0
点赞
收藏
分享

微信扫一扫

Python 项目本地开发指南(下篇)

简介

接着上篇(​​python项目最佳实践(上)​​​)

继续把预提交流程、编码检测、自动格式化、静态类型检测等执行一遍。

面向对象:python初、中级、有一定其他语言基础准备转python的人员

本文目标:了解如何标准化、规范化开始一个python项目


在提交代码前运行检查

版本控制工具:git

具体如何安装这里不做说明,请参考git官网。

在初始化一个新的git仓库后会有个 .gitignore 文件,该文件是用来忽略临时和二进制文件提交到存储库,

对于python项目,github上有个模板,链接:​​.gitignore​​

问题:为什么要在提交前运行检查?

在你将一个功能开发完后将代码提交到远程仓库之前,很容易错过一些内容,比如代码的格式风格错误,通不过 CI 自动化,这个时候自动代码检查就可以让你避免不必要的麻烦。

​​pre-commit​​ 就可以完美解决该问题,它会在每一个git提交前运行自动检测工具,虽然是用python编写的,但是可以用于各种编程语言项目。

安装 pre-commit

Python 项目本地开发指南(下篇)_python


如何使用 pre-commit

Python 项目本地开发指南(下篇)_ide_02


可以看到,pre-commit 已经为我们创建好一些钩子

# 让我们 手动运行检查:

Python 项目本地开发指南(下篇)_ide_03


运行后,它已经找到了问题,提示文件末尾没有换行符,不符合编码规范。

Python 项目本地开发指南(下篇)_python_04


其实在运行pre-commit后,它已经自动发现问题并解决了,在运行发现已经没有问题了。

Python 项目本地开发指南(下篇)_git_05


让git 使用脚本自动检测

Python 项目本地开发指南(下篇)_python_06


让我们测试下 git 提交,随便更改一点东西,进行提交测试

Python 项目本地开发指南(下篇)_python_07

Python 项目本地开发指南(下篇)_ide_08


更新 pre-commit

Python 项目本地开发指南(下篇)_python_09

使用 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 检测

Python 项目本地开发指南(下篇)_git_10

将 flake8 添加到 git 钩子中

将 flake8 添加到 git 自动代码前运行。

代开 上面 pre-commit 添加的 .pre-commit-config.yaml, 添加如下内容, 这样在下次自动提交代码时就会自动运行。

Python 项目本地开发指南(下篇)_ide_11

使用 Black 格式化代码

那么为什么需要格式化代码呢?

在多人开发的项目中,我们无法保证每个开发人员的编码风格一致,即使大家都按照pep8的要求编码,也无法做到万无一失,毕竟人是会犯错误的,有时你在接手另外一个同事开发的功能时,可能会遇到和你自己编码风格完全不同的代码,你可能会看起来有点吃力和别扭,此时程序的优势就体现出来,借助 Black 按照团队指定的格式来自动格式化代码,让整个团队成员的编码风格逐渐一致。

安装 Black

Python 项目本地开发指南(下篇)_git_12


在 pyproject.tom 配置文件中配置 Black

Python 项目本地开发指南(下篇)_git_13


执行Black

Python 项目本地开发指南(下篇)_ide_14


我们在执行预提交检测

Python 项目本地开发指南(下篇)_python_15


同样 Black 加入到 git 钩子中

Python 项目本地开发指南(下篇)_python_16


使用 Mypy 进行静态类型检测

为什么要使用静态类型检查?

静态代码分析工具,可确保代码是类型安全的;可以使解释器更好的进行代码的检测,使代码出错的概率大大降低,并降低团队开发人员上手代码的难度, 使得代码对人来说更具可读性。关于 Mypy这里不做过多讲解,我们现在只讨论一个项目的大概流程如何进行。具体的Mypy讲解请参考官方文档,

官方文档地址 ​​Mypy​​

安装mypy

Python 项目本地开发指南(下篇)_python_17


使用 mypy

Python 项目本地开发指南(下篇)_git_18


将 mypy 添加到 git 钩子

将以下内容添加到 .pre-commit-config.yaml

Python 项目本地开发指南(下篇)_python_19


使用 isort 对 import 进行自动排序

​​PEP8​​规定导入应按以下顺序排序:标准库、第三方库、本地库。此外,我们希望 import 美观且对人类友好。

刚好 isort 可以很好的做到这点, 下面是 isort 的官方示例:

错误示例(不优雅的 包导入)

Python 项目本地开发指南(下篇)_git_20


正确合理示例

Python 项目本地开发指南(下篇)_python_21


把 isort 添加到 git hooks

最后:快速配置示例

快速开启一个新项目的所有流程。

1.使用 poetry安装依赖

Python 项目本地开发指南(下篇)_ide_22


2.配置 pyproject.tom 文件

Python 项目本地开发指南(下篇)_git_23

Python 项目本地开发指南(下篇)_python_24

3.setup.cfg 文件

Python 项目本地开发指南(下篇)_ide_25


4. .pre-commit-config.yaml 文件

Python 项目本地开发指南(下篇)_ide_26

Python 项目本地开发指南(下篇)_python_27


Python 项目本地开发指南(下篇)_git_28


如果你看完前后两篇教程,恭喜你应该已经知道如何优雅的开启一个新的python项目,如果还不太清楚具体流程,那么,实践是最好的老师。如果你记不住具体的流程也没关系,我们最后提供设置整个项目的快捷步骤,只需要几分钟就能快速开启python新项目。接下来就交给你了,开始动手实践一遍吧~


[参考链接]


​​结构化您的工程​​

​​语义化版本​​

​​Toml语言​​

​​Poetry官网​​

​​Pyenv​​

​​pyenv-win​​

​​廖雪峰-单元测试​​

​​pytest-cov​​

​​Best_Practice_For_Python最佳实践指南​​

​​Python中PEP8、flake8、autopep8、black​​

​​我为什么不喜欢 black​​

​​Mypy​​

​​PEP8​​


声明:本文由南京林科斯拉原创发布,转载请注明。

联系我们:电话 400-828-1855。

举报

相关推荐

0 条评论