通过Conda.yml的pip可安装的包,在setup.cfg的pip中安装失败
问题原因与解决方案
你遇到的核心问题是Conda仓库(conda-forge)与PyPI仓库的包分发逻辑不一致,导致部分旧版本包在PyPI上无法找到,而Conda环境中可以正常安装。具体到torch这类包,还有额外的平台/硬件适配因素:
关键原因
- 包仓库差异:conda-forge会为更多平台、硬件编译适配的包版本,而PyPI上的旧版本包(如torch 1.13.1)可能仅保留特定CUDA版本/平台的轮子,甚至部分旧版本会被移除或标记为不可用。
- pip版本差异:你Conda环境中使用的是pip 22.3.1,而当前用于安装的pip版本可能较新,其索引查找逻辑对旧包的支持有变化,导致无法检索到目标版本。
解决方案
1. 针对PyTorch系列包指定官方安装索引
PyTorch的旧版本需要从官方维护的索引获取,而非默认的PyPI。可以通过以下两种方式处理:
- 安装时手动指定索引:执行安装命令时添加额外索引(根据你的CUDA版本选择对应链接,比如CUDA 11.7):
pip install . --extra-index-url https://download.pytorch.org/whl/cu117 - 通过pyproject.toml配置默认索引:在项目根目录创建
pyproject.toml,添加PyTorch的索引配置,这样安装时会自动读取:[project] dependencies = [ "torch==1.13.1", "torchvision==0.14.1", "torchaudio==0.13.1", "pandas==1.5.3", "gym==0.25.1", "ale-py==0.7.5", ] [tool.pip] extra-index-url = ["https://download.pytorch.org/whl/cu117"]
2. 降级pip至Conda环境中的版本
将当前环境的pip降级到22.3.1,匹配你原Conda环境的pip版本,避免新pip的索引逻辑问题:
pip install pip==22.3.1 pip install .
3. 验证目标版本的可用性
先确认PyPI或官方索引中是否存在目标版本的适配轮子:
- 用pip查询torch的可用版本:
pip index versions torch
如果结果中没有1.13.1,说明该版本在默认PyPI索引中已不再提供,必须使用PyTorch官方索引。
4. 针对平台差异添加环境标记(可选)
如果你的包需要适配多平台,可以在setup.cfg中使用环境标记,指定不同平台的版本或安装逻辑:
install_requires = pandas==1.5.3 gym==0.25.1 ale-py==0.7.5 torch==1.13.1; platform_system == "Linux" and platform_machine == "x86_64" torch==1.13.1; platform_system == "Windows" torchvision==0.14.1; platform_system == "Linux" and platform_machine == "x86_64" torchvision==0.14.1; platform_system == "Windows" torchaudio==0.13.1; platform_system == "Linux" and platform_machine == "x86_64" torchaudio==0.13.1; platform_system == "Windows"
内容的提问来源于stack exchange,提问作者Sam Lerman
相关产品推荐
相关产品推荐

