如何在Poetry中安装无GPU依赖的torch==2.0.1(间接依赖场景)
解决间接依赖torch时仅安装CPU版本的问题
问题背景
- 项目间接依赖
torch==2.0.1,仅需在CPU环境运行 - torch自带的cuda/cublas/cudnn等GPU相关组件占用了镜像中4.5GB空间(总镜像大小6.5GB)
- 使用Poetry 1.8.2,运行环境为
Linux 6.6.22-linuxkit x86_64 - 曾尝试在Dockerfile中设置
ARG CUDA_VISIBLE_DEVICES=""后执行poetry install,但该环境变量仅作用于运行时,无法改变安装过程 - 已知直接依赖torch时可指定
cpuonly版本,但当前torch为间接依赖,无法直接修改上游依赖声明
可行解决方案
1. 在pyproject.toml中覆盖间接依赖
Poetry允许通过显式声明torch来覆盖间接依赖的版本和包源,指定CPU专用的wheel包:
[tool.poetry.dependencies] python = "^3.x" # 保留你的其他直接依赖 torch = { version = "2.0.1", url = "<对应你Python版本的CPU版torch wheel地址>" }
根据你使用的Python版本(如cp39对应Python3.9、cp310对应Python3.10),找到PyTorch官方提供的Linux x86_64 CPU版本wheel包地址替换占位符,然后执行:
poetry lock --no-update poetry install
2. 使用约束文件强制指定CPU版本
创建constraints.txt文件,内容如下:
torch==2.0.1+cpu
执行安装时指定该约束文件,Poetry会优先使用符合约束的CPU版本:
poetry install --constraint constraints.txt
这种方式无需修改pyproject.toml,适合临时场景或不想提交配置变更的情况。
3. Docker构建时预安装CPU版torch
在Dockerfile中先手动安装CPU版本的torch,再执行poetry install,让Poetry复用已安装的包,避免下载GPU版组件:
# 先安装CPU版torch,替换为对应Python版本的CPU包源 RUN pip install torch==2.0.1+cpu -f <PyTorch CPU包源地址> # 执行poetry install,跳过已安装的torch RUN poetry install --no-root --no-directory
4. 临时修改poetry.lock(不推荐)
直接在poetry.lock中找到torch的条目,将其url替换为CPU版本的wheel地址,然后执行:
poetry install --no-root
注意:这种修改会在下次执行poetry update时被覆盖,仅适合临时应急使用。
验证安装结果
安装完成后,运行以下代码确认torch为CPU版本:
import torch print(torch.cuda.is_available()) # 输出应为False
内容的提问来源于stack exchange,提问作者codeech
相关产品推荐
相关产品推荐

