将 `resolvelib` 替换为 `nab-resolve` 以进行依赖关系解析
作者: notatallshaw创建于 2026年5月16日更新于 2026年9月13日
标签project: vendored dependencystate: needs discussion
昨天在包装峰会上,我刚刚宣布了一项我一直在开发的项目,名为 nab: https://GitHub.com/notatallshaw/nab nab 是一个可以生成锁文件 (pylock.toml 和带有或不带有哈希值的依赖项) 以及下载所有依赖项的工具。它受到一些库的支持,包括 nab-resolve,这是一款基于 PubGrub 算法构建的新型通用依赖项解析器,但特别考虑了 Python 包装规范和生态系统中的问题。至少还需要几个月的时间,我才能考虑提交一个 PR 来替换 pip 中的 resolvelib。但我现在想要提出这个问题,以便开始讨论。有很多细节需要讨论,但从我的角度来看,有一个重大的架构问题需要解决: pip 是否只想要提供核心依赖项解析器库,并负责实现所有 Python 包生态系统的优化,还是应该同时提供提供者库 (nab-Python) 并将优化添加到其中? 目前 pip 负责在提供者文件中实现特定的优化:
https://GitHub.com/pypa/pip/blob/main/src/pip/_internal/resolution/resolvelib/provider.py 然而, resolvelib 的基础算法相对简单,没有太多的实现优化的手段,而 nab-resolver 提供了更多的手段和更多的信息,可以为特定形状的依赖图实现优化,而且将这些优化放在核心算法中是没有意义的,因此它们需要由提供者来实现。因此,可能有必要让 nab 为 pip 提供完整的提供者,然后 pip 可以驱动该提供者,而不是驱动核心算法。
内容来源: pypa/pip