PyBuilder 是啥玩意儿?PyBuilder 就是专门为 Python 项件量身定做的构建工具,整个代码全是纯 Python 写的,装上以后,你可以把“跑测试、生成文档、打包发布”这些琐碎活儿全交给它。它的理念跟 Java 那些老牌构建工具(Maven、Gradle)有点像——基于依赖的插件系统,想干啥就装啥插件,灵活得很。
| | |
| 依赖管理 | 自动下载、解析 requirements.txt,保证环境一致 | python.install_dependencies |
| 单元测试 | 集成 unittest、pytest,跑完自动生成报告 | python.unittest |
| 代码覆盖率 | | python.coverage |
| 文档生成 | | python.sphinx |
| 打包发布 | | python.distutils |
| 自定义任务 | | core |
为啥要用 PyBuilder?
- • 手动操作太繁琐:每次跑测试、生成文档、打包,都得敲一堆命令,尤其是项目大了以后,容易忘记哪个步骤漏了。
- • 团队协作不统一:新人进来,环境不对,构建失败,大家只能在 Slack 里互相求助。
- • 插件生态还行:官方自带的插件已经能覆盖大多数需求,想要更高级的功能,只要自己写个插件也不难。
换句话说,PyBuilder 就是帮你把这些“重复劳动”搬到配置文件里,让 CI/CD 流程跑得更顺畅。
装起来超简单
# 正式版pip install pybuilder# 想尝鲜(pre-release)可以加上 --prepip install --pre pybuilder
装完以后,项目根目录里新建 build.py,写几行代码就能跑起来。下面给你演示一个最小示例:
# build.pyfrom pybuilder.core import use_plugin, init# 必装插件use_plugin("python.core")use_plugin("python.unittest")use_plugin("python.coverage")use_plugin("python.distutils")# 默认任务:执行完所有步骤后直接 publish(发布到 PyPI)default_task = "publish"
保存后,执行:
pyb clean install
- •
install → 安装依赖、跑测试、生成覆盖率报告、打包
如果想一步到位直接发布,直接跑 pyb(默认执行 publish)。
基本使用流程
| | |
| 1️⃣ 初始化 | pyb init | 生成默认目录结构 src/main/python、src/unittest/python |
| 2️⃣ 编写插件 | | 只要插件在 pybuilder.plugins 里能被调到就行 |
| 3️⃣ 定义属性 | @init 装饰函数里 project.set_property | 比如 project.set_property('dir_source_main_python', 'my_pkg') |
| 4️⃣ 运行任务 | pyb <task> | 常用任务:clean、install_dependencies、run_unit_tests、publish |
| 5️⃣ CI 集成 | 把 pyb install 加入 .github/workflows 或 Jenkins | |
小贴士:如果你只想跑测试,pyb run_unit_tests 就能搞定;想看覆盖率报告,pyb coverage_report。
优点 & 缺点
| |
| 全 Python | 生态相对小 |
| 插件化 | 学习曲线 |
| 配置即代码 | 文档散乱 |
| 兼容多版本 | 社区活跃度 |
小结PyBuilder 把传统的构建流程搬进了 Python 世界,用插件化的方式把测试、覆盖率、文档、打包全都串起来。装个 pip install pybuilder,写几行 build.py,基本的 CI/CD 就能跑起来。它的缺点主要是生态和社区规模不如 poetry、tox 那么大,但如果你追求“一次配置,处处可用”的便利感,PyBuilder 完全能满足需求。赶紧在你的下一个项目里试试吧,省下的时间可以去写代码、喝咖啡甚至追剧。
项目地址: https://github.com/pybuilder/pybuilder