我使用sphinx来记录我的python项目,并且我有几个Qt / PySide小部件子类。因此,当我运行sphinx时,我需要模拟PySide,因为运行doc脚本的机器没有安装qt或pyside。 autodoc无法对这些子类做任何事情。
我尝试添加一个autodoc-skip-member函数,该函数检查对象是否是mock的实例并返回false,但仍然没有记录。不嘲笑和安装pyside解决了这个问题。
def skip(app, what, name, obj, skip, options):
if isinstance(obj, unittest.mock.Mock):
print('not skipping {0}'.format(name))
return False
return skip
def setup(app):
app.connect("autodoc-skip-member", skip)
我可以使用autodoc设置让它飞起来吗?
答案 0 :(得分:0)
因此,在不需要额外扩展的情况下让sphinx飞行的主要解决方案就是模仿它们:
class Mock(MagicMock):
@classmethod
def __getattr__(cls, name):
return Mock()
MOCKS = ['bar']
sys.modules.update((mod_name, Mock()) for mod_name in MOCKS)
示例here,sphinx autodoc模块使用similar approach。但是,如果尝试子类化这些模拟的导入,则继承实例化的类,而不是类本身,因为模块正在设置为实例。换到这个对我有用:
sys.modules.update((mod_name, Mock) for mod_name in MOCKS)
请注意它只是类Mock
而不是实例Mock()
。我不确定这有什么影响,但是因为它按预期工作