Pelican、Nikola、Lektor、MkDocs:Python 的静态站点生成器生态

举报
DevUp 发表于 2026/11/06 21:59:18 2026/11/06
【摘要】 不想为个人博客或文档站维护一套 Django 和 PostgreSQL,Python 生态还有 Pelican、Nikola、Lektor、MkDocs 四款静态生成工具,以及 Wagtail 的静态导出路线。这篇拆清它们的定位、协议与边界。

Wagtail 和 django CMS 都是完整的 Django 应用,跑起来得配 Python 运行时和 PostgreSQL 数据库。如果只是搭一个个人技术博客、项目文档站,或者几页不常改的产品介绍,不想为几篇 Markdown 文章长年维护一套数据库和后端进程,Python 生态里还有另一条路:静态站点生成器(SSG)。

先把名分定清楚:静态站点生成器不建后台、不存内容,只在构建时把本地的 Markdown 或 reStructuredText 文件渲染成 HTML 页面——它们是发布工具,不是 CMS。多人协作审批、在线改稿、会员权限这些事,纯静态方案接不住。

即便算上静态站点生成器,Python 在个人建站圈的声量也远不如 JavaScript 生态的 Hexo、Astro、Next.js,或者 Go 生态的 Hugo。原因很实在:

  • 构建速度拼不过编译型语言:Hugo 用 Go 写,几千篇文章的构建在毫秒到秒级;Python 的 Pelican、Nikola 跑同样规模要慢一个量级,不过百来篇规模的个人博客体感差别不大;
  • 前端生态天然在 JavaScript 那边:现代静态站越来越吃前端组件(React、Vue、Tailwind CSS),直接用 Astro 或 Next.js 做静态输出更顺手,专门切到 Python 跑构建的人自然就少了;
  • Python 开发者有自己顺手的场景:写文章、做数据分析、维护开源库文档都在 Python 环境里,全套工具链留在同一个 venv、用熟悉的 Jinja2 模板改页面,不用为了发个站再装一套 Node.js 的 node_modules。

Python 的静态生成工具活得相当稳,各自卡住了明确的生态位。下面看四款代表工具。


Pelican:Python 静态博客的老牌主力(AGPL-3.0,最新正式版 4.11.0/2025-01)

Pelican 2010 年由法国开发者 Alexis Métaireau 发起,名字是法语单词 calepin(笔记本)的字母重排,目前由 Justin Mayer 等维护。它是 Python 生态里资历最深、插件积累最厚的静态博客生成器。

  • 输入格式:原生支持 reStructuredText 和 Markdown,装上插件也能读 AsciiDoc;
  • 模板与输出:用 Python 开发者最熟的 Jinja2 写模板;内置 Atom 与 RSS Feed 生成、代码语法高亮(基于 Pygments)、多语言文章关联,还带从 WordPress、Dotclear 或 RSS Feed 导入旧文章的命令行工具;
  • 插件机制:Pelican 4.5 引入命名空间插件(Namespace Plugins)后,原来集中存放的单体仓库 getpelican/pelican-plugins 已归档只读,现迁移到 pelican-plugins GitHub 组织下拆成 70 多个独立仓库,直接用 pip install pelican-xxx 按需安装;
  • 协议留意一笔:Pelican 的仓库 LICENSE 原文是 AGPL-3.0(不是 BSD 或 MIT)。不过它只是本地或 CI 里的命令行构建工具,生成出来的 HTML、CSS 静态文件不受 AGPL 传染;只要你不修改 Pelican 源码并把它包装成在线建站服务对外提供,日常拿它生成博客或商业站点没有开源传染风险。

谁适合用:日常主力语言是 Python、想用 Markdown 或 reStructuredText 写技术博客、喜欢用 Jinja2 自己改主题的个人开发者。


Nikola:开箱原生支持 Jupyter Notebook(MIT,最新正式版 8.3.3/2025-05)

Nikola 2012 年由 Roberto Alsina 发起,定位跟 Pelican 接近,但有一项核心差异:开箱原生支持 .ipynb(Jupyter Notebook)格式,不需要额外装插件。

把 .ipynb 文件直接丢进文章目录,Nikola 构建时会把里面的代码单元格、运行输出、图表和 Markdown 说明文字直接渲染成静态网页。Pelican 和 MkDocs 也能通过第三方插件(如 pelican-jupyter、mkdocs-jupyter)支持 Notebook,但插件跟主程序的版本兼容得自己盯,不如 Nikola 内置省心。

除此之外,Nikola 的模板引擎同时支持 Mako 和 Jinja2,内置多语言站点构建(官网标明支持超过 40 种界面语言)、图片相册生成,并用 doit 做增量构建——改一篇文章只重新渲染受影响的页面,不用全站重跑。

