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

Python sphinx sphinx autodoc在readthedocs上创建空白页,但正确地在本地包含模块docstring,python-sphinx,read-the-docs,autodoc,Python Sphinx,Read The Docs,Autodoc,当我在本地运行sphinx(Mac版Anaconda Python 3.6.8上的版本1.6.6或2.0.1)时,我从autodoc得到的结果与在readthedocs.org上运行时不同(根据他们的日志,它是sphinx 1.8.5版,可能是Python 2.7版,因为它是用Python而不是python3启动的) 不同之处在于以下文件的结果,Shady.Text.rst,其中包含的内容不超过: Shady.Text Sub-module ===================== .. a

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

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

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

.. automodule:: Shady.Text
现在,这个子模块恰好只包含一个模块级的docstring,而没有预期的成员docstring,因此相应的html页面应该包含模块docstring,而不是更多。这正是我在本地运行
makehtml
时发生的情况。但是,处的结果是无内容的(仅标题,无模块docstring)

FWIW我的autodoc相关条目在
conf.py
中是:

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'

对我来说,这个消息是误导性的:问题不在于“模块执行模块级语句”,因为这本身是允许的。在注意到其他子模块中似乎允许使用某些模块级语句后,我浪费了一些时间,并试图将有问题的模块级语句捆绑到类装饰器中,认为sphinx神秘的模块级语句检测器可能会错过它们……)


不,问题不是模块级语句存在并且可能调用
sys.exit()
,而是它们在sphinx编译过程中确实间接调用了
sys.exit()
。这是我处理缺少依赖项的方式的一个怪癖,可能应该重新考虑,但我现在可以通过避免在
os.environ.get('READTHEDOCS')
是真实的情况下调用
sys.exit()
来解决这个问题。

感谢@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'

对我来说,这个消息是误导性的:问题不在于“模块执行模块级语句”,因为这本身是允许的。在注意到其他子模块中似乎允许使用某些模块级语句后,我浪费了一些时间,并试图将有问题的模块级语句捆绑到类装饰器中,认为sphinx神秘的模块级语句检测器可能会错过它们……)


不,问题不是模块级语句存在并且可能调用
sys.exit()
,而是它们在sphinx编译过程中确实间接调用了
sys.exit()
。这是我处理缺少依赖项的方式的一个怪癖,可能应该重新考虑,但我现在可以通过避免在
os.environ.get('READTHEDOCS')
真实时调用
sys.exit()
来解决这个问题。

检查这些警告
警告:autodoc:无法从模块u'Shady'导入模块u'Text';模块执行模块级语句,并可能调用sys.exit()。警告:autodoc:无法从模块u'Shady'导入模块u'Video';模块执行模块级语句,并可能调用sys.exit()。正在查找现在过时的文件。。。找不到
。很可能,您没有告诉RTD安装您的软件包。请参阅@StevePiercy Thank,这使我走上了正确的轨道(请参阅答案)检查是否存在这些警告
警告:autodoc:无法从模块u'Shady'导入模块u'Text';模块执行模块级语句,并可能调用sys.exit()。警告:autodoc:无法从模块u'Shady'导入模块u'Video';模块执行模块级语句,并可能调用sys.exit()。正在查找现在过时的文件。。。找不到
。很可能,您没有告诉RTD安装您的软件包。见@StevePiercy谢谢,这让我走上了正确的道路(见答案)