Sphinx交叉引用中断在父模块中导入和记录的继承对象

And*_*jos 5 python python-sphinx

我正在尝试正确构建我的Sphinx文档并且交叉引用(包括来自继承关系的那些)正常工作.

在我的项目中,我有一个情况,在下面的例子中描述,为了方便起见,我在这个github repo上进行了复制:

$ tree .
.
??? a
?   ??? b
?   ?   ??? __init__.py
?   ??? __init__.py
??? conf.py
??? index.rst
??? README.md
Run Code Online (Sandbox Code Playgroud)

a.b.__init__,我宣布课AB.B继承自A.在a.__init__,我导入AB喜欢:from .b import A, B.我在实际项目中执行此操作的原因是减少模块上的导入路径,同时将特定类的实现保存在单独的文件中.

然后,在我的第一个文件,我车博士模块a.. automodule:: a.因为a.b它只是一个辅助模块,所以我不自动调整它,因为我不想重复引用相同的类,也不要让用户混淆他们应该做的事情.我也设定show-inheritance期待a.B将有一个反向链接a.A.

如果我试图以非常挑剔的方式构建sphinx,我将收到以下警告:

WARNING: py:class reference target not found: a.b.A
Run Code Online (Sandbox Code Playgroud)

如果我查看生成的类文档B,那么我验证它没有与类正确链接A,这只是确认上面的警告.

问题:我该如何解决这个问题?

mzj*_*zjn 6

Sphinx使用__module__属性的值来确定定义类/函数/方法的模块的名称(请参阅https://docs.python.org/2/reference/datamodel.html#the-standard-type - 层次结构).有时这不是您在文档中想要的.

该属性是可写的.您可以通过在/ __ init__.py中添加此行来解决此问题:

A.__module__ = "a"
Run Code Online (Sandbox Code Playgroud)