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

Poetry配置Torch多环境安装失效,如何保留版本升级便利性?

问题描述

我用Poetry配置Torch安装时编写了如下依赖配置:

torch = [
    # Mac with apple silicon
    { markers = "sys_platform == 'darwin'", version = "^2.0.1", source = "pypi" },
    # Mac with arm docker container
    { markers = "sys_platform == 'linux' and platform_machine == 'aarch64'", version = "^2.0.1", source = "pypi" },
    # Mac with x86_64 container with cpu version only
    { markers = "sys_platform == 'linux' and platform_machine != 'aarch64'", version = "^2.0.1+cpu", source = "pytorch" }
]

执行命令 poetry export -f requirements.txt --output requirements.txt 后,生成的requirements内容不符合预期,所有平台都被指定为2.0.1+cpu版本:

torch==2.0.1+cpu ; python_version >= "3.10" and python_version < "3.11" and (sys_platform == "darwin" or sys_platform == "linux")

手动指定whl文件URL的配置能解决这个问题:

torch = [
    # Mac apple silicon
    { markers = "sys_platform == 'darwin'", url = "https://download.pytorch.org/whl/cpu/torch-2.0.1-cp310-none-macosx_11_0_arm64.whl" },
    # Mac docker arm container
    { markers = "sys_platform == 'linux' and platform_machine == 'aarch64'", url = "https://download.pytorch.org/whl/torch-2.0.1-cp310-cp310-manylinux2014_aarch64.whl" },
    # Mac with x86_64 container
    { markers = "sys_platform == 'linux' and platform_machine == 'x86_64'", url = "https://download.pytorch.org/whl/cpu/torch-2.0.1%2Bcpu-cp310-cp310-linux_x86_64.whl" },
]

但这种方式无法通过Poetry便捷升级版本,每次都需要手动更新URL,想问哪里操作有误?


问题原因与解决方案

核心问题

  1. 版本约束冲突:混用了普通版本号(^2.0.1)和带后缀的版本号(^2.0.1+cpu),Poetry在导出时会优先选择更具体的+cpu版本,并合并所有平台标记,导致所有环境都匹配这个版本。
  2. 源的元数据差异:PyPI和Pytorch官方源的包元数据格式不同,Poetry无法正确识别不同平台的版本变体,进而错误合并依赖条件。

正确配置方式

方式1:统一使用Pytorch官方源并明确平台标记

首先在pyproject.toml中添加Pytorch官方CPU源:

[[tool.poetry.source]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"

然后修改Torch的依赖配置,去掉版本后缀,让源自动匹配对应平台的包:

torch = [
    { markers = "sys_platform == 'darwin' and platform_machine == 'arm64'", version = "^2.0.1", source = "pytorch" },
    { markers = "sys_platform == 'linux' and platform_machine == 'aarch64'", version = "^2.0.1", source = "pytorch" },
    { markers = "sys_platform == 'linux' and platform_machine == 'x86_64'", version = "^2.0.1", source = "pytorch" }
]

这样Poetry会根据标记从官方源拉取对应平台的包,导出requirements时也会保留正确的平台条件,后续升级版本只需修改version字段即可。

方式2:按平台分组配置依赖

通过tool.poetry.group按平台分组管理Torch依赖,需要激活对应组才能安装,但导出时可以指定包含所有组:

[tool.poetry.group.macos_arm.dependencies]
torch = { version = "^2.0.1", source = "pytorch", markers = "sys_platform == 'darwin' and platform_machine == 'arm64'" }

[tool.poetry.group.linux_arm.dependencies]
torch = { version = "^2.0.1", source = "pytorch", markers = "sys_platform == 'linux' and platform_machine == 'aarch64'" }

[tool.poetry.group.linux_x86.dependencies]
torch = { version = "^2.0.1", source = "pytorch", markers = "sys_platform == 'linux' and platform_machine == 'x86_64'" }

导出命令:

poetry export --with macos_arm,linux_arm,linux_x86 -f requirements.txt --output requirements.txt

关键注意事项

  • 不要混用带后缀(如+cpu)和不带后缀的版本约束,Pytorch官方源会根据平台自动分发对应变体,无需手动指定后缀。
  • 优先使用Pytorch官方源而非PyPI,PyPI上的Torch包不一定包含所有平台的完整变体,容易导致解析错误。
  • 确保每个依赖项的平台标记互斥且明确,避免Poetry在导出时错误合并条件。

内容的提问来源于stack exchange,提问作者Pavan K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:15:01