首页/开发/CI/CD 与发布速查/Python 依赖锁定
构建与制品管理58 条

Python 依赖锁定

用 pip-tools / Poetry / uv 等生成含全部传递依赖与哈希的锁文件;CI 按锁安装,升级走显式产物变更。

CI/CD 与发布速查开发更新于 2026-10-13

Python 依赖锁定是什么

Python 依赖锁定用 pip-tools、Poetry、uv 等工具把全部传递依赖解析成带版本与哈希的锁文件。核心是「声明与锁定分离」:源码里只写直接依赖与范围(requirements.in、pyproject.toml),锁文件负责可复现(requirements.txt、poetry.lock、uv.lock)。CI 按锁安装,任何依赖变化都体现为锁文件的 diff,像代码一样走评审。

基本信息

适用平台pip / Poetry / uv / pipenv 等 Python 依赖管理链路
工具pip-tools(requirements.in → requirements.txt)、Poetry、uv
哈希pip 的 --require-hashes 可校验每个分发件
规则声明与锁定分离;锁文件入版本库并评审

典型使用场景

  • CI 与生产部署:每次安装结果一致,告别「昨天好好的今天装不上」
  • 安全审计:锁文件与哈希让依赖清单可核查、可追溯
  • 多环境一致:开发、测试、生产消费同一份锁定结果
  • 定期升级:用机器人重编译锁文件,升级变更走评审
  • 离线构建:锁文件加预下载 wheel,支撑内网离线安装
  • 版本矩阵:多 Python 版本并行测试,锁文件与目标版本一起验证

pip-tools 流程

pip-tools 流程
pip-compile requirements.in -o requirements.txt  # 生成含全量传递依赖的锁
pip-compile --upgrade-package requests  # 定向升级单个包
pip install --require-hashes -r requirements.txt  # 按锁安装并逐件校验哈希
# uv 等价流程:uv lock、uv sync --frozen
# Poetry 等价流程:poetry lock、poetry install --sync

工具与文件对照

工具声明文件锁文件
pip-toolsrequirements.inrequirements.txt
Poetrypyproject.tomlpoetry.lock
uvpyproject.tomluv.lock
pipenvPipfilePipfile.lock
锁文件跨平台注意环境标记:不同操作系统可能解析出不同闭包,按目标平台生成,Windows 与 Linux 别共用一份。

与校验相关的开关

机制作用注意
--require-hashes校验每个分发件锁文件需含全量哈希行
--hash 行单包哈希声明由编译工具自动生成
--no-deps只装锁定集合防止解析阶段引入新依赖
平台差异用分文件管理:按目标系统生成不同锁文件(如一份 Linux、一份 Windows),别试图让一份锁跨平台。
编译锁文件要走受控源:统一索引与代理地址,否则不同网络环境可能解析出不同闭包,锁定失去意义。

易错点

  • 只钉直接依赖:传递依赖仍会漂移,用编译型锁定覆盖全部闭包
  • 锁文件长期不更新:漏洞修复进不来,配合更新机器人定期批量升级
  • CI 装了锁文件但没开哈希校验:投毒分发件照样装上,--require-hashes 要与锁文件配套
  • 多人本地各自生成锁文件:内容反复抖动、diff 噪声大,指定单一环境生成并统一评审
  • 开发环境用宽松范围装包:本地可运行与锁文件不一致,冲突延迟到发布阶段才暴露
  • 把索引地址硬编码进锁文件:换网络后装不上,索引走环境配置,锁文件专注版本与哈希

数据来源与参考

  • pip-tools 文档
  • Poetry 文档《Lock file》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