PDM 内部机制(2)

PDM 内部机制(2)

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

本文介绍了PDM基于最新版本2.13的锁定策略,使用纯Python实现的PubGrub算法解决依赖关系,锁定文件包含版本信息和元数据,不支持条件依赖,版本号表示兼容性,锁定策略包括跨平台和继承元数据,还包含依赖组和内容哈希,支持禁用锁定策略和更新策略。

🔎

延伸解读

条件依赖的当前限制

PDM 目前不支持条件依赖,即根据环境标记(如 Python 版本)安装不同版本的包。这是因为其依赖求解器将包名作为解决集中的唯一键,每个包只能有一个确定版本。作者承认这是 PDM 的一个主要缺陷,并欢迎社区贡献代码来解决。

锁定文件版本号的兼容性规则

pdm.lock 中的 lock_version 是三位版本号,用于表示锁定文件的兼容性。第一位表示不向后兼容的更改,第二位表示向后兼容但向前不兼容的更改,第三位表示完全兼容的更改。例如,版本 4.4.2 可以读取 4.3.0、4.4.0、4.4.3,但无法读取 5.1.0 或 3.0.0。PDM 根据此版本号决定是否尝试读取锁定文件或提示用户重新生成。

锁定策略的灵活控制

PDM 的锁定策略可以通过命令行选项调整。例如,使用 --strategy=no_cross_platform 可以禁用跨平台锁定,仅针对当前环境。其他策略如 static_urls 会记录包文件的 URL,便于安全审计;inherit_metadata 则计算包的最终标记,使安装时仅依赖锁定文件。用户可以根据需要启用或禁用这些策略。

更新策略与版本约束

PDM 提供多种更新策略:--update-all 更新所有包,--update-reuse 仅更新直接依赖,--update-eager 更新指定依赖及其间接依赖,--update-reuse-installed 尽量复用已安装版本。更新时仍会遵守 pyproject.toml 中的版本范围,但可通过 --unconstrained 选项移除约束。这些策略帮助用户平衡更新范围与稳定性。

❓

Q&A

PDM的锁定策略是什么?

PDM的锁定策略包括跨平台和继承元数据,用户可以禁用某些策略。

PDM如何解决依赖关系?

PDM使用PubGrub算法,通过选择未解决的依赖、获取可用版本列表和检查依赖冲突来解决依赖关系。

pdm.lock文件包含哪些信息?

pdm.lock文件是TOML格式,包含所有依赖版本信息和元数据,如依赖组、锁定策略和内容哈希。

PDM支持条件依赖吗?

PDM目前不支持条件依赖,原因是依赖求解器将包名编码为解决集中的键。

如何更新PDM中的包版本?

PDM支持通过命令行选项更新包版本,提供多种更新策略,如--update-all和--update-reuse。

PDM的解析过程包括哪些步骤?

解析过程包括选择未解决的依赖、获取可用版本列表、检查依赖冲突等步骤。

🏷️

标签

➡️

继续阅读