为什么选择 nbdev
为什么我们使用 nbdev 开发软件
流行的 Python 文档标准,例如 numpy docstrings 和 sphinx,通过 docstrings 促进了源代码的文档编写,但 docstrings 的表达能力和功能有限。另一方面,与 docstrings 相比,Notebook 提供了更丰富的媒介来编写文档(包含 markdown 和代码单元),并解锁了其他方式难以实现的文档化代码的新方法。
此外,传统的测试框架,例如 pytest 和 unittest,鼓励在与相关源代码和文档分离的独立上下文中编写测试。使用 nbdev,您可以在与源代码和文档相同的上下文中编写测试,这样测试可以选择性地成为文档叙述的一部分。
由于 nbdev 允许您的同事和用户在单个上下文中查看测试、代码和文档,并且 REPL 鼓励实验,因此您在 nbdev 中编写代码、文档和测试的方式与传统的软件开发工作流程非常不同。
在 Notebook 最佳实践中,我们比较了在 nbdev 中编写、测试和文档化的函数与普通 .py 文件中的情况。以下是我们使用其他方法时遇到的一些挑战,这些挑战促使我们转向使用 nbdev。在 .py 文件中,
- Docstrings 重复了函数签名中已包含的信息,例如参数名称、默认值和类型
- 示例需要手动输入。这要求作者同时复制和粘贴代码和输出。此外,每次代码更改时,作者都必须手动重新输入或更改这些示例,这是一个容易出错的过程
- 示例仅限于短代码片段,不能包含绘图或图形等丰富的输出
- 除了代码注释外,示例中不能穿插散文与代码
- 您的代码读者如果想重现示例,必须复制和粘贴 docstring 的内容。