Conda创建环境报PackagesNotFoundError 未知pypi_0等通道如何解决
标识含义说明
你在包名后看到的pypi_0、py37、py37_cu102、py3.7_cuda10.2_cudnn7.6.5_0不是Conda通道名称,这些是包的build字符串(构建标识),用来标记包的适配环境、来源、构建版本,直接把这些字符串作为通道名添加必然会导致Conda功能异常。
各标识具体含义:
pypi_0:代表该包最初是通过pip从PyPI源安装,不是Conda生态原生构建的包py37/py3.7:代表该包基于Python 3.7版本编译适配cu102/cuda10.2_cudnn7.6.5:代表该包是适配CUDA 10.2、cuDNN 7.6.5版本的GPU编译版本,主要对应PyTorch相关依赖- 末尾的
_0:代表同版本包的构建迭代序号
报错根本原因
出现包找不到的问题核心有两点:
- 你使用的requirements.txt是混合了Conda安装包、pip安装包的导出结果,Conda本身无法识别这种携带完整构建标识的混合依赖格式,且标记为
pypi_0的包本来就不属于Conda通道默认提供的包范围 - 你当前配置的Conda通道缺少PyTorch官方源,无法找到适配CUDA10.2版本的PyTorch、torchvision、torchaudio包
解决方法
按以下步骤操作即可:
- 先创建Python 3.7版本的独立虚拟环境
conda create -n 你的自定义环境名 python=3.7 -y conda activate 你的自定义环境名
- 添加PyTorch官方Conda通道,调整通道优先级避免依赖冲突
conda config --add channels pytorch conda config --set channel_priority flexible
- 先单独安装匹配CUDA 10.2版本的PyTorch三件套
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -y
- 处理剩余依赖:
- 打开原requirements.txt,把所有包名后附带的
=pypi_0、=py37、=py37_cu102、=py3.7_cuda10.2_cudnn7.6.5_0这类构建后缀全部删除,只保留包名==版本号的标准pip格式 - 用pip安装剩余的所有依赖
pip install -r requirements.txt - 打开原requirements.txt,把所有包名后附带的
提示:网络环境差的情况下可以提前给Conda、pip配置国内镜像源,提升下载成功率和速度。
- 后续导出环境如果要跨环境复现,不要直接导出成txt格式,建议用
conda env export --from-history > environment.yml导出yml格式配置,该格式会自动区分Conda依赖和pip依赖,不会出现构建标识混入依赖名的问题,复现时直接用conda env create -f environment.yml即可。
内容的提问来源于stack exchange,提问作者Gooby
相关产品推荐
相关产品推荐

