python-markdown2:一个 Python Markdown 处理器

如果你需要在 Python 里把 Markdown 转成 HTML,可以看看 python-markdown2。这个项目由 Trent Mick 创建,在 GitHub 上有 2,816 个 Star。它存在了很多年,是一个成熟的工具。

python-markdown2 的目标是做一个快速的 Python 版 Markdown 处理器,行为对齐最早的 Perl 实现 Markdown.pl。这一点很重要,因为 Markdown 有很多实现,每个实现的行为都有细微差别。如果你之前用过原版的 Markdown,迁移到 python-markdown2 不会有太多意外。

正文顶部截图

安装通过 pip 完成:

pip install markdown2

也可以安装带可选依赖的版本,比如 Pygments 用于代码语法高亮:

pip install markdown2[all]

如果你不想安装,也可以直接复制 lib/markdown2.py 这一个文件到项目里。这个文件包含了全部核心代码,没有外部依赖。

用法分两种。作为模块:

import markdown2
markdown2.markdown("*boo!*")

或者创建实例复用:

from markdown2 import Markdown
markdowner = Markdown()
markdowner.convert("*boo!*")

命令行用法:

python -m markdown2 foo.md > foo.html

这种设计比较灵活,可以集成到脚本里,也可以直接在终端调用。

README区域截图

python-markdown2 的 extras 机制是它的一个特点。extras 用来支持 Markdown 标准语法之外的功能。目前已经实现的 extras 包括:表格、脚注、代码高亮、自动链接、目录生成、Smarty Pants 等。

启用 extras 的方式有两种。命令行:

python markdown2.py --extras footnotes foo.md > foo.html

在代码里:

markdown2.markdown("*boo!*", extras=["footnotes"])

按需加载的设计很实用。不用的功能可以不加载,处理速度也得以保持。

项目在 Wiki 上有性能对比数据,对比的是另一个 Python markdown 库。这些数据有些年头了,但可以看出作者对性能和正确性有追求。项目也提供了测试文档,方便用户验证行为。

测试方面,运行 make test 即可。测试用例覆盖了项目自有的 tm-cases,也整合了 MarkdownTest 和 MDTest 的用例。覆盖度在同类工具中算是比较好的。

项目对贡献者的要求包括:代码要符合 PEP8,测试覆盖率要够,Bug 修复要附带回归测试,测试套件要能通过,文档要更新。这些要求保证了代码质量。

总体来看,python-markdown2 做的事情就是把 Markdown 转成 HTML。在这个需求上,它做得比较扎实。快速、兼容原版、扩展丰富、测试完善。如果你在找 Python Markdown 库,这个项目可以放入候选列表。

。快速、兼容原版、扩展丰富、测试完善。如果你在找 Python Markdown 库,这个项目可以放入候选列表。

更多推荐