我将以下包结构作为一个最小的示例(为了方便起见,全部都上载了here):
.
├── sphinx
│ ├── build
│ ├── Makefile
│ └── source
│ ├── conf.py
│ ├── index.rst
│ └── train.rst
└── train
├── __init__.py
└── train.py
在编写Python包时,必须在任何包的__init__.py
中指定__all__
常量,这样Sphinx才能将train.datasetMeta
之类的引用映射到train.train.DatasetMeta
或类似内容。但是,sphinx-apidoc
为这些包生成以下部分:
它复制了整个文档,因为它包含.. automodule:: module.file
和{-n
到{
sphinx_test/train/train.py:docstring of train.DatasetMeta:1:py:class reference target not found: train.train.DatasetMeta
我怎么解决这个问题?在
训练/火车.py
from collections import namedtuple
class DatasetMeta(namedtuple('DatasetMeta', ['dataset', 'num_classes', 'shape'])):
@property
def size(self):
'''int: Number of examples in the dataset'''
return self.shape[0]
训练/初始训练
from .train import *
__all__ = ['DatasetMeta']
狮身人面像/来源/配置文件
import os
import sys
sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('../../'))
project = 'test'
copyright = ''
author = ''
version = ''
release = '0'
extensions = [
'sphinx.ext.autodoc',
]
source_suffix = '.rst'
master_doc = 'index'
我就是搞不懂这里的逻辑是什么。在
我们可以做一件事来简化情况,那就是稍微改名:
当您从
sphinx-apidoc
生成的第一个文件中删除train.train
块时,应该可以明显地看到缺少的引用是train.train.DatasetMetaBase
。train.DatasetMeta
和train.train.DatasetMeta
的文档将引用train.train.DatasetMetaBase
;我不知道如何在不修补autodoc或添加自己的指令的情况下解决这个问题。在从这里,我可以看到一些选择:
(1)将
^{pr2}$DatasetMetaBase
移动到另一个未在__init__.py
中导入的模块。例如这样,
DatasetMeta
的autodoc引用train.abstract.DatasetMetaBase
,这在您的例子中应该是唯一的ref。在(2)创建一个单独的rst文件(比如,
hidden.rst
),该文件呈现train.train.DatasetMetaBase
的文档,但对主rst隐藏。在这应该足以将
train.train.DatasetMetaBase
添加到sphinx并解决class reference target not found
警告。在相关问题 更多 >
编程相关推荐