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()
调用来解决它。
当我在本地 运行 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()
调用来解决它。