开发者指南

pypdf 是一个库,因此它的用户是开发者。本文件并非面向用户,而是提供给希望参与 pypdf 开发的人。


安装依赖

pip install -r requirements/dev.txt

运行测试

请参阅 使用 pytest 测试 pypdf


sample-files Git 子模块

引入 sample-files 子模块的原因是:我们希望保持 pypdf 仓库的体积小巧,同时也需要一个广泛的测试套件。这两个目标在某种程度上是相互矛盾的。

  • resources 文件夹应包含一组核心示例,涵盖我们通常需要测试的大部分情况。

  • sample-files 文件夹可能包含更多边缘情况、更大文件尺寸下的行为,以及由不同 PDF 生成工具产生的文件。

若要获取 sample-files 文件夹,请执行以下命令:

git submodule update --init

工具:Git 和 pre-commit

Git 是一个用于版本控制的命令行工具。如果你不熟悉它,可以通过 ohmygit 进行学习。

GitHub 是托管 pypdf 项目的服务平台。Git 是免费且开源的,而 GitHub 是微软提供的付费服务,但在许多情况下免费使用。

pre-commit 是一个基于 git hooks 的命令行工具,用于自动执行代码检查和格式化等任务。这可以帮助你避免代码风格和质量问题。

执行以下命令以启用 pre-commit:

pre-commit install

完成后,每次运行 git commit 时,pre-commit 将自动执行。


提交消息规范

清晰的提交消息可以帮助他人快速理解提交的内容,而无需查看代码变更。提交消息的第一行用于 自动生成 CHANGELOG,因此格式应为:

PREFIX: 描述

详细内容

前缀说明

前缀

含义与描述

SEC

安全性改进,通常用于修复可能导致无限循环的问题。

BUG

修复 bug。如果有相关 issue,请在详细内容中添加 Closes #123,其中 123 为 GitHub issue 编号。建议编写回归测试(修复前失败,修复后通过)。用户代码的 bug 属于此类,测试代码或 CI 问题不算。

ENH

添加新功能!详细内容中说明功能的用途。

DEP

弃用功能。可以是标记某功能为“即将移除”或实际移除该功能。

PI

性能改进。例如生成的 PDF 文件大小的减少或处理速度的提升。

ROB

稳健性改进,更好地处理损坏的 PDF 文件。

DOC

文档更新或改进。

TST

添加或调整测试用例。

DEV

改进开发者体验,例如调整 pre-commit 或 CI 配置。

MAINT

维护工作。包括性能优化、重构代码等。

STY

代码风格改进。例如使代码风格更一致,或改善面向用户的错误信息。

重要说明

前缀用于自动生成 CHANGELOG。每个 PR 必须有且仅有一个前缀。如果你认为多个前缀适用,请选择列表中靠前的一个。

Pull Request 大小

小型 Pull Request (PR) 更受欢迎,因为它们通常更容易被合并。例如,如果你需要修复一些拼写错误、进行代码风格调整、添加新功能以及修复一个 bug,那么这可以拆分成 3 到 4 个独立的 PR。

每个 PR 必须是完整的。这意味着,如果你引入一个新功能,该功能必须在该 PR 中完成,并且包含针对该功能的测试。


基准测试

我们需要持续关注性能表现,因此设有一些基准测试。

请参阅 py-pdf.github.io/pypdf/dev/bench 了解更多。