网站首页 > 开源技术 正文
在开始一个新的Python项目时,很容易不做规划直接进入编码环节。花费少量时间,用最好的工具设置项目,将节省大量时间并带来更快乐的编码体验。
在理想的世界中,所有开发人员使用的依赖库都是相同的,代码将被完美地格式化,禁止常见错误,并且测试将涵盖所有内容。此外,每次提交代码时都会确保符合这些要求。
这是小编准备的python基础学习资料,关注,转发,私信小编“01”即可免费领取!
在本文中,我将介绍如何设置一个这样的理想项目。你可以跟随我的步骤操作,也可以直接开始安装pipx和pipenv,然后生成新项目。
让我们创建一个新的项目目录:
Python命令行工具与pipx
Pipx是一个方便的实用程序,允许快速安装python命令行工具。我们将用它来安装 pipenv 和 cookiecutter 。
使用 pipenv 进行依赖管理
Pipenv自动为您的项目创建和管理virtualenv,以及在安装/卸载软件包时从Pipfile添加/删除软件包。它还生成了非常重要的Pipfile.lock文件,用于生成确定性构建。
知道你和你的同事正在使用相同的库版本,可以极大提升信心。Pipenv 可以实现这个点,因此在过去一年多里得到了大量开发者的青睐
使用 black 和 isort 进行代码格式化
Black是代码格式化工具:
Black是不妥协的Python代码格式化程序。通过使用它,意味着您同意放弃对手动格式化细节的控制。作为回报,Black 为你提供速度和确定性,并且无需处理 pycodestyle 的繁琐提示。你将有更多的时间,来处理更重要的事情。
无论是什么项目,Black 格式化后的代码看起来都是一样的。习惯之后,你不会再注意到格式的问题,可以专注于内容。
Black产生的代码差异最小,可以加速代码审查。
isort则用来处理 import 的排序:
isort是可以按字母顺序对 import 进行排序,并自动分成多个部分。
让我们使用pipenv安装它们为开发依赖库,这样就不会让部署版本变得更复杂:
Black 和 isort 的默认选项之间有冲突,因此我们将覆盖 isort 的选项配置,使用 Black 的配置。创建一个 setup.cfg 文件并添加此配置:
我们可以这样运行这些工具:
用flake8强化风格
Flake8确保我们的代码遵循PEP8的约定。使用pipenv安装:
就像isort一样,它需要一些配置才能与 Black 配合使用。将此配置添加到 setup.cfg :
现在我们可以使用 pipenv run flake8 运行flake8。
使用 mypy 检查静态类型
Mypy是Python的一个可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的好处。Mypy将Python的表现力和便利性与强大的类型系统和编译时类型检查相结合。Mypy对标准Python程序进行类型检查,使用 Python VM 运行 mypy 基本没有运行时的开销。
在Python中使用类型需要慢慢习惯,但好处是巨大的。mypy 官网这样写道:
- 静态类型可以使程序更容易理解和维护
- 静态类型可以帮助您更早地发现错误,并减少测试和调试
- 静态类型可以帮助您在代码投入生产之前找到难以发现的错误
默认情况下,Mypy将递归检查所有类型注释的导入,这会导致库不包含这些注释时出错。我们需要将mypy配置为仅在我们的代码上运行,并忽略没有类型注释的导入的任何错误。我们假设代码存在于以下配置的 best_practices 包中。将如下配置添加到 setup.cfg :
现在我们可以运行mypy:
mypy 的速查表:https://mypy.readthedocs.io/en/latest/cheatsheetpy3.html
使用pytest和pytest-cov进行测试
使用pytest编写测试非常容易,并且消除编写测试的阻力,意味着我们会编写更多的测试!
以下是pytest网站的一个简单示例:
执行示例:
所有的测试都应该放在 test 目录中,所以将这个配置添加到 setup.cfg :
我们还想检查测试覆盖了多少代码。创建一个新文件 .coveragerc ,用来返回应用程序代码的覆盖率统计信息,我们再次假设代码位于 best_practices 模块中:
我们现在可以运行测试并报告覆盖率
如果对应用程序代码的测试覆盖率低于100%,则会失败。
pre-commit 的 Git 钩子
Git钩子允许您在任何时候提交或推送时运行脚本。这就可以支持我们在每次提交/推送时,自动运行所有的格式化和测试。pre-commit可以帮助我们轻松配置这些钩子:
在提交代码审查之前,Git钩子脚本可以帮助识别简单问题。每次提交时运行钩子,自动指出代码中的问题,例如缺少分号,尾随空格和调试语句。在代码审查之前指出这些问题,可以让代码审查者专注于代码架构的变化,而不是浪费时间检查格式问题。
在这里,我们配置在提交Python 文件修改时,执行上述所有检查,并且仅在推送时运行pytest覆盖率测试,因为耗时可能较长。创建一个新文件 .pre-commit-config.yaml :
如果你需要跳过这些钩子,你可以运行 git commit--no-verify 或 git push--no-verify
使用cookiecutter生成项目
我们已经看到了理想项目都使用了哪些工具,可以将其固化为一个模板,只需要1个命令 即可生成新项目:
填写项目名称和仓库名称,即可使用模板为你生成项目。
要完成设置,请按照下列步骤操作:
模板项目包含一个非常简单的Python文件和测试来试用这些工具。一旦你对代码感到满意,你就可以做第一个 git commit ,这时所有的钩子都会运行。
猜你喜欢
- 2024-11-22 可以吃的emoji|带你装B带你飞
- 2024-11-22 2021杜卡迪Monster之乱:国外车友犀利留言大合集
- 2024-11-22 【快乐烘焙】樱花抹茶饼干 Salt Pickled Sakura Matcha Cookies
- 2024-11-22 从零开始,30天学会在Shopify上开店之LOGO设计–Day10
- 2024-11-22 提升Python编程效率的10点建议
- 2024-11-22 “完美中的不完美”,一辆日常驾驶的复古911
- 2024-11-22 类银河恶魔城新作《千篇一律》公布 预告片欣赏
- 2024-11-22 真实存在的14只恶梦般的生物,
- 2024-11-22 暑期无聊吗?看看国外孩子怎么玩
- 2024-11-22 LR掌握这种意识,会是你快速解题的绝招
你 发表评论:
欢迎- 05-14WP8.1 GDR1的NTP时间同步没有解决问题
- 05-14抑郁症与焦虑症(四):补充色氨酸,5HTP的作用
- 05-14ntp服务器多久同步一次呢
- 05-14简单三步,轻松解决NVR时间不同步问题
- 05-14Linux的300+个真实运维场景——19 NTP 配置与管理
- 05-14海康威视录像机时间不准怎么办录像机无法查看回放录像,NTP校时
- 05-14安全加倍,解密极氪001电池安全技术
- 05-14海康威视录像机NTP服务器
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)