conda build跨机器运行报ResolvePackageNotFound依赖错误
根因分析
这个问题是Windows环境下conda-build的配置加载层级逻辑导致的,和构建环境的包版本、频道本身可用性无关:
- 普通
conda install命令会加载当前会话能读取到的所有配置(包括你存在H盘映射网络路径下的用户级.condarc),所以能正常识别自定义file协议频道,安装依赖没问题。 conda build在创建隔离构建/测试环境的阶段,不会主动加载存放在映射网络盘(你机器A的用户配置文件路径是H:\.condarc,属于网络映射盘)的用户级配置,只会读取系统盘下的系统级conda配置、当前用户主目录(系统盘下的C:\Users\用户名\路径)下的用户配置。你虽然在conda info输出里能看到自定义频道,那是因为外层的conda命令加载了H盘的配置,但内层启动的build求解进程没有加载到这部分配置,所以求解依赖时找不到自定义频道里的包。- 你之前克隆构建环境、移除重加频道都没解决问题,是因为这些操作修改的都是H盘下的用户配置,build阶段根本没读取这部分配置;显式加
-c file:////custom/channel参数时,频道参数是直接通过命令行传给build求解进程的,不需要从配置文件读取,所以能正常构建。
解决方案
按稳定性优先级排序,选任意一个即可:
- 方案1(最推荐,全局生效):将自定义频道写入系统级conda配置,所有场景下的conda命令(包括build)都会强制加载这部分配置。执行命令时加
--system参数即可:
执行完成后可以打开conda config --system --add channels file:////custom/channelC:\ProgramData\Miniconda3\.condarc确认频道已经写入,之后直接执行conda build .即可正常构建。 - 方案2(项目级配置,适配多机器构建):在待构建的recipe根目录下新建
conda_build_config.yaml文件,在文件内直接指定构建时使用的频道列表,配置跟随项目代码走,不会因为机器全局配置差异出问题:channels: - open3d-admin - file:////custom/channel - conda-forge - defaults - 方案3(无需修改系统/项目配置):把H盘下的
.condarc文件复制一份到系统盘用户目录C:\Users\jpoppinga\.condarc路径下,conda-build默认会读取这个路径下的配置文件,复制完成后即可正常识别自定义频道。
验证方式
配置修改完成后,可以先执行conda build . --dry-run做干运行测试,如果没有抛出ResolvePackageNotFound错误,就说明配置已经被conda-build正确加载,不需要跑完整构建流程即可确认问题修复。
内容的提问来源于stack exchange,提问作者Jann Poppinga
相关产品推荐
相关产品推荐

