如何从其他系统导出的.yml文件创建Anaconda环境,出现包找不到报错如何解决
问题解答
命令功能澄清
conda env create -f xxx.yml 本身会主动从配置的conda源搜索、下载并安装对应依赖,并不会只检查本地已有包,你遇到的报错和命令本身的逻辑无关。
报错原因
你手里的yml文件是通过默认的conda env export命令导出的,这种导出结果会包含包的精确版本号+平台相关的build标识,比如报错信息里py38haa244fe_1这类后缀就是Windows平台特有的build标识,如果你的设备操作系统和导出环境的设备不一致,或者你本地配置的conda源没有收录这个精确版本的包,就会触发ResolvePackageNotFound报错。
conda env create命令的适用场景
这个命令的适配性没有问题,适用场景如下:
- 同一台设备上备份、恢复自己的conda环境
- 操作系统、conda源配置完全一致的多设备之间,迁移完全一致的运行环境
当前场景的解决方案
你可以根据自己的情况选择以下任意一种方案:
- 若能联系到导出环境的同事,让对方执行
conda env export --no-builds -f environment_no_build.yml重新导出配置,该命令导出的结果只会锁定包的版本号,会删除平台相关的build标识,跨平台适配性大幅提升,你拿到新的yml后重新执行创建命令即可。 - 如果对依赖小版本精度要求不高,可以让同事执行
conda env export --from-history -f environment_simple.yml导出配置,该命令只会导出用户手动安装的顶层依赖,不会锁定传递依赖的版本,conda创建环境时会自动解析安装兼容的依赖版本,兼容性最好,仅包的小版本可能和原环境存在差异。 - 若无法重新获取导出文件,你可以手动修改现有yml文件:把每个依赖项中第二个等号及之后的build后缀全部删除,例如将
stevedore==3.3.0=py38haa244fe_1修改为stevedore==3.3.0,保存后重新执行创建命令即可。 - 执行创建命令前,建议先添加conda-forge源补充包库,避免默认源收录包不全的问题,添加命令为:
conda config --add channels conda-forge
内容的提问来源于stack exchange,提问作者jonalv
相关产品推荐
相关产品推荐

