文章摘要
制定Python锁文件规范耗时4年,主要难点在于需要全面记录代码依赖项的安装方式,包括源码树、源码分发和wheel包等多种形式,并确保能准确安装。这涉及大量细节工作,如完善direct_url.json规范等。
文章总结
标题:为何制定Python锁文件规范耗时四年?
核心内容概述:
本文是作者在EuroPython 2025主题演讲的总结,详细记录了Python社区制定pylock.toml锁文件规范的曲折历程。这一看似简单的技术标准实际耗费了四年时间,涉及教育普及、技术妥协和多方协调。
锁文件的核心挑战
功能复杂性
- 锁文件需完整记录代码依赖的安装方式,涵盖源码树(source trees)、源码分发(sdists)和轮子文件(wheels)。
- 关键难点在于处理多平台兼容性、可选依赖项(extras)和条件依赖(如操作系统限定),最终形成跨平台多用途锁文件(与单用途锁文件相对)。
技术实现难题
- 依赖解析本身是NP完全问题。
- 需平衡机器可写与人工可读性,默认安全性,安装速度,并支持不同语言实现的生成器与安装器。
四年历程的关键节点
- 2019年:通过106篇社区讨论启动
requirements.txt v2提案,未达成共识。 - 2020年:作者转向推进
pyproject.toml的PEP 621标准。 - 2021年:提出PEP 665(仅支持wheels的高安全锁文件),因忽略sdist工作流遭359篇讨论后于2022年初被拒。
- 2023年:作者独立开发原型,完成
packaging.metadata库和依赖解析器,放弃锁定构建后端依赖的设想。 - 2024年:受工具
uv的竞争影响,PEP 751草案经历两次重大修改(从集合式到图结构,再因版本号争议被迫简化)。 - 2025年:通过严格 deadline 管理,最终在3月31日通过支持多用途锁文件的PEP 751,总讨论量超1800篇。
现状与反思
- 落地成果:PDM已支持
pylock.toml,uv和pip也在跟进。 - 作者表态:经历六年(含辅助讨论)和两次PEP迭代后,作者宣布退出大型打包项目,转向Python其他领域贡献。
(注:原文中的图片链接、部分技术术语的详细解释及个别次要时间节点已精简,保留核心事件链与关键结论。)
评论总结
以下是评论内容的总结:
关于锁文件的作用
- 主要观点:锁文件用于记录代码依赖及其安装方式
- 关键引用:
"A lock file is meant to record all the dependencies..."(flowerthoughts)
"It's about dependency locking in Python packaging."(flowerthoughts)
对UV工具的评价
- 主要观点:UV工具被认为是Python包管理20年来的重大进步,因其绕过无休止的PEP讨论,直接提供高效解决方案
- 关键引用:
"UV is the best thing to happen to python packaging in two decades..."(klustregrif)
"by circumventing the endless non productive discussions on peps..."(klustregrif)
对开发效率的质疑
- 主要观点:质疑为何Python社区解决问题需要多年时间,而其他语言(如Rust)能更快推进
- 关键引用:
"Why couldn't everyone be flied to the same place and have it all figured out in a week..."(charcircuit)
"some things take their time to finally become widespread..."(pjmlp)
对锁文件设计的批评
- 主要观点:认为锁文件是糟糕的工程实践,限制了包版本的灵活性
- 关键引用:
"lock files are poor engineering to begin with..."(eqvinox)
"we've just given up on any kind of package version flexibility."(eqvinox)
对Python社区决策效率的批评
- 主要观点:Python社区因过度讨论和委员会决策导致进展缓慢,与其他技术栈形成对比
- 关键引用:
"With Python/Django you learn not to wait because nothing is going to change."(miiiiiike)
"The precursor to a Django REST API package...has been a draft DEP since early 2014."(miiiiiike)
对命名和术语的争议
- 主要观点:批评“锁文件”这一术语容易与文件锁混淆,建议使用其他名称
- 关键引用:
"Why did we have to call them 'lock files?'"(eduction)
"Call them literally anything else..."(eduction)
对决策模式的讨论
- 主要观点:认为“仁慈的独裁者”模式(如Linus Torvalds)比委员会共识更高效,但也存在风险
- 关键引用:
"having a benevolent dictator sometimes results in better progress than committees."(blindriver)
"bureaucracy kills great ideas because bureaucrats...don’t want to make changes."(blindriver)
对共识驱动文化的质疑
- 主要观点:询问是否存在成功的共识驱动文化案例,暗示系统性问题的普遍性
- 关键引用:
"what is a good example of a consensus driven culture...?"(truelson)
"This is a systems problem. Successful examples wanted."(truelson)
总结:评论围绕Python包管理的技术设计(如锁文件)、社区决策效率、术语争议和治理模式展开,既有对UV工具的肯定,也有对Python生态长期拖延的批评,同时对比了不同技术栈的决策效率。