在 Linux 上为加载 pywin32 的包创建 Sphinx autodoc

Create Sphinx autodoc for a package loading pywin32 on Linux

我写了一个 package,它使用 pywin32 将 GitLab 问题与 Microsoft Projects 同步。

我想使用 readthedocs 来托管文档。

问题是我无法安装 pywin32,因为那里使用了 Linux 环境。

如果包在构建机器上不可用,关于如何获取autodoc构建文档的任何建议?

我找到了一个或多或少丑陋的解决方案:模拟使用的模块和函数。

需要相当多的手动工作。 在您的项目中创建一个 mocking 文件夹,并为每个使用的 class/function 创建模块、类 和函数存根。

在此之后编辑 doc/conf.py 并添加:

try:
    import win32com
except ImportError:
    sys.path.insert(0, os.path.join(__location__, '../mocking'))

在真实包不可用时自动加载模拟(并且只有在那时!)。

尽管如此解决方案非常麻烦,但它有一个优点。它允许静态类型,没有它就不可能。

解决这个问题最简单的方法是设置autodoc_mock_imports = ["pywin32"]。这只需要设置根包,您的代码对库的任何后续使用(调用或导入子模块、类 等)都将被 Sphinx 模拟。

请注意,模拟库除了允许声明和导入其组件外不会提供任何功能。因此,您的代码应该被构造为没有任何模块级执行取决于 pywin32 可调用对象,因为这些可调用对象的 returns 也将被模拟。

我还发现 this guide that elaborates focused on ReadTheDocs builds and it suggests the same. Parallel to this problem I found the extension sphinxcontrib-mockautodoc 解决了在给定项目中同时具有不同 Python 版本时进行构建的问题。