内容提要
这篇文章介绍了PDM的lock策略,包括解析依赖、条件依赖、lock文件的元数据和策略、更新策略等。PDM使用纯Python实现的PubGrub解析算法进行依赖解析。文章还提到PDM暂时不支持解析条件依赖,lock文件是一个TOML格式的文件,包含元数据和版本兼容情况。PDM支持不同的lock策略,可以控制依赖解析的过程。在更新lock文件中的包版本时,PDM提供了不同的更新策略。
延伸解读
条件依赖解析的局限
PDM 目前无法解析条件依赖,即根据环境标记(如 Python 版本)安装不同版本的包。这是因为其解析器将包名作为解集中的唯一键,每个包只能有一个确定版本。这一缺陷可能导致在需要条件依赖的项目中无法正确锁定版本,用户需注意或考虑其他工具。
Lock 文件版本兼容性机制
pdm.lock 文件中的 lock_version 采用三位版本号,分别表示不兼容、向前不兼容和完全兼容的改动。PDM 根据此版本号决定能否读取现有 lock 文件,若版本不兼容会提示重新生成。这确保了 lock 文件格式变化时的平滑升级,用户应关注版本号以避免意外错误。
Lock 策略的灵活控制
PDM 提供多种 lock 策略,如 cross_platform 和 static_urls,可通过命令行选项启用或禁用。禁用 cross_platform 可避免跨平台依赖差异导致的错误;启用 static_urls 则记录包 URL 便于安全审计。用户应根据项目需求调整策略,以平衡兼容性与安全性。
更新策略与版本范围尊重
PDM 提供多种更新策略,如 --update-all 和 --update-reuse,分别控制直接和间接依赖的更新范围。更新时默认尊重 pyproject.toml 中的版本范围,确保兼容性。用户可通过 --unconstrained 取消限制,但需谨慎以避免引入不兼容版本。
Q&A
PDM的lock文件是什么格式的?
PDM的lock文件是TOML格式的,包含依赖版本信息和元数据。
PDM如何解析依赖?
PDM使用纯Python实现的PubGrub解析算法,通过尝试不同版本来解决依赖冲突。
PDM目前支持条件依赖吗?
PDM暂时不支持解析条件依赖,这是其一大缺陷。
如何更新PDM的lock文件中的包版本?
可以使用不同的更新策略,通过--update-*选项来指定更新方式。
PDM的lock策略有哪些?
PDM支持多种lock策略,包括cross_platform和inherit_metadata等,可以控制依赖解析过程。
PDM如何处理跨平台依赖?
PDM可以通过命令禁用cross_platform策略,以避免跨平台锁产生错误。