我正在使用sphinx来记录我的python项目,并且我有几个Qt/PySide小部件子类。因此,当我运行sphinx时,我需要模拟PySide,因为运行文档脚本的机器没有安装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上的设置来让它飞起来吗?
发布于 2015-05-09 02:04:34
因此,让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()。我不确定这会有什么影响,但它会按预期工作
https://stackoverflow.com/questions/29992444
复制相似问题