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

时间:2017-04-06 19:23:58

标签: python python-sphinx

假设我有一个具有以下结构的项目:

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

然后我将__init__.py作为:

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

并且someclass.py为:

class Someclass:
...

并且somefunction.py为:

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来完成,但我现在无法做到这一点

1 个答案:

答案 0 :(得分:1)

按照Sphinx文档sphinx.ext.autodoc – Include documentation from docstrings中所述使用autoclass。

为了使autoclass(和任何其他autodoc功能)起作用,模块必须是可导入的。

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

在包目录旁边有一个docs目录是个好主意。

mypackage
├── docs
│   ├── conf.py
│   ├── other sphinx stuff
│   └── index.rst
├── mypackage
│   ├── __init__.py
│   ├── someclass.py
│   └── somefunction.py
└── setup.py

.rst中整理您的docs个文件。您的模块是一个API,因此您可以组织.rst文件,如下所示:

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

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

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

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