今年以来,Python 打包社区依然很活跃,有对 PEP 582 的最新修改,也出现了一些新的提案, 本文将略作总结。
群众的呼声——统一的包管理器
在去年 9-10 月份的时候,PyPA 曾做了一次问卷调查,目的是了解用户对于 Python 打包现状的看法,以及对于未来的期望1。在收集上来的问卷中,有以下用户的回复:
回应 1: Unify the multiple tools. It’s good to have new ideas and new implementations, but it has to converge after a while. If my package has a compiled part, I’m stuck with setuptools, but all other tools are pushed forward while not covering this feature.
回应 2: There should be one– and preferably only one –obvious way to do it. Get rid of the fragmentation
回应 3: I definitely want to Python to introduce the One True packaging tool, ideally both easy as Rust’s cargo (where building, adding dependencies, running tests, code checking and deploying are all subcommands) and extensible (support for different build regimes, extensions in foreign languages etc). Package installing is easy, package building is a wild west at the moment, and no one tool is good enough for all use cases.
其中 Cargo
被高频地提及,很多来自其他语言的用户对 Python 多个打包工具并存的现状感到困惑,希望 Python 社区能够统一打包工具,以便于用户更好地使用2。 但我要为 Python 说句公道话,造成这种现状的原因并不是官方不给力,而是基于多种原因34:
- Python 社区本身就是分裂的,有很多不同的开发者群体,每个群体都有自己的需求和工作流,这些需求往往是相互矛盾的,因此很难找到一个统一的方案来满足所有人的需求。这也是 Python 在近 10 年大流行之下,带来的结果。比如现在流行的 包管理工具 Pipenv, Poetry 和 PDM,基本上都是给 Web 开发者设计的,却很少考虑到 C 扩展包、MLer 的需求(只能说尽量支持,但是不是很好)。所以这些工具,给 Web 开发者使用是最合适的。
- PyPA(Python Packaging Authority)5 只是一个松散的组织,没有一个强大的驱动,因此很难像 Rust, Dart, .NET 那样,由官方去推动一个统一的打包工具。所以有提议将名称里的 Authority 改成 Association 以减少误解。
引用一下 Thea Flowers 的推特:
Go ahead and bookmark this so you can link to it every few months when another baby faced, naive, precious little developer thinks that they can slay the hydra because they only see one head. — Stargirl