sphinx autodoc 在 readthedocs 上创建空白页,但在本地正确包含模块文档字符串

sphinx autodoc creates blank page on readthedocs, but correctly includes module docstring locally

当我在本地 运行 sphinx(Anaconda Python 3.6.8 上的版本 1.6.6 或 2.0.1 用于 Mac)时,我从 autodoc 得到了不同的结果我 运行 它在 readthedocs.org 上(根据他们的日志,它是 Sphinx 版本 1.8.5,并且可能是 Python 2.7,因为它是用 python 而不是 python3 启动的) .

不同之处在于以下文件 Shady.Text.rst 的结果,其中包含的内容不超过:

Shady.Text Sub-module
=====================

.. automodule:: Shady.Text

现在,这个 sub-module 碰巧只包含一个 module-level 文档字符串,没有成员文档字符串——这是预期的,所以相应的 html 页面 应该 包含模块文档字符串,仅此而已。这正是我在本地 运行 make html 时发生的情况。但是 https://shady.readthedocs.io/en/latest/source/Shady.Text.html 处的结果是 content-free(仅限 header,没有模块文档字符串)。

FWIW 我在 conf.py 中的 autodoc-related 条目是:

autoclass_content = 'both'
autodoc_member_order = 'groupwise'

我做错了什么?

感谢@StevePiercy 让我注意到原始日志文件中的关键行:

WARNING: autodoc: failed to import module u'Text' from module u'Shady'; the module executes module level statement and it might call sys.exit().
WARNING: autodoc: failed to import module u'Video' from module u'Shady'; the module executes module level statement and it might call sys.exit().

(我已经在 9000 行的日志文件中搜索了 .Text,因为 Text 在它上面创建了太多的点击,但我没有想到要搜索 'Text' 在引号中)。

对我而言,该消息具有误导性:问题不在于 "the module executes module level statements",因为 本身 是允许的。在注意到 some module-level 语句似乎在其他 sub-modules 中被允许后,我浪费了一些时间,并试图将违规的 module-level 语句捆绑到一个class 装饰者认为 sphinx 的神秘 module-level-statement-detector 可能会想念它们...)

不,问题不在于 module-level 语句存在并且 可能 调用 sys.exit(),而是它们 [=28] =]did 在 sphinx 的编译过程中间接调用 sys.exit()。这是我处理缺失依赖项的方式的一个怪癖,它可能应该是 re-thought,但我现在可以通过在 os.environ.get('READTHEDOCS') 为真时避免我的 sys.exit() 调用来解决它。