谁适合用:数据科学、机器学习方向的从业者。日常笔记和实验本来就写在 Jupyter Notebook 里,用 Nikola 可以直接把 .ipynb 当博客文章发出去,省掉导出再排版的步骤。


Lektor:带本地管理界面的中间态(BSD-3-Clause,最新正式版 3.3.12/2024-08)

Lektor 2015 年由 Flask 与 Jinja2 的作者 Armin Ronacher 发起。官方给自己的定位既不是纯静态生成器,也不是传统服务端 CMS,而是介于两者之间的文件型静态内容管理系统(File-based CMS)。

它补上了纯静态工具最缺的那块短板:自带一个基于 Flask 和 React 的本地 Web 管理界面。在本地跑起 lektor server,浏览器打开就能在图形界面里新建页面、填表单字段、传图片;保存之后,数据不进数据库,而是按目录树写成纯文本的 contents.lr 文件,还能在 .ini 模型文件里自定义每个页面的字段结构。写完点击构建,产出的依然是一包纯静态 HTML,直接推到 GitHub Pages 或 Cloudflare Pages 就能上线。

代价看版本日期就能算出来:最新正式版 3.3.12 发布于 2024 年 8 月,此后两年多没有发新正式版(代码仓库在 2026 年 10 月仍有维护提交),主题和插件生态比 Pelican 小得多。

谁适合用:想要静态站的零服务器部署成本,又不想天天对着纯文本 Front Matter 手敲字段、希望在本地有个图形后台管内容结构的个人或小团队。


MkDocs:技术文档站的事实标准(BSD-2-Clause,最新正式版 1.6.1/2024-08)

MkDocs 从一开始就不做博客,专攻项目技术文档。一个 mkdocs.yml 配置文件加上一目录 Markdown,几分钟就能跑起一套结构清晰的文档站。

MkDocs 本体最新正式版 1.6.1 停在 2024 年 8 月,但撑起它半壁江山的主题项目 Material for MkDocs(mkdocs-material,MIT,最新正式版 9.7.6/2026-03)一直保持高频更新。配齐这套组合后,纯静态输出就能拿到:

  • 纯前端离线全文搜索:构建时生成搜索索引,不依赖后端服务就能搜全文;
  • 文档专属交互:深色模式切换、代码块一键复制与行号高亮、选项卡、提示框(Admonitions)、API 参数表;
  • 多版本文档切换:配合官方 mike 工具,可以按版本号(如 v1.0、v2.0)并排托管多套历史文档。

在技术文档这个细分场景里,MkDocs + Material 已经走出了 Python 圈——大量非 Python 项目的开源文档也直接拿它搭。至于 Python 生态里另一款老牌文档工具 Sphinx(BSD-2-Clause,最新正式版 9.1.0/2026-03),默认走 reStructuredText 语法、擅长从 Python 源码 docstring 自动抽 API 参考手册;如果写的是面向用户的产品手册或通用技术文档,MkDocs 的 Markdown 工作流要轻快得多。


另一条中间路:Wagtail 后台 + 静态导出

如果团队里有不懂技术的运营人员,必须有个真正的在线后台、要配审批流和细粒度权限,但上线端又想白拿 CDN 静态托管的速度和安全性,Python 生态还有一套组合拳:Wagtail + wagtail-bakery(MIT,最新正式版 0.9.0/2024-08,仓库现归 wagtail-nest 维护)。

工作方式是把编辑和发布拆开:

  • 编辑在内网跑真 CMS:Wagtail 部署在内部服务器或本地环境,编辑打开浏览器进 wagtail.admin 排页面、走审批,体验跟普通动态站一模一样;
  • 发布靠命令烤成静态文件:内容定稿后跑一条 manage.py build,wagtail-bakery 会把全站页面渲染成纯静态 HTML 导出,直接推上 S3、Cloudflare Pages 或任意 CDN;公网不暴露 Django 进程和数据库,被攻击面直接归零。

代价是你要同时维护一套内网 Django 环境和一条静态发布流水线,而且只适合纯展示型内容——只要页面上有用户登录、实时搜索或表单提交,还是得留后端接口。


该选静态工具,还是回真 CMS?

把这几条路摆在一起,分界线不在技术栈,在「谁来写内容」和「页面要不要实时交互」:

  • 写作者就是开发者自己,习惯 Markdown + Git 提交流程:写技术博客用 Pelican,笔记全在 Jupyter Notebook 里用 Nikola,做项目文档直接上 MkDocs + Material;
  • 只有一两个人维护、想要个本地图形界面填字段,但线上不想养服务器:用 Lektor;
  • 编辑不懂 Git、多人协作要走审批流,或者站点有搜索、会员、动态筛选:静态工具补不齐这笔账,老老实实回 Wagtail 或 django CMS。

至于「项目里要卖货、管订单和库存」——那既不是静态工具的事,也不是内容管理系统该硬扛的活。Python 生态里专门干电商的是另一套引擎。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。