py2htmlblog:把 Markdown 变成博客,就这么简单
这是什么
py2htmlblog 是一个 Python 写的静态博客生成器。给它 Markdown 文章、分类信息和一个 HTML 模板,它就能生成一个完整的静态网站,丢到任何地方都能跑——GitHub Pages、虚拟主机、对象存储,甚至 U 盘。
它模仿了老牌博客工具 ThingamaBlog 的设计理念(模板 + 数据 = 静态页面),但用 Python 重写,去掉了对 Java 的依赖,并加入了现代博客需要的所有功能。
能做什么
- 写文章:用 Markdown 写,带 frontmatter 元数据。格式简洁,任何编辑器都能打开
- 自动构建:一键生成完整的静态站点,首页、归档、分类、文章页、RSS、sitemap 全搞定
- 多套模板:内置 19 套主题模板,包括从 WordPress 移植的 iNove 经典主题和 17 套 ThingamaBlog 原装模板
- URL 兼容:生成的 URL 与 ThingamaBlog 完全一致(
archives/2014/03/entry_1.html),迁移老博客不会丢搜索引擎索引 - 多种发布方式:FTP、SFTP、Git 推送,一条命令部署到任何地方
- GUI 界面:PyQt 写的桌面编辑器,实时 Markdown 预览,不用碰命令行也能写博客
- ZIP 模板包:模板可以打包成 ZIP,系统自动加载,方便分发和分享
为什么又造一个轮子
ThingamaBlog 是个很好的工具,但它依赖 Java 运行环境,模板语法也相对封闭。当博客从 Windows 迁移到 GitHub Pages 后,每次更新都要手动编辑 HTML,很不方便。
py2htmlblog 的目标就是:保留 ThingamaBlog 的优点(模板分离、静态生成、URL 稳定),同时用 Python 让它更轻便、更开放、更现代化。
技术栈
| 组件 | 技术 |
|---|---|
| 语言 | Python 3 |
| 模板引擎 | 自研(类似 Jinja2 语法) |
| Markdown | 自研解析器(支持中文) |
| GUI | PyQt5 |
| 部署 | FTP / SFTP / Git |
项目结构一览
python-main/
├── data/ # 所有数据
│ ├── info.json # 站点配置
│ ├── category.json # 分类列表
│ ├── links.json # 友链列表
│ └── post/ # 文章(Markdown + frontmatter)
├── templates/ # 19 套主题模板
│ ├── default/ # 默认主题
│ ├── inove/ # iNove 1.2.3(WordPress 移植)
│ └── ... # 17 套 ThingamaBlog 原装模板
├── mdblog/ # 待发布文章目录
├── wwwroot/ # 生成后的静态站点(直接部署)
├── main.py # 命令行入口
├── publish.py # 站点生成器
├── deploy.py # 发布模块(FTP/SFTP/Git)
├── convert_thingama_templates.py # 模板转换工具
└── gui.py # PyQt 桌面编辑器
和同类工具的区别
| 特性 | py2htmlblog | Hugo | Jekyll | Hexo |
|---|---|---|---|---|
| 语言 | Python | Go | Ruby | Node.js |
| 模板兼容 ThingamaBlog | ✅ | ❌ | ❌ | ❌ |
| 内置 FTP/SFTP 发布 | ✅ | ❌ | ❌ | ❌ |
| ZIP 模板包 | ✅ | ❌ | ❌ | ❌ |
| 桌面 GUI 编辑器 | ✅ | ❌ | ❌ | ❌ |
| URL 迁移兼容 | ✅ | ⚠️ | ⚠️ | ⚠️ |
谁适合用
- 从 ThingamaBlog / WordPress 迁移博客的人
- 喜欢用 Markdown 写文章、不想碰数据库的人
- 想把博客托管在 GitHub Pages 上的人
- 需要 FTP 直传虚拟主机的传统站长
- 喜欢一切尽在掌控的"静态站点原教旨主义者"
许可
MIT License。随便用,随便改,随便分发。