2022 年 4 月 22 日,我在 GitHub 上建了一个仓库。

那天它只有一个 README、一份 setup.py,和一堆我自己在用的脚本。

四年后——

  • GitHub 1366 个 star,305 个 fork,29 位贡献者
  • PyPI 累计下载 40 万次,最近一年每天还有 300-700 次
  • 73 个技能,覆盖 PDF、Word、Excel、PPT、邮件、微信、图片、视频、OCR
  • 上周还在提交代码

项目地址:

https://github.com/CoderWanFeng/python-office

这四年有人问我:这项目收益怎么样?一个人维护累不累?值不值得?

今天不聊收益,聊点别的——我想把它当成一个"四年长跑的实验"来复盘。


一、它最开始不是给谁做的

现在回头看 README 上那句"the most popular Python office-automation library in the Chinese-speaking world",说实话有点心虚。

它一开始根本不是为了"给谁做"而写的。

2019 年我在汽车行业一家上市公司做程序员,团队用 Java 和 C,我一个学 Python 的在里面特别憋屈。

憋屈归憋屈,但我当时干了一件挺大胆的事——我想让整个部门都转用 Python。

写脚本、帮他们改工具、写文档、做内部小系统,能想到的办法都试了。

那两年我下班后每天 6 个小时(18:00-24:00),一半时间写文章,一半时间看教程。

python-office 就是从那个时候长出来的。

一开始它甚至不叫这个名字,也没有文档,没有版本管理,只是一堆躺在某个文件夹里的 .py 文件。

后来我做自动化办公内容,学员天天问我同一个问题:"老师,这些 Excel 到底怎么才能一键搞定?"

我回答了上百遍。

第 100 遍的时候,我意识到:不该再回答第 101 遍,应该把它写成一个库。

于是 2020 年我开始动手,2022 年 4 月正式发布。


二、我做对的三个决定

决定一:先做"自己天天用"的功能

这个库最早的一批功能,全是我上班时真的要用、但嫌麻烦的东西:

Excel 合并、PDF 转 Word、PDF 加水印、图片转格式、批量重命名……

没有一个功能是"我觉得大家可能会需要"。

这个选择后来救了我。2020 年我做过一次"瞎讲"式的内容尝试——讲"1 亿怎么花"、讲形而上学话题、追各种热点——现在想想那些全是无用功。一个内容账号想靠追热点活下来,方向错了就是错了。

但 python-office 不一样,因为它有根:它一开始就是我自己每天要干的活。

决定二:先做"一行代码",而不是"功能强大"

这是 python-office 最重要的产品决策。

很多 Python 办公库的做法是给你一堆参数、让你自己研究怎么组合。我的做法是:90% 的场景,一行代码直接出结果。

1
2
3
from skills.pdf import pdf2docx

pdf2docx(input_file='./test.pdf', output_file='./test.docx')

不用学类、不用理解继承、不用看一屏参数表。

我后来才明白,这个决策才是"普通人能不能用起来"的分水岭。 库的技术含量不重要,能不能被一个完全不懂 Python 的人用起来,才重要。

决定三:把子库拆开

这是 2025 年才做对的事。

主包 python-office 装下来体积不小,因为里面塞了 PDF 图像处理、Excel 读取、视频抽帧、OCR 依赖……有人就在评论区问:"我就转个 PDF,装这么多东西干嘛?"

于是我把功能拆成了独立可安装的子库:

popdf、poexcel、poword、poimage、poocr、poppt、povideo、poemail……

想装哪个装哪个。

1
2
pip install popdf      # 只装 PDF 相关
pip install poexcel # 只装 Excel 相关

轻装这件事,用户是会用脚投票的。


三、我也做错了很多事

复盘如果只讲对的部分,那和自我宣传没区别。

错误一:文档一直在拖

从 2022 年发布到现在,文档欠债一直在累积。

我太熟悉这些代码了,所以总觉得"用户应该能看懂"——这是我作为作者最大的傲慢。

新用户不知道该 import 哪个模块,不知道参数叫什么,不知道该看哪个文档。他打开 README 看到那 70 多个功能,第一反应是关掉。

到现在,文档和单元测试覆盖率 STILL 是我最欠的两笔债。

错误二:issue 积压到 33 个

33 个 open issue 躺在那里。

有些是环境问题(Windows 上装某个依赖报错),有些是文档没写清楚,有些是真 bug。

我有一部分回复了,一部分没回。

我知道这不叫"开源精神",这叫"我先顾我的"。但诚实地说:当一个项目的用户量超过一个人的时间,你必然要选:先做新功能,还是先还债。

我选的是先做新功能。这不对,但我没打算装作它对。

错误三:一个人扛了太久

29 位贡献者,这是个不错的数字。但看贡献分布会发现:主力还是我一个人。

我一直觉得"我再多写一点就行了",结果就是——单元测试写不动、文档写不动、新功能一加就欠更多债。

这是一个典型的"技术人的自作聪明"陷阱:觉得只有自己能写好,结果把自己写死了。

我现在在公开招募开源伙伴,统一的参数命名、统一的代码风格、每个功能独立目录,欢迎来提 PR。

错误四:太早追求"全"

刚有起色的时候,我很想做一个"什么都能干"的大库。

结果是每个功能都浅。

现在回头看,"先做深一个场景,再横向铺开"才是对的顺序——但我花了两年才想明白。


四、2025 年之后:AI 改变了这个库

2025 年之后,我给每个技能都加了两样东西:SKILL.md 和 YAML 描述。

这不是为了赶时髦。

是因为我发现——现在有越来越多的朋友,是让 AI 帮他们写代码,而不是自己写。

当 AI 接手的时候,它需要知道:

  • 这个库能干什么
  • 有哪些功能、分别在哪个模块
  • 每个功能的调用方式和参数
  • 什么场景该用哪个

以前这些信息散在文档和视频里,人得自己去找。现在,我把它们整理成机器能读的形式,直接喂给 AI。

1
2
3
4
---
name: pdf2docx
description: 将 PDF 文件转换为 Word 文档(.docx),支持单文件和批量转换。当用户提到 PDF 转 Word、PDF 转 docx 时使用。
---

你只需要对 AI 说一句:"把这个 PDF 转成 Word",它自己就能找到 pdf2docx,自己填参数,自己调通。

这是 python-office 这两年最重要的变化。 库的门槛从"你要会写 Python",降到了"你会说人话"。

这也算是给那些"我不懂编程"的人,准备的一份礼物——虽然我做了四年才想明白这件事。


五、写在最后

四年,1366 个 star,40 万次下载。

这个数字对我来说意味着什么?

意味着有 40 万次,某个人在自己的工作里卡住了,敲了一行 pip install python-office,然后事情办成了。

他们大概率不知道我是谁,也不关心 star 数。

这就对了。

我 2019 年在汽车厂写那些没人看见的脚本时,没人知道那是 python-office 的第 0 行代码。我也没想过它会变成什么。

所以现在有人问我"这项目收益怎么样",我的回答是:

它给我带来的最大东西,是"我在写一个真的有人用的东西"这件事本身。

而这也是我职业生涯里,最不后悔的一个决定。


有想给 python-office 提 PR 的朋友,仓库在这儿:

https://github.com/CoderWanFeng/python-office

想用但不知道用哪个功能的,看这里:

https://www.python-office.com/

想找人一起维护、加微信备注"开源":

https://www.python4office.cn/wechat-group/


你用 python-office 做过最有意思的一件事是什么?评论区聊聊。


相关阅读


免费用AI