如何从 Sphinx autodoc 中排除 pytest test_* 函数?

How to exclude pytest test_* functions from Sphinx autodoc?

我的 package 中有多个模块。

package/
|--mod1.py
|--mod2.py

每个模块包含一些 functions 和一个 test_function 用于测试模块。

我正在使用 sphinx-apidocpackage 中的每个 module 生成 .rst 文件。我的问题是,当我为我的包生成文档时,test 函数也包含在文档中。我知道使用 :exclude members: function 可以跳过函数。但我正在寻找一种解决方案,允许我使用类似于 test_*.

的模式对所有模块执行此操作

我的 package.rst 文件如下所示:

package package
===============

Submodules
----------

.. toctree::

   package.mod1
   package.mod2

Module contents
---------------

.. automodule:: package
    :members:
    :undoc-members:
    :show-inheritance:

我的 mod1.rst 文件如下所示:

package.mod1 module
===================

.. automodule:: package.mod1
    :members:
    :undoc-members:
    :show-inheritance:

提前致谢。

虽然@mzjn 的评论绝对是一个很好的指导,但我仍然为此苦苦挣扎了一段时间。

解决方案是在 conf.py 文件中为 autodoc-skip-member 事件编写处理程序并将其连接到 autodoc-skip-member 事件。

所以这是后者的样子:

# conf.py

# Loads of configuration settings

# This is the expected signature of the handler for this event, cf doc
def autodoc_skip_member_handler(app, what, name, obj, skip, options):
    # Basic approach; you might want a regex instead
    return name.startswith("test_")

# Automatically called by sphinx at startup
def setup(app):
    # Connect the autodoc-skip-member event from apidoc to the callback
    app.connect('autodoc-skip-member', autodoc_skip_member_handler)