当我在本地运行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'
我在做什么错了?
答案 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')
调用来解决此问题。