让Sphinx识别导入的类和函数,而不是模块

2022-04-21 00:00:00 python python-sphinx

问题描述

假设我有一个项目,结构如下:

mypackage
├── mypackage
│   ├── __init__.py
│   ├── someclass.py
│   └── somefunction.py
└── setup.py

然后我有__init__.pyAs:

from mypackage.someclass import someclass
from mypackage.somefunction import somefunction

someclass.pyAS:

class Someclass:
...

somefunction.pyAS:

def somefunction:
...

无法向用户"隐藏"mypackage.someclass.Someclassmypackage.somefunction.somefunction,因此只有mypackage.Someclassmypackage.somefunction可用,对吗?

但问题是,Sphinx实际上记录的是mypackage.someclass.Someclassmypackage.somefunction.somefunction,而不是mypackage.Someclassmypackage.somefunction

对于mypackage.somefunction.somefunction,如果我导入mypackage,它甚至无法访问,这是非常糟糕的。

那么,是否可以拥有Sphinx文档mypackage.Someclassmypackage.somefunction?根据我在其他答案上看到的,这可以通过编辑__module__或使用autoclass来完成,但我现在无法确定


解决方案

按照Sphinx文档sphinx.ext.autodoc – Include documentation from docstrings中的说明使用AutoClass。

为了使AutoClass(和任何其他AutoDoc功能)正常工作,该模块必须是可导入的。

AutoDoc将记录您的模块的API,您可以将文档字符串作为叙述性文档添加为reStrufredText格式,以解释用法。

最好将docs目录放在您的程序包目录旁边。

mypackage
├── docs
│   ├── conf.py
│   ├── other sphinx stuff
│   └── index.rst
├── mypackage
│   ├── __init__.py
│   ├── someclass.py
│   └── somefunction.py
└── setup.py
docs内组织.rst文件。您的模块是一个API,所以您可以像这样组织.rst文件:

mypackage
├── docs
    └── api
        ├── someclass.rst
        └── somefunction.rst

api目录中的每个文件中,使用适当的语法。

.. autoclass:: someclass
.. autofunction:: somefunction

前面提到的Sphinx文档中还包括几个选项。

相关文章