Hacker News 中文摘要

RSS订阅

为何耗时四年才制定出锁定文件规范 -- Why it took 4 years to get a lock files specification

文章摘要

制定Python锁文件规范耗时4年,主要难点在于需要全面记录代码依赖项的安装方式,包括源码树、源码分发和wheel包等多种形式,并确保能准确安装。这涉及大量细节工作,如完善direct_url.json规范等。

文章总结

标题:为何制定Python锁文件规范耗时四年?

核心内容概述:

本文是作者在EuroPython 2025主题演讲的总结,详细记录了Python社区制定pylock.toml锁文件规范的曲折历程。这一看似简单的技术标准实际耗费了四年时间,涉及教育普及、技术妥协和多方协调。


锁文件的核心挑战

  1. 功能复杂性

    • 锁文件需完整记录代码依赖的安装方式,涵盖源码树(source trees)、源码分发(sdists)和轮子文件(wheels)。
    • 关键难点在于处理多平台兼容性、可选依赖项(extras)和条件依赖(如操作系统限定),最终形成跨平台多用途锁文件(与单用途锁文件相对)。
  2. 技术实现难题

    • 依赖解析本身是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其他领域贡献。

(注:原文中的图片链接、部分技术术语的详细解释及个别次要时间节点已精简,保留核心事件链与关键结论。)

评论总结

以下是评论内容的总结:

  1. 关于锁文件的作用

    • 主要观点:锁文件用于记录代码依赖及其安装方式
    • 关键引用:
      "A lock file is meant to record all the dependencies..."(flowerthoughts)
      "It's about dependency locking in Python packaging."(flowerthoughts)
  2. 对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)
  3. 对开发效率的质疑

    • 主要观点:质疑为何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)
  4. 对锁文件设计的批评

    • 主要观点:认为锁文件是糟糕的工程实践,限制了包版本的灵活性
    • 关键引用:
      "lock files are poor engineering to begin with..."(eqvinox)
      "we've just given up on any kind of package version flexibility."(eqvinox)
  5. 对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)
  6. 对命名和术语的争议

    • 主要观点:批评“锁文件”这一术语容易与文件锁混淆,建议使用其他名称
    • 关键引用:
      "Why did we have to call them 'lock files?'"(eduction)
      "Call them literally anything else..."(eduction)
  7. 对决策模式的讨论

    • 主要观点:认为“仁慈的独裁者”模式(如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)
  8. 对共识驱动文化的质疑

    • 主要观点:询问是否存在成功的共识驱动文化案例,暗示系统性问题的普遍性
    • 关键引用:
      "what is a good example of a consensus driven culture...?"(truelson)
      "This is a systems problem. Successful examples wanted."(truelson)

总结:评论围绕Python包管理的技术设计(如锁文件)、社区决策效率、术语争议和治理模式展开,既有对UV工具的肯定,也有对Python生态长期拖延的批评,同时对比了不同技术栈的决策效率。