获取Sphinx automodule的“扁平”成员输出

15 投票
1 回答
1384 浏览
提问于 2025-04-17 06:12

我正在使用Sphinx的autodoc扩展来为一个模块写文档,我想在文档输出中得到一个模块成员的扁平列表。

我试过使用以下代码:

.. automodule:: modname
   :members:

不过,这里有两个问题:

  1. 它包含了模块的文档字符串,而我想要这个。

  2. 每个条目的名字前面都有“modname.”的前缀,这完全是多余的(因为这个页面就是专门用来记录这个模块的)

但是,我找不到任何配置选项可以让我选择性地禁用这两个方面,同时还能自动列出所有模块成员。

我现在的计划是直接使用autofunction(等等)并明确列出要记录的成员,但我还是想知道我是否错过了实现我最初想要的简单方法。

更新:我至少找到了第二个问题的解决方法:在conf.py中设置add_module_names=False。不过这是一个全局设置,所以并没有真正回答我最初的问题。

1 个回答

4

在看这个类似问题的回答时,我发现可以使用autodoc-process-docstring这个事件来删除模块中的文档字符串。只需要在你的conf.py文件中添加以下代码:

def skip_modules_docstring(app, what, name, obj, options, lines):
    if what == 'module':
        del lines[:]

def setup(app):
    app.connect('autodoc-process-docstring', skip_modules_docstring)

需要注意的是,del这个语句是必须的,因为根据文档的说明,对lines的修改必须在原地进行(也就是说,如果你创建了一个新的对象,就不管用了)。

最后,你还可以使用name来过滤掉只有少数几个模块的文档字符串,而保留其他模块的文档字符串。

撰写回答