你有没有经历过这种场景:写个Python小程序,想把代码打成包给别人用,结果被setup.py折磨到头秃?想在不同Python版本里跑测试,得装五六套环境手动切换?最气人的是,明明自己机器上跑得好好的,到同事电脑上就各种原版冲突报错?
Python生态确实好,但工具链是真的碎。pip管下载,virtualenv管隔离,setuptools管打包,tox管测试,twine管上传......一个正经项目光初始化工具就得折腾好几个。想全流程跑通?少说五六套工具的配置来回切,换个项目又不一样,每次上手都得重新适应,烦都烦死了。
最近我发现了个好东西——Hatch。说起来它也不是什么小众玩具,毕竟是PyPA(Python打包权威组织)下的官方项目,来头不小。
Hatch到底是个啥?
说人话就是:一个能把上面说的那些杂七杂八的功能全都集成的项目管理工具。
从新建项目、管理依赖、切换Python版本、跑测试,到打包发布PyPI,一个命令全搞定。不用来回切换,不用记忆好几套工具的配置语法。一件事只做一次,一次做到底。 Hatch的设计理念就是"环境优先",它把所有操作都装在环境这个概念里,非常清晰。更妙的是,最新版本已经内置了Ruff来做代码格式化和静态分析——Ruff比传统工具快10-100倍,几乎感觉不到延迟。
这么说可能有点抽象,下面这张表看得更直观:
| | |
| 新建项目 | hatch new myproj 一键生成,自动遵循PEP 621标准,src布局一步到位 | |
| 环境管理 | 内置环境管理,无需手动source venv/bin/activate那一套,直接hatch run就进对应环境 | virtualenv + pip |
| 依赖管理 | pyproject.toml一把锁,hatch.lock自动生成锁文件,确保团队环境一模一样 | requirements.txt + requirements-dev.txt之类的多个文件,各管各的 |
| 打包发布 | hatch build出wheel,hatch publish直接推PyPI,不用记twine那堆参数 | setup.py build bdist_wheel |
| 多版本测试 | 环境矩阵自动跑,Python版本随便配,比如python = ["3.9", "3.10", "3.11"]一行搞定 | tox |
三个让我比较动心的亮点
第一个,CLI真的快。官方说比同类工具快2-3倍。这种东西吧,吹是一回事,用了才知道延迟感确实低,几乎所有子命令都是秒回——经常要敲命令的人,这点爽感用过都懂。
第二个,跟UV深度集成。UV是Rust实现的新一代包安装器,速度比pip快几十倍。Hatch默认就可以用UV做后端,环境创建和依赖安装都快了不少,项目首次初始化少等很多时间。
第三个,项目模板太省事了。内置纯Python库、CLI工具、FastAPI应用几种模板,hatch new的时候选一下就完事,不用每次都重新搭架子。懒人必备。
怎么快速上手?
安装很简单,推荐用pipx,干净又卫生:
pip install pipx # 没装的先装一下pipx
pipx install hatch
验证一下:hatch --version。除了pipx之外,macOS可以用brew install hatch,Linux发行版通常包管理工具里也收录了。
然后新建项目:
hatch new my-first-project
进去之后核心配置都在pyproject.toml里,依赖往里面加就行。环境之间随便切,打包发布一个命令搞定。
说实话现在Python项目管理工具确实不少,Poetry、PDM、Pipenv等等,各有各的优势。Hatch的优点恰恰在于"不偏科",各个功能点都踩在现代化最佳实践上——标准化构建、可复现环境、开箱即用的测试和lint配置。再加上背靠PyPA这个官方组织,跟进PEP标准的速度确实放心,后续兼容性也有保障。
如果你已经被Python的工具碎片化搞得烦不胜烦,真的值得挪出十分钟体验一下Hatch。工具嘛,还是要选顺手的,多点时间写业务代码比啥都强。
参考链接:
GitHub:https://github.com/pypa/hatch