贡献指南

欢迎贡献!

重大改动

请开启一个新的议题(issue)来讨论或提议重大改动。讨论大的想法不仅有趣,而且我们还能节省彼此的时间。也许您正在考虑的一些工作已经在某个开发分支中完成了一半。

代码风格

我们使用 ruff 进行代码格式化。这些程序的设置位于 pyproject.toml 文件中。拉取请求(Pull requests)应遵循此风格指南。我们与“black”风格的一个区别在于,显示给用户的字符串总是使用双引号 ("),而内部使用的字符串则使用单引号 (')。

测试

新功能应包含确认其正确性的测试。

新增依赖

如果您提议的更改需要新的依赖项,我们更倾向于那些已由 Debian 或 Red Hat 打包的依赖项。这会极大地简化下游软件包维护者的工作。仅在 PyPI 或 GitHub 上可用且未被广泛打包的软件包可能不被接受。

我们不太可能接受对 CUDA 或其他基于 GPU 库的依赖,因为它们在许多系统上仍然难以打包和安装。我们建议将这些更改实现为插件。

Python 依赖项也必须与许可兼容。GPLv3 或 AGPLv3 可能与本项目许可不兼容,但 LGPLv3 是兼容的。

新增非 Python 依赖

OCRmyPDF 使用了几个外部程序(Tesseract、Ghostscript 等)来实现其功能。通常我们倾向于避免添加新的外部程序,如果要添加外部程序,我们更喜欢那些已由 Debian 或 Red Hat 打包的程序。

插件

有些新功能可能非常适合作为插件。插件是一种在不修改核心程序的情况下为 OCRmyPDF 添加功能的方式。插件独立于 OCRmyPDF 安装。它们使用 Python 编写,可以从 PyPI 安装。请参阅插件文档

我们很乐意在文档中为用户提供您的插件链接。

风格指南:是写 OCRmyPDF 还是 ocrmypdf?

程序/项目名称是 OCRmyPDF,可执行文件或库的名称是 ocrmypdf。