我正在尝试使用sphinx并成功生成html文件来记录python包.我正在记录的包由一组文件组成*.py,大多数包含一个类,其中几个文件是定义了函数的真正模块.我不需要暴露每个类都在一个模块中的事实,所以我from在__init__.py文件中添加了合适的语句,例如
from base import Base
Run Code Online (Sandbox Code Playgroud)
这样用户就可以使用该import pkg命令,然后不必指定包含该类的模块:
import pkg
class MyBase(pkg.Base): # instead of pkg.base.Base ...
...
Run Code Online (Sandbox Code Playgroud)
问题在于,斯芬克斯坚持将课程记录为pkg.base.Base.我试图设置add_module_names = False在conf.py.然而,这导致狮身人面像显示出简单的类Base而不是pkg.Base.此外,这也破坏了作为模块的几个*.py文件的文档.
我如何sphinx将课程作为一个班级pkg.Base?如何add_module_names为每个*.py文件选择性地设置指令?
我正在尝试正确构建我的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__,我宣布课A和B.B继承自A.在a.__init__,我导入A和B喜欢: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,那么我验证它没有与类正确链接 …