Pelican
使用 Python、Jinja 和 Markdown 或 reStructuredText 构建内容网站的静态生成器。
项目概述
Pelican 将 Article、Page 和结构化元数据交给 Jinja 主题生成静态网站,内置分类、标签、作者、Feed、多语言关联和内容导入,并可通过 Python 插件扩展。
Pelican 是采用 AGPL-3.0 许可证、使用 Python 编写的成熟静态站点生成器。它读取 Markdown、reStructuredText 或 HTML 内容,将 Article、Page、Author、Category、Tag 和 Translation 等对象交给 Jinja 主题,最终输出完全静态的网站。Pelican 提供简洁的命令行、内容缓存、Atom/RSS、Pygments 代码高亮和旧站导入工具,并通过 Python 命名空间插件与 Signal 扩展 Reader、Generator 和构建生命周期。
主要特点
Pelican 将 Python 配置、清晰的文章与页面模型、Jinja 主题和信号插件组合成稳定的静态出版流程。
Article 与 Page
Article 表示带日期的文章,Page 表示 About、Contact 等非时序内容,并分别拥有独立 URL、模板和输出规则。
Markdown 与 reStructuredText
可使用 Markdown、reStructuredText 或 HTML 写作,并通过 Reader 插件支持 AsciiDoc 等额外输入格式。
灵活的内容元数据
Title、Date、Category、Tags、Authors、Slug、Summary、Status、Lang 和自定义字段可控制发布与主题渲染。
Jinja 主题系统
主题可使用继承、Macro、Filter 和丰富上下文构建首页、文章、页面、作者、分类、标签与归档页面。
分类、标签与作者
核心生成器会建立 Category、Tag、Author 及日期归档,并提供相应集合给 Jinja 模板和 Feed。
Feed 与多语言内容
可生成 Atom/RSS;相同标识的不同语言文章会建立翻译关联,更完整的多语言子站可通过插件实现。
Python 插件与 Signal
PyPI 命名空间插件可自动发现,并通过 Signal 添加 Reader、Generator、元数据处理、资源优化和发布后任务。
导入、缓存与选择性写入
工具可从 WordPress、Dotclear 和 Feed 导入内容,构建缓存与选择性输出则减少重复生成成本。
适用场景
适合熟悉 Python、希望用 Markdown 或 reStructuredText 管理长期内容,并部署到普通静态托管平台的项目。
Python 技术博客
Python 配置、Pygments、Markdown/reST 和 Jinja 对 Python 开发者自然,适合教程与工程文章。
开源项目网站
源码、文档和网站可共用 Git 工作流,Page、Feed 和静态部署适合项目主页与发布日志。
研究与学术写作
reStructuredText、脚注、代码块和自定义元数据适合研究笔记、实验记录与课程资料。
多作者出版
Author、Category、Tag、日期归档和 Feed 可组织团队博客、刊物和社区投稿。
迁移旧博客
导入工具可接收 WordPress、Dotclear 与 RSS 内容,再将结果纳入纯文本和 Git 管理。
Python 定制内容管线
插件、Signal、Reader 与 Generator 适合从 API、数据文件或专用格式生成额外页面和索引。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
Pelican 擅长的地方
- Python 配置与扩展直接,适合 Python 团队深度定制
- 同时支持 Markdown 和 reStructuredText,覆盖博客与技术文档写作
- Jinja 模板成熟,继承、Macro 和 Filter 便于维护主题
- 文章、页面、作者、分类、标签、Feed 和翻译关联内置完整
- 内容缓存和选择性写入能改善重复构建速度
- 输出完全静态,无数据库和生产 Python 运行时要求
需要注意
采用前应考虑的问题
Pelican 本身采用 AGPL-3.0;组织在修改、分发或以网络服务方式提供修改版本前,应让法务确认相应义务。
安装时应使用 pelican[markdown] 或显式加入 Python-Markdown,并固定所需 Markdown Extension。
社区主题和插件由不同维护者提供,应检查 Pelican 版本兼容性、依赖安全、许可证和最后更新时间。
核心可关联文章翻译,但语言子目录、翻译模板和独立语言首页通常需要 i18n_subsites 等插件。
复杂的 Sass、JavaScript 打包、图片优化和指纹通常需要插件或独立前端工具,应提前设计构建顺序。
修改元数据插件或 Reader 后若结果未更新,应使用 --ignore-cache 或暂时关闭内容缓存再排查。
快速开始
在虚拟环境中安装带 Markdown 支持的 Pelican,运行交互式脚手架,添加文章、配置站点并生成 output 目录。
bashpython --version
python -m venv .venv
source .venv/bin/activate
python -m pip install "pelican[markdown]"
mkdir my-pelican-site
cd my-pelican-site
pelican-quickstartpython# pelicanconf.py
AUTHOR = "Open Source Notes"
SITENAME = "开源项目志"
SITEURL = ""
PATH = "content"
TIMEZONE = "Asia/Shanghai"
DEFAULT_LANG = "zh-cn"
ARTICLE_URL = "posts/{slug}/"
ARTICLE_SAVE_AS = "posts/{slug}/index.html"
PAGE_URL = "{slug}/"
PAGE_SAVE_AS = "{slug}/index.html"
DEFAULT_PAGINATION = 10
RELATIVE_URLS = TruemarkdownTitle: Hello Pelican
Date: 2026-07-24 10:00
Modified: 2026-07-24 10:00
Category: 开源工具
Tags: Pelican, Python, SSG
Slug: hello-pelican
Authors: Open Source Notes
Summary: 使用 Python 与 Jinja 发布第一篇静态文章
Pelican 可以读取 Markdown 或 reStructuredText,
并通过 Jinja 主题生成完全静态的网站。
## 下一步
将内容保存到 `content/hello-pelican.md`。html<!-- theme/templates/index.html -->
{% extends "base.html" %}
{% block content %}
<main>
<h1>{{ SITENAME }}</h1>
{% for article in articles_page.object_list %}
<article>
<h2>
<a href="{{ SITEURL }}/{{ article.url }}">
{{ article.title }}
</a>
</h2>
<p>{{ article.summary }}</p>
</article>
{% endfor %}
</main>
{% endblock %}python# 安装插件后,Pelican 默认会自动发现命名空间插件:
# python -m pip install pelican-sitemap
# 如果需要显式控制插件和执行顺序:
PLUGINS = [
"pelican.plugins.sitemap",
]
SITEMAP = {
"format": "xml",
"priorities": {"articles": 0.7, "pages": 0.5},
}bashpelican content -s pelicanconf.py
pelican --listen
# 浏览器访问 http://localhost:8000
# 正式发布时加载生产配置:
pelican content -s publishconf.py下一步:将开发设置保留在 pelicanconf.py,把正式域名、Feed 和删除输出目录等生产选项放入 publishconf.py;CI 中固定 Python 与依赖版本,并先构建到临时目录验证链接和永久地址。
类似项目
这些工具同样将文本内容与主题模板生成静态网站,但 Pelican 更贴近 Python、Jinja 和 reStructuredText 生态。
Pelican vs Hexo
Pelican 与 Hexo 都围绕文章、页面、主题、分类和插件构建静态博客;Pelican 使用 Python 与 Jinja,并原生支持 reStructuredText,Hexo 使用 Node.js 并拥有数量更大的博客主题和 JavaScript 插件生态。
| 比较维度 | Pelican | Hexo |
|---|---|---|
| 核心实现 | Python,通过虚拟环境与 pip 管理 | JavaScript,通过 Node.js 与 npm 管理 |
| 内容格式 | Markdown、reStructuredText 和 HTML | 以 Markdown 为主,可通过 Renderer 扩展 |
| 模板系统 | Jinja 主题、继承、Macro 和 Filter | Nunjucks、EJS、Pug 等可插拔 Renderer |
| 内容模型 | Article、Page、Author、Category、Tag 和 Translation | Post、Page、Draft、Category、Tag 和 Scaffold |
| 扩展方式 | Python 命名空间插件、Signal、Reader 和 Generator | npm 插件、scripts 和 Extend API |
| 主题生态 | 规模较小,适合自行编写 Jinja 主题 | 博客主题数量丰富,中文社区资源较多 |
| 发布工具 | Python 配置、Make/Invoke 或自定义脚本 | CLI 与 Deployer 插件提供一体化命令 |
| 更适合 | Python 团队、reST 内容和定制出版管线 | JavaScript 用户、个人博客和主题快速搭建 |
如果团队熟悉 Python、需要 reStructuredText 或希望用 Jinja 和 Signal 构建专用内容管线,Pelican 更自然;如果目标是快速选择成熟博客主题、复用中文社区方案,或主要使用 JavaScript 与 npm,Hexo 更省力。选择 Pelican 时还应评估 AGPL-3.0 义务,并用真实主题验证插件兼容性和前端资源流程。
资料核验
版本、维护信息与本页采用的官方资料来源。
本次核验覆盖 Pelican 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 4 月 20 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。