作为软件开发人员,确保高质量和一致的代码对于无缝操作至关重要。预定是一种强大的工具,可以通过在代码提交之前自动检查代码来帮助实现这一目标。在本文中,我们将深入研究与Python项目一起使用Python项目来增强代码质量并优化开发过程。
。让我们看看我们今天要讨论什么:
- Precommit:它如何工作?
- python中的设置优先
- 写代码检查预订挂钩
- 自定义PRICMIT
- python中的优先收益
- 预定配置错误
- 与CI Workflow的预定
- Python中预先承诺的最佳实践 li>
- 结论和下一步
然后,让我们立即开始而无需任何进一步的延迟ð
什么是预订,它如何工作?
PRICMIT是开发人员使用的工具,可以通过对代码进行检查,以确保代码质量,然后再将其提交存储库。
此工具依赖一个文件,该文件包含一个挂钩列表,该挂钩执行脚本或命令检查代码。如果代码未能完成检查,则拒绝提交,并要求开发人员解决这些问题。
可以使用
来强制执行一致的代码样式,语法错误和安全漏洞。它还支持可以扩展其功能并与其他工具(例如林格,格式化器和静态分析工具)集成的插件。
Python的设置优先
运行husky
和lint-staged
花费的时间超过了我预期的时间。有时,它甚至花费的时间比进行过程本身要多(包括检查文件是否是否有任何错误)。
要在Python项目中设置Prepmit,您需要遵循几个步骤。
- 安装预定:首先,您需要在项目中安装预先承诺作为DEV依赖性。您可以通过运行以下命令来执行此操作:
pip install pre-commit
- 创建一个预订配置文件:下一步,为预订创建配置文件。在此文件中,您可以指定要在提交上运行的挂钩。
您可以通过在项目的根部添加.pre-commit-config.yaml
文件来做到这一点。
- 定义预订挂钩:现在,您可以定义预订将运行的钩子。
例如,您可以使用 black 添加钩子以格式化代码。您还可以使用工具 flake8 。
以下是如何为这些任务定义的预订挂钩的示例:
repos:
- repo: https://github.com/psf/black
rev: 21.7b0
hooks:
- id: black
language_version: python3.8
- repo: https://github.com/PyCQA/flake8
rev: 3.9.2
hooks:
- id: flake8
很好地讨论了我们即将到来的各个部分中的各种参数。
- 运行
pre-commit install
安装git钩:
$ pre-commit install
-
将您的更改像往常一样。在创建提交之前,预密码钩将自动运行 。
-
测试预定挂钩:尽管 当您对git提出更改时,会自动运行 。但是,如果您想要 可以在代码库上手动运行它们。
您可以通过运行以下命令来执行此操作:
pre-commit run
这将仅扫描git中上演的那些文件(通过
git add
)。
-
添加和提交更改:您现在可以照常运行
git commit
,并且 将自动运行定义的挂钩并在提交代码之前检查您的代码。 /p> -
如果预先承诺检测到任何问题,它将打印一条消息并防止该提交继续进行。然后,您可以解决问题并尝试再次提交。
编写代码检查预订挂钩
我们已经看到了如何编写预加入钩配置的示例。现在,让我们深入研究它。首先,让我们再看一下示例配置。
repos:
- repo: https://github.com/PyCQA/flake8
rev: 3.9.2
hooks:
- id: flake8
name: flake8
types: [python]
args:
- --max-line-length=88
- --ignore=E203,E501,W503
这是一种预加入挂钩配置, 和运行 项目中指定文件上的flake8
linter。
配置指定 flake8 的存储库URL。它还指定要使用的版本。
挂钩具有以下属性:
-
id
:钩子的唯一标识符,在这种情况下为flake8
。 -
name
:在运行期间将显示的钩子的人类可读名称。 -
types
:该挂钩应使用的文件类型列表。在这种情况下,钩子在 python 文件上运行。 -
args
:参数指定要传递到命令的其他参数(在这种情况下,--max-line-length=88
执行pep8线长度限制和--ignore=E203,E501,W503
以忽略某些flake8错误)。
总的来说,此配置设置了 flake8 挂钩,该挂钩在提交之前会在python文件中凸出。
为了确保有效的开发过程,要考虑 precommit 钩子执行的检查的性能影响至关重要。长期进行检查可能会极大地阻碍团队的生产力,因此优化这些支票至关重要。
定制挂钩以满足您的需求
通过自定义预订配置,您可以确保团队的代码保持质量和一致性的最高标准,同时还可以简化开发工作流程。
根据您的需要,有两种方法可以自定义钩子。我们将讨论它们两个。
自定义现有钩子
自定义预订的一种方法是通过配置内置钩子。每个预订挂钩都有多种配置选项,您可以用来控制其行为。
例如,您可能需要调整特定挂钩警告的严重性级别,或配置衬里以忽略某些目录或文件。我们已经在上一节中看到了这个示例。
添加到同一示例中,让我们问flake8
钩以忽略venv
目录,您可以添加以下配置:
repos:
- repo: https://github.com/pre-commit/mirrors-flake8
rev: v3.9.2
hooks:
- id: flake8
args: [--exclude=venv]
在此示例中,我们使用--exclude
选项告诉flake8
跳过匹配模式venv
的任何文件或目录。
从头开始编写自定义钩子
虽然Precmit带有各种内置钩子。但是您也可以通过创建自己的钩子来自定义预订。如果您有项目或团队独有的特定检查或过程,这可能特别有用。
您可以用任何语言编写钩子(Python,C ++,JavaScript等),并使用它们在代码上运行自定义脚本或命令。
要创建一个自定义的预订挂钩,您首先需要在预订配置文件中定义一个新钩。您需要指定挂钩,脚本或命令的name
以及任何 grigants 或脚本所需的选项。
例如,如果您想创建一个挂钩,以检查代码中存在特定注释的钩子,则可以创建这样的钩子:
repos:
- repo: local
hooks:
- id: custom-comment-check
name: Check for Required Comments
entry: sh
args: ["-c", "grep -r 'TODO' ."]
在此示例中,我们使用grep
命令在当前目录及其子目录中的所有文件中搜索字符串“ todo”。这将捕获可能指示未完成的代码或任务的“ todo”评论的任何实例。
注意在这里我们使用了entry
:执行此钩的命令,在这种情况下为sh
运行 shell 命令。命令。
定义了自定义挂钩后,您可以通过提交代码来运行它与其他预订钩一起运行。如果挂钩失败,则将拒绝该提交,并提示您在再次尝试之前解决问题。
无论您是创建自定义钩子还是配置现有钩子,Precommit是一个强大的工具,可以帮助您将开发过程提升到一个新的水平。
Python的优先收益的好处
现在,让我们探索在Python项目中使用PrecMomit的一些好处。按照惯例,应该在一开始就讨论它。但是我不希望您不显示实际方面的理论解释。
- 改进的代码质量:主要好处之一是提高代码的整体质量。它确保代码是一致,可读的,并遵循最佳实践。例如,您可以使用Precompit检查语法错误,执行代码格式标准,并检测潜在的错误或安全漏洞。这样可以确保您提交的代码高质量,从而降低了可能导致问题的错误或错误的可能性。
- 减少时间和精力:预先承诺可以自动化代码测试的几个方面,从而减少了手动检查代码错误所需的时间和精力。 PrecMompit没有运行单个检查,而是在单个命令中运行所有检查,节省开发人员的宝贵时间,可用于专注于其他任务。
- 易于使用:预订易于设置并在您的Python项目中使用。您可以使用PIP安装它,并且可以轻松自定义配置文件以满足您项目的特定需求。预定支持各种钩子和衬里,使其具有足够的用途,几乎适合任何项目。
- 改进的协作:预定有助于改善团队成员之间的协作。通过在将更改推向存储库之前运行预定检查,每个人都可以确信代码遵循相同的标准和约定。这使得新团队成员更容易迅速发展并在整个项目中保持一致性。
预定配置错误要避免
使用Precompit可以显着提高代码质量和开发工作流程,但要正确配置它以避免可能导致问题的常见错误,这一点很重要。
一个常见的错误是没有指定依赖关系的正确版本,这可能会导致其他软件包的兼容性问题。定义预订挂钩中使用的所有软件包的正确版本,以确保兼容并避免任何意外行为。
另一个常见的错误是忘记在添加新挂钩或更改现有的钩子时忘记更新预订配置。至关重要的是要保持最新的预定配置并定期测试挂钩以在影响代码库之前捕获任何问题。
与CI工作流程整合
与您的CI工作流程相结合可以通过在生产之前捕获问题来进一步提高代码质量。当预先参与与Jenkins或Travis CI这样的CI工具集成时,挂钩会在每个代码更改上自动运行,以确保所有代码符合相同的质量标准。任何失败的钩子都将阻止代码合并到主分支中,从而降低引入错误或漏洞的风险。
Python预先承诺的最佳实践
以下是在Python开发工作流程中使用Precmort的一些最佳实践:
- 使用pre-commit.ci :pre-commit.ci是一项在代码库上运行预订挂钩并提供代码质量的反馈的服务。它可以与您的CI工作流程集成在一起,并确保所有开发人员的代码质量一致。
- 使用虚拟环境:预订挂钩可以需要特定版本的库和工具。使用虚拟环境可确保在一致的环境中运行钩子并减少版本冲突的机会。
- 为正确的文件配置钩子:某些钩子可能很昂贵且耗时。配置挂钩以在正确的文件上运行会减少构建时间并加快开发过程。
结论
总而言之,Precommit是提高Python项目中代码质量和一致性的强大工具。
通过设置自定义挂钩并将其与CI工作流程集成在一起,您可以在提交之前捕获错误和警告,从而简化您的开发过程。通过适当的配置和最佳实践,预定可以大大减少错误,节省时间并提高代码库的整体质量。
通过遵循本文概述的步骤,您可以轻松地开始使用Precmit,并将Python开发提升到一个新的水平。