You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline中Poetry构建Wheel时如何锁定依赖精确版本?

解决Azure DevOps Pipeline中Poetry构建Wheel的精确依赖问题

问题背景

我的pyproject.toml依赖配置如下:

[tool.poetry.dependencies]
pandas = ">=1.4.0"

在Azure DevOps流水线中执行了以下命令:

poetry lock --no-update
poetry install --with dev

安装过程中已解析并使用精确版本(如pandas==1.4.4),poetry.lock也正确记录了这些版本,但执行poetry build后生成的Wheel文件仍保留原始版本限定符>=1.4.0,而非lock文件中的精确版本。

已尝试的操作:

  • 用poetry show验证解析后的依赖版本
  • 用unzip -l dist/*.whl检查Wheel包内容

需要实现:让构建出的Wheel包依赖使用poetry.lock中的精确版本,而非pyproject.toml的版本范围。

可行解决方案

方案一:自动同步lock文件版本到pyproject.toml

通过脚本或工具将poetry.lock中的精确依赖同步到pyproject.toml,再执行构建:

  1. 导出lock文件中的精确依赖到临时Toml文件:
poetry export --without-hashes --format=toml --output=temp_deps.toml
  1. 使用文本处理工具(如yq、Python脚本)将临时文件中的依赖替换到pyproject.toml的[tool.poetry.dependencies]区块(注意保留Python版本约束)。
  2. 执行构建:
poetry build

方案二:使用Poetry插件实现精确版本构建

安装poetry-plugin-build-exact插件,构建时自动采用lock文件中的精确版本:

poetry self add poetry-plugin-build-exact
poetry build

方案三:手动固定pyproject.toml依赖版本

直接修改pyproject.toml中的依赖为lock文件里的精确版本(如pandas = "1.4.4"),再执行poetry build。此方法适合版本长期稳定的项目,但每次lock更新都需手动同步。

说明

Poetry的设计逻辑是:poetry.lock用于开发环境的确定性安装,而Wheel包的依赖声明默认遵循pyproject.toml的版本范围(面向分发场景的兼容性)。若需分发带有精确依赖的Wheel,需主动同步lock文件的版本到构建配置中。

内容的提问来源于stack exchange,提问作者yashaswi k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:42:32