如何开源你的 Python 库

这份 12 步清单将确保成功发布。
253 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

你编写了一个 Python 库。我相信它很棒!如果人们可以轻松使用它,岂不是很棒吗?这是一份清单,列出了在开源你的 Python 库时需要考虑的事项和具体步骤。

1. 源代码

将代码上传到 GitHub,这是大多数开源项目发生的地方,也是人们提交拉取请求最容易的地方。

2. 许可证

选择一个开源许可证。一个好的、宽松的默认许可证是 MIT 许可证。如果你有特定要求,Creative Common 的 Choose a License 可以指导你了解各种替代方案。最重要的是,在选择许可证时,请记住以下三条规则

  • 不要创建你自己的许可证。
  • 不要创建你自己的许可证。
  • 不要创建你自己的许可证。

3. README

在你的树的顶部放置一个名为 README.rst 的文件,使用 ReStructured Text 格式化。

GitHub 将像渲染 Markdown 一样很好地渲染 ReStructured Text,并且 ReST 与 Python 的文档生态系统配合得更好。

4. 测试

编写测试。这不仅对你有用:对于想要制作补丁以避免破坏相关功能的人也很有用。

测试有助于协作者进行协作。

通常,最好是它们可以使用 pytest 运行。还有其他测试运行器——但几乎没有理由使用它们。

5. 风格

使用 linter 强制代码风格:PyLint、Flake8 或带有 --check 的 Black。除非你使用 Black,否则请确保在签入源代码控制的文件中指定配置选项。

6. API 文档

使用 docstrings 来文档化模块、函数、类和方法。

你可以使用几种风格。我更喜欢 Google-style docstrings,但 ReST docstrings 也是一种选择。

Google-style 和 ReST docstrings 都可以由 Sphinx 处理,以将 API 文档与散文文档集成。

7. 散文文档

使用 Sphinx。(阅读 我们关于它的文章。)教程很有用,但指定这个东西 *是* 什么、它擅长什么、它不擅长什么以及任何特殊注意事项也很重要。

8. 构建

使用 toxnox 自动运行你的测试和 linter,并构建文档。这些工具支持“依赖矩阵”。这些矩阵往往会快速爆炸,但尝试针对合理的样本进行测试,例如 Python 版本、依赖项版本以及你安装的可能的可选依赖项。

9. 打包

使用 setuptools。编写一个 setup.py 和一个 setup.cfg。如果你同时支持 Python 2 和 3,请在 setup.cfg 中指定通用 wheels。

toxnox 应该做的一件事是构建 wheel 并针对已安装的 wheel 运行测试。

避免 C 扩展。如果你 *绝对* 需要它们来提高性能或出于绑定原因,请将它们放在单独的包中。正确打包 C 扩展值得单独写一篇文章。有很多陷阱!

10. 持续集成

使用公共持续集成运行器。TravisCICircleCI 为开源项目提供免费层级。配置 GitHub 或其他仓库以要求在合并拉取请求之前通过检查,你将永远不必担心在代码审查中告诉人们修复他们的测试或风格。

11. 版本

使用 SemVerCalVer。有很多工具可以帮助管理版本:incrementalbumpversionsetuptools_scm 都是 PyPI 上帮助你管理版本的软件包。

12. 发布

通过运行 toxnox 并使用 twine 将工件上传到 PyPI 来发布。你可以通过运行 DevPI 来进行“测试上传”。

标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
Moshe 自 1998 年以来一直参与 Linux 社区,在 Linux “安装聚会” 中提供帮助。他自 1999 年以来一直在编写 Python 程序,并为核心 Python 解释器做出了贡献。Moshe 自这些术语出现之前就一直是 DevOps/SRE,他非常关心软件可靠性、构建可重现性以及其他此类事情。

1 条评论

谢谢,这是一个很好的指引。我创建了一些软件包,但目前尚未发布任何软件包。这篇文章正是我需要的方向。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.