sphinx autodoc在readthedocs上创建空白页,但在本地正确包含模块docstring

时间:2019-05-20 21:59:30

标签: python-sphinx read-the-docs autodoc

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

区别在于以下文件Shady.Text.rst的结果,该文件不超过以下内容:

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

.. automodule:: Shady.Text

现在,此子模块恰好只包含模块级docstring,而没有成员docstring,这是按预期的,因此相应的html页面包含模块docstring,而不再包含。而这正是我在本地运行make html时发生的情况。但是,https://shady.readthedocs.io/en/latest/source/Shady.Text.html处的结果是无内容的(仅标头,没有模块文档字符串)。

首先,我在conf.py中与自动文档相关的条目是:

autoclass_content = 'both'
autodoc_member_order = 'groupwise'

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

感谢@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' (用引号引起来)。

对我来说,该消息具有误导性:问题不是“模块执行模块级语句”,因为允许本身。在注意到其他子模块中似乎允许使用 some 模块级语句后,我浪费了一些时间,然后尝试将有问题的模块级语句捆绑到类装饰器中,以为可能是sphinx神秘的模块级-statement-detector然后会错过它们...)

否,问题在于不是模块级语句存在并且可能调用sys.exit(),而是它们没有间接调用的事实在狮身人面像的编译过程中sys.exit()。这是我处理丢失的依赖项的方式的一个怪癖,应该重新考虑一下,但是我现在可以通过避免在sys.exit()为真的情况下避免我的os.environ.get('READTHEDOCS')调用来解决此问题。