Python 打包一年后:回顾 2023 年的 Python 打包
内容提要
2023年Python打包生态仍呈碎片化:工具繁多、标准不一,PyPA文档互相矛盾。setuptools使用最广,Poetry次之;Rye、Posy等新工具用Rust编写。PEP 582被否决,锁文件无统一标准,PEP 723仅解决单文件依赖。多数工具维护者极少,Hatch、PDM近乎一人项目。作者呼吁PyPA合并重复项目,与社区共建统一易用的打包工具。
延伸解读
工具碎片化与维护风险
文章指出,Python打包工具数量众多且标准不一,setuptools和Poetry占据主要使用份额,但许多工具维护者极少。例如Hatch和PDM近乎一人项目,Hatch的bus factor为1,这意味着关键维护者离开可能导致项目停滞。这种碎片化不仅增加用户选择成本,也让数千个项目依赖脆弱的基础设施,风险不容忽视。
标准推进的困境
2023年打包标准进展有限:PEP 582被否决,锁文件仍无统一标准,PEP 723仅解决单文件依赖。作者认为,社区更关注边缘场景而非大型项目需求,且PyPA文档互相矛盾,讨论论坛甚至锁帖回避反馈。这种治理模式导致重复劳动和标准割裂,与其它语言生态的连贯性形成对比。
新工具与语言选择争议
Rye和Posy等新工具用Rust编写,旨在管理Python解释器和项目,但作者质疑为何贡献打包工具需要学习Rust。同时,Ruff等Rust工具的性能优势引发对Python自身定位的思考。文章认为,这种趋势可能让Python显得像“玩具语言”,并增加社区参与门槛,不利于工具生态的长期健康发展。
学习曲线与“简单”的代价
作者以Word和LaTeX类比,指出Python入门简单但项目结构复杂化后,虚拟环境、pip与系统包管理器的冲突等问题陡增。PEP 723只缓解单文件场景,而文件夹组织、依赖管理仍需大量学习。相比之下,Java/C#的IDE强制项目系统降低了认知负担。文章呼吁打包工具应像成熟生态一样“开箱即用”,而非让开发者陷入配置泥潭。
Q&A
2023年Python打包工具的使用情况如何?哪个工具最流行?
根据对PyPI包的PEP 517构建后端分析,setuptools最流行(约5万个包),Poetry第二(约4.1万个),Hatchling第三(约8100个)。其他超过500个用户的工具包括Flit(4400)、PDM(1300)、Maturin(1300)。
PEP 582为什么被否决?现在有替代方案吗?
PEP 582提议引入__pypackages__目录实现项目本地安装,类似node_modules,但于2023年3月被否决,因其设计存在缺陷(如不递归搜索父目录、仅关注简单用例)。至今没有提出类似的新标准。
Python锁文件目前有统一标准吗?各工具如何实现?
没有统一标准。Pipenv、Poetry、PDM各有不兼容的锁文件实现;Rye基于pip-tools;Hatch核心无锁文件,等待标准。PEP 665于2022年1月被否决,作者正开发可能成为标准的原型mousebender。
2023年Python打包领域有哪些新工具?它们有什么特点?
新工具包括Posy和Rye,均用Rust编写,目标是管理Python解释器和项目,但不提供自定义构建后端(使用hatchling等)。Posy基于PyBI格式,目前是概念验证;Rye较完整可用,使用预构建Python。
Python打包工具的主要维护者情况如何?存在什么风险?
多数工具维护者极少:Hatch和PDM近乎一人项目(Hatch的bus factor为1),Poetry有两位主要贡献者,Rye有一位主要贡献者。这导致数千个项目依赖bus factor为1或2的工具,存在维护风险。
作者对PyPA和Python打包生态的未来有什么建议?
作者呼吁PyPA关闭或合并重复项目,与社区(包括非PyPA项目维护者)合作构建一个全面、易用的统一打包工具,让打包对普通开发者透明,而不是专注于规范和治理。