You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pydoc将dlprim子模块内容整合到主模块命名空间的文档中

解决pydoc生成dlprim模块文档时子模块成员不展示的问题

pydoc默认过滤导入的外部成员的核心逻辑是:只有成员的__module__属性等于当前模块名,或者出现在当前模块的__all__列表中,才会被计入当前模块的文档。你原来的写法只是导入了成员,但它们的__module__还是指向子模块,所以pydoc不会把它们算在dlprim主模块的文档里。

方法1:修改__init__.py适配pydoc规则(无需换工具)

修改dlprim目录下的__init__.py内容如下:

from ._pydlprim import *
from .netconfig import *
import sys

# 1. 显式声明主模块公开的所有成员,过滤私有变量
__all__ = [name for name in dir() if not name.startswith('_')]

# 2. 修正成员归属的模块标识,让pydoc判定为属于dlprim主模块
current_module = sys.modules[__name__]
for name in __all__:
    obj = getattr(current_module, name)
    # 仅修改类、函数这类可标识模块的成员
    if hasattr(obj, '__module__') and obj.__module__ in ('dlprim._pydlprim', 'dlprim.netconfig'):
        obj.__module__ = __name__

# 可选:隐藏子模块引用,避免它们出现在主模块的成员列表中
del _pydlprim, netconfig, sys

修改完成后直接执行pydoc -w dlprim,即可生成包含所有类、函数的单文件文档,所有成员都会归属到dlprim主模块的命名空间下。

方法2:使用更灵活的替代文档生成工具

如果不想修改项目源码,可以换用对跨模块导入兼容性更好的文档工具:

  • pdoc:默认支持自动识别__init__.py中导入的公开成员,直接执行pdoc --html dlprim -o ./docs即可生成结构清晰的HTML文档,所有子模块导入的成员都会默认展示在dlprim主模块页面。
  • Sphinx:适合需要专业文档结构的场景,配合autodoc扩展可以自定义要展示的API成员,支持将不同子模块的成员汇总到同一主模块文档页面,还可搭配自定义主题、教程说明等内容。

特殊情况处理

如果Boost.Python生成的_pydlprim模块成员没有内置__module__属性,可以手动赋值:

# 比如要把_pydlprim里的Tensor类归属到dlprim主模块
from ._pydlprim import Tensor
Tensor.__module__ = __name__

内容的提问来源于stack exchange,提问作者Artyom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:06:00