python - 强制 Sphinx 在 Python 文档字符串中解释 Markdown 而不是 reStructuredText

标签 python markdown python-sphinx sphinx-napoleon

我正在使用 Sphinx 来记录一个 python 项目。我想在我的文档字符串中使用 Markdown 来格式化它们。 即使我使用 recommonmark扩展名,它仅涵盖 .md手动编写的文件,而不是文档字符串。

我用 autodoc , napoleonrecommonmark在我的扩展中。

如何使 sphinx 解析 Markdown 在我的文档字符串中?

最佳答案

Sphinx 的 Autodoc 扩展发出一个名为 autodoc-process-docstring 的事件每次它处理一个文档字符串。我们可以使用该机制将语法从 Markdown 转换为 reStructuredText。
不幸的是,Recommonmark不公开 Markdown-to-reST 转换器。它将解析后的 Markdown 直接映射到 Docutils对象,即与 Sphinx 相同的表示本身从 reStructuredText 内部创建。
相反,我使用 Commonmark用于我的项目中的转换。因为它很快——比 Pandoc 快得多, 例如。速度很重要,因为转换是即时进行的,并单独处理每个文档字符串。除此之外,任何 Markdown-to-reST 转换器都可以。 M2R2将是第三个例子。其中任何一个的缺点是它们不支持 Recommonmark 的语法扩展,例如对文档其他部分的交叉引用。只是基本的 Markdown 。
要插入 Commonmark 文档字符串转换器,请确保已安装该软件包(pip install commonmark)并将以下内容添加到 Sphinx 的配置文件 conf.py :

import commonmark

def docstring(app, what, name, obj, options, lines):
    md  = '\n'.join(lines)
    ast = commonmark.Parser().parse(md)
    rst = commonmark.ReStructuredTextRenderer().render(ast)
    lines.clear()
    lines += rst.splitlines()

def setup(app):
    app.connect('autodoc-process-docstring', docstring)
同时,Recommonmark 为 deprecated 2021 年 5 月。Sphinx 扩展 MyST ,一个功能更丰富的 Markdown 解析器,是推荐的替代品 by Sphinxby Read-the-Docs . MyST does not yet support文档字符串中的 Markdown 也是如此,但与上面相同的钩子(Hook)可用于通过 Commonmark 获得有限的支持。
此处概述的方法的一种可能替代方法是使用 MkDocsMkDocStrings插件,它将完全从流程中消除 Sphinx 和 reStructuredText。

关于python - 强制 Sphinx 在 Python 文档字符串中解释 Markdown 而不是 reStructuredText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56062402/

相关文章:

internationalization - 重构文本和术语表术语翻译

python - 如何用函数记录一个文件?

git - 如何在 gitlab markdown 中引用分支?

python - 有没有办法结合CreateView和UpdateView?

python - 撤回时 Tkinter 不更新

python - NLTK正则表达式,具体语法怎么写?

Github 页面 : where's the markdown?

Markdown 未编号部分但需要 anchor

python - 如何单独生成 index.rst 或通过 sphinx-apidocs 生成除 conf.py 之外的所有内容?

python - 如何在维基百科页面中抓取一页的多个表格?