Conda环境blas包锁定在1.0版本无法升级的原因排查方法
Conda 环境BLAS版本锁定排查方法
按以下步骤依次排查,可直接定位锁版本的根因:
- 先查反向依赖
先安装依赖树查询工具conda-tree,直接查所有依赖blas的已安装包:
输出结果中会标注每个包对blas的版本要求,凡是明确约束conda install -n base conda-tree -c conda-forge conda tree depends blas --reverseblas=1.0或blas 1.0*的包,就是直接锁版本的来源。 - 模拟升级看冲突日志
不需要实际执行升级,跑dry-run模拟安装目标版本的blas,conda的解算器会直接抛出完整冲突链:
日志里会明确写出是哪个包的版本约束和blas 2.21不兼容,还是通道配置导致解算器选不到高版本。conda install blas=2.21=mkl --dry-run - 检查手动锁定配置
两类手动锁版本的配置会强制固定包版本:- 全局conda配置中的固定包列表,执行命令查看:
如果输出包含blas相关版本条目,执行conda config --show pinned_packagesconda config --remove pinned_packages <对应blas条目>删除即可。 - 当前环境下的pin文件,路径为
$CONDA_PREFIX/conda-meta/pinned,如果文件存在,打开后删除所有blas相关的版本约束行即可。
- 全局conda配置中的固定包列表,执行命令查看:
- 排查通道配置与缓存问题
执行以下命令查看通道配置:
如果同时启用了defaults和conda-forge源,且通道优先级不是conda config --show channels channel_prioritystrict,很容易出现解算器优先匹配defaults源旧依赖树的情况——blas 1.0 mkl是defaults源的长期留存旧版本,和conda-forge的2.x版本依赖链不兼容。这种情况先清理本地缓存再重新解算:conda clean -a -y
注:近1个月conda-forge源的blas 2.x版本做了依赖结构重构,将原单包整合的BLAS实现拆分为了多实现元包结构,如果环境内存在从defaults源安装的旧版numpy、scipy等科学计算包,且这些包未同步升级,就会强制要求blas停留在1.0版本以满足旧依赖约束。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

