Python版本冲突?优化?Python开发环境的技巧来了( 二 )


如果想要查看一个使用了文中推荐工具的实际项目,请前往我的Github仓库 。
格式一致性与可读性(Consistent Formatting and Readability)
现在,已经创建好了项目,即将开始添加代码 。理想情况下,代码库的格式应该一致,以确保可读性和可理解性 。这将是一个非常沉闷乏味的过程,尤其在还有其他人操作代码库时 。
但用Black可以解决上述问题!
Black是一种让程序员在编写python代码时能将精力集中于核心内容的工具 。它自动为代码添加格式,避免程序员手动添加格式 。因为Black的效果非常好,我们把它添加到dsexample中,让它为所有的文件添加格式 。
# We add black as a developmentdependency with --dev as we don't
# need it when it comes to production
poetry add --dev black=19.3b0
# Assume we are inside the current toplevel dsexample folder
poetry run black .
很好,现在所有的文件看起来非常整齐了 。
类型纠正(Type-Correctness)
自Python3.5开始(如果我记错了请纠正),类型注释开始成为标准库的一部分通过类型注释,代码更好理解,更易维护,不易出错 。为什么会不易出错呢?因为可以静态地检查变量和函数的类型是否符合预期 。当然,必须是自动完成的 。
下面介绍mypy 。
Mypy是一种静态python代码检查器,作用是在错误发生之前找到他们 。使用poetry向项目中添加mypy并进行代码检查与添加black一样简单 。
ypy as a developmentdependency with --dev as we don't
# need it when it comes to production
poetry add --dev mypy
# Assume we are inside the current toplevel dsexample folder
poetry run mypy .
运行mypy也可能导致很多麻烦 。当然,可以将其设置为只对你关心的错误发出警告 。这可以通过在项目中添加mypy.ini文件实现 。
将自动化工具自动化(Automate the Automation)
使用black和mypy,我们不再需要手工为代码添加格式,并且可以避免不必要的错误 。但是我们仍需要手动使用这两个工具,这两个工具不是应该也自动化吗?
是的!
Pre-commit可以完成一切 。
Pre-commit工具是在代码提交到仓库前执行检查(我默认读者的代码处在git的控制下) 。无法通过检查的代码将被拒绝 。这样代码仓库就永远不会出现格式不整齐或是未经类型检查的代码,以及任何其他你需要检查错误的代码 。
现在来安装pre-commit 。
可以使用poetry将其直接安装在项目里,也可以安装在本地机器里 。笔者倾向于后者,因为precommit只在本地使用,而不在CI/CD服务器上 。相反,black和mypy在CI/CD服务器上运行,因此,将它们添加到项目的dev依赖项是有意义的 。笔者建议使用下面方法通过现有的工具虚拟环境安装它
# Install pre-commit into the tools virtual env
pyenv activate tools
pip install pre-commit
# Leave the virtual env
pyenv deactivate
# As we have already added the tool venv, it will work directly
pre-commit --version
要使用pre-commit,首先需要向顶级文件夹中添加一个名为.pre-commit-config.yarm的文件 。在该文件里,你需要配置所有应该运行的钩子 。在mypy与Black的环境下,文件内容如下所示 。
repos:- repo: https://github.com/ambv/black rev: 19.3b0 hooks: - id: black language_version: python3.7- repo: https://github.com/pre-commit/mirrors-mypy rev: v0.740 hooks: - id: mypy
最后,你必须执行以下命令以设置钩子 。
# I assume your are in the toplevel folder
pre-commit install
现在,钩子函数(hook)将在每次提交时运行 。Black工具的钩子函数不仅会检查格式,还会相应地为文件添加格式 。每次添加新的钩子函数时,建议一开始在所有文件中手动运行pre-commit,因为它只能作用于上次提交之后更改过的文件 。
pre-commit run --all-files
就这样,对自动化工具的自动化完成了 。
总结
有很多工具可以帮助你专注于重要的事情 。此处笔者只介绍了其中的几个 。当然,还有更多 。希望你学到了新的东西后,可以更加专注于代码本身 。

【Python版本冲突?优化?Python开发环境的技巧来了】


推荐阅读