You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Sphinx正确格式化Python文档字符串中的Markdown代码示例

解决Sphinx解析Markdown代码块时行合并的问题

嗨,我完全懂你遇到的这个闹心问题——用Markdown格式写的代码块,在Sphinx生成的文档里居然把相同缩进的行合并了,太影响可读性了。下面给你两个实用的解决方案,你可以根据自己的需求选:

方案一:改用reStructuredText原生代码块语法

既然Sphinx原生对reST支持更好,直接把文档字符串里的Markdown代码块换成reST的code-block指令就行,能确保代码块被正确识别和格式化:

修改前(Markdown格式)

def example_func():
    """
    示例函数说明
    
    使用示例:
        print("Hello, Sphinx!")
        print("Fix code block issue")
    """

修改后(reST格式)

def example_func():
    """
    示例函数说明
    
    使用示例:
    .. code-block:: python
    
        print("Hello, Sphinx!")
        print("Fix code block issue")
    """

注意要给code-block指令单独占一行,代码内容再缩进4个空格,这样Sphinx就会把这段当成独立的代码块,不会再合并行了。

方案二:让Sphinx兼容Markdown文档字符串解析

如果你不想修改已有的Markdown格式代码块,可以通过安装扩展让Sphinx支持Markdown语法,推荐用m2r2(它是m2r的维护分支,适配新版Sphinx):

  1. 安装扩展
    在终端运行:

    pip install m2r2
    
  2. 配置Sphinx的conf.py
    打开项目根目录下的conf.py,找到extensions列表,添加m2r2

    extensions = [
        # 保留你已有的扩展,比如 'sphinx.ext.autodoc',
        'm2r2'
    ]
    

    配置完成后,Sphinx就能正确解析文档字符串里的Markdown代码块(不管是4空格缩进还是用```包裹的格式),行合并的问题就解决了。

问题根源说明

Sphinx默认以reStructuredText作为解析语言,在reST规则里,单纯的4空格缩进会被当成普通缩进段落,相同缩进的行就会被合并成一段文本——这就是你看到代码行被合并的原因。只有用reST的code-block指令,或者让Sphinx支持Markdown解析,才能让代码块被正确识别。

内容的提问来源于stack exchange,提问作者Idan Arye

火山引擎 最新活动