假设我有一个具有以下结构的项目:
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.Someclass
和mypackage.somefunction.somefunction
因此只有mypackage.Someclass
和mypackage.somefunction
可用,对吧?
但事实是,Sphinx实际上是在记录mypackage.someclass.Someclass
和mypackage.somefunction.somefunction
,而不是mypackage.Someclass
和mypackage.somefunction
。
对于mypackage.somefunction.somefunction
,如果我导入mypackage
,它甚至无法访问,这非常糟糕。
那么,是否可以使用Sphinx文档mypackage.Someclass
和mypackage.somefunction
?根据我在其他答案中读到的内容,可以通过编辑__module__
或使用autoclass
来完成,但我现在无法做到这一点
答案 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文档中还有几个选项。