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

Python 如何从Sphinx autodoc中排除pytest函数?,python,pytest,python-sphinx,autodoc,Python,Pytest,Python Sphinx,Autodoc,我的软件包中有多个模块 package/ |--mod1.py |--mod2.py 每个模块都包含一些用于测试模块的功能和测试功能 我正在使用sphinx apidoc为包中的每个模块生成.rst文件。我的问题是,当我为我的包生成文档时,test函数也包含在文档中。我知道可以使用::exclude members:function跳过函数。但我正在寻找一种解决方案,它允许我通过使用类似于test.*的模式对所有模块进行测试 我的package.rst文件如下所示: package packa

我的
软件包中有多个模块

package/
|--mod1.py
|--mod2.py
每个模块都包含一些用于测试模块的
功能
测试功能

我正在使用
sphinx apidoc
包中的每个
模块生成
.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:
package.mod1 module
===================

.. automodule:: package.mod1
    :members:
    :undoc-members:
    :show-inheritance:
我的
mod1.rst
文件如下所示:

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

Submodules
----------

.. toctree::

   package.mod1
   package.mod2

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

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

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

提前感谢。

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

解决方案是为事件编写一个处理程序,并将其连接到
conf.py
文件中的
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)

通常,您的测试将放在
test
tests
目录下,然后您可以排除整个目录。@L-Jones9是的,但此时将所有测试移到其他目录会太多工作。非常感谢,我以后会考虑的。您可以跳过名为“Test*”的函数,通过定义一个处理程序(CON.PY中的一个函数),当从<代码> AutoOC跳过成员< /C>事件中调用时,返回<代码>真< /代码>。请参阅。我为每个文件将我的
autodoc\u skip\u member\u handler
方法设置为
return True
,但我的设置仍然挂起。@NuclearPeon挂起,就像永远运行一样?这看起来没什么关系。。。也许你可以在
autodoc\u skip\u member\u handler
函数中添加一个
print(name)
,看看它是如何调用的?我打印了每个属性,我可以看到它的运行。有一个带有模块级命令的文件可以连接到数据库,因此每次到达该点时它都会挂起。我尝试忽略方法调用名、包含模块、包含模块的模块,我尝试立即返回True和False,这样它将跳过所有内容,但它仍然挂起。可能是狮身人面像中的一只虫子。这是我得到的线索,指引我找到了绞刑的源头。