使Sphinx从pydoc生成RST类文档

问题描述 投票:7回答:3

我目前正在将所有现有(不完整)文档迁移到Sphinx

问题是文档使用Python docstrings(该模块是用C编写的,但可能没有关系,并且必须将类文档转换为Sphinx可用的形式。

sphinx.ext.autodoc,但会自动将当前文档字符串放入文档中。我想基于当前文档字符串在(RST)中生成一个源文件,然后可以对其进行手动编辑和改进。

您将如何将文档字符串转换为Sphinx的RST?

python python-sphinx pydoc
3个回答
13
投票

autodoc确实会生成RST,但没有官方方法可以将其删除。最简单的方法是通过更改sphinx.ext.autodoc.Documenter.add_line方法向我发送它得到的行。

由于我只想一次迁移,所以输出到stdout对我来说已经足够了:

def add_line(self, line, source, *lineno):
    """Append one line of generated reST to the output."""
    print(self.indent + line)
    self.directive.result.append(self.indent + line, source, *lineno)

现在,自动文档在运行时在stdout上打印生成的RST,您只需将其重定向或复制到其他位置。


3
投票

猴子修补自动文档,因此无需编辑任何内容即可工作:

import sphinx.ext.autodoc
rst = []
def add_line(self, line, source, *lineno):
    """Append one line of generated reST to the output."""
    rst.append(line)
    self.directive.result.append(self.indent + line, source, *lineno)
sphinx.ext.autodoc.Documenter.add_line = add_line
try:
    sphinx.main(['sphinx-build', '-b', 'html', '-d', '_build/doctrees', '.', '_build/html'])
except SystemExit:
    with file('doc.rst', 'w') as f:
        for line in rst:
            print >>f, line

0
投票

据我所知,没有自动工具可以做到这一点。因此,我的方法是编写一个小脚本,该脚本读取相关模块(基于sphinc.ext.autodoc)并将doc字符串放入文件中(格式正确)。

© www.soinside.com 2019 - 2024. All rights reserved.