主要观点:3 月下旬发布的 Setuptools 78.0.1 版本引发大量问题,包括破坏大量已有的 sdist 自动构建过程,仅 5 小时后就发布 78.0.2 回滚更改,引发关于如何限制未来破坏性更改影响的讨论,许多用户认为响应不足,此前 Setuptools 版本也有类似问题,此事件引发对 Python 包安装器开发者、普通 Python 开发者和最终用户的教训,包括 Python 打包系统的复杂性及改进机会等。
关键信息:
- 3 月下旬发布 Setuptools 78.0.1,半小时后收到第一个 bug 报告,很快发现更改破坏性远超预期,5 小时后发布 78.0.2 回滚。
- Python 常用 Python 原生打包系统分发代码,有 wheel 和 sdist 两种格式,创建包复杂,大多工作委托给构建后端。
- Setuptools 78.0.0 增加对 setup.cfg 内容的更严格验证,78 版本将警告变为错误,导致很多 sdist 构建失败,如 Requests 库等。
- 报告和更新方面,初始响应遭质疑,更新已发布包工作量大,构建隔离使 Setuptools 降级困难,每个 sdist 都可能成为定时炸弹,破环性更改会引发连锁反应。
- 类似事件中,之前 Setuptools 版本的破坏性更改也不少,如 72 版本、77 版本等。
- 批评方面,用户质疑 deprecation 的合理性,78.0.1 版本未从 PyPI 删除引发反对,Setuptools 开发速度过快等。
- 讨论方面,需要更好地意识到 Setuptools 的更改及处理流程,如构建后端可设置版本上限、安装器使用不同逻辑选择后端版本、显示构建警告等。
重要细节: - setup.cfg 使用 INI 格式,历史上 hyphens 和 underscores 在键名中被视为等效,2018 年有 bug 报告,2021 年添加 deprecation 警告,78 版本将其变为错误。
- 78.0.1 补丁删除了 Setuptools 集成测试中的 Requests,Requests 开发者也提交 pull 请求修复,但下一个小版本预计会完全现代化其打包设置。
- 关于构建后端和安装器的讨论,如 pip 开发者的观点和提议,以及其他类似工具的做法等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。