Conda还有另一种blas
,mkl
等的变体,我不知道,我无法解决,非常感谢您的帮助。也就是说,通常,在conda update --all
和偶尔我的blas, x.y, mkl, conda-forge
升级到一些版本x1.y1
比以前更高。但是自从大约一个月前我的blas
版本降级到1.0
版本
(py) ~>conda list | grep mkl
blas 1.0 mkl conda-forge
从那以后,它就一直停留在那里,即使至少在写
的时候(py) ~>conda search -f blas | grep mkl
Loading channels: done
# Name Version Build Channel
blas 2.21 mkl conda-forge
是否有办法找出为什么,哪个包,或者什么让我在1.0
,即使至少2.21
是可用的?
使用mamba repoquery
Mamba在Conda上添加的额外命令之一是repoquery
工具。也就是说,whoneeds
子命令将识别元数据中列出的具有blas
需求的包。
这是一个来自我周围的旧环境的例子,碰巧安装了blas=1.0=mkl
。
## activate the environment
$ mamba activate umap
## query for depending packages
(umap) $ mamba repoquery whoneeds blas
# ...
Executing the query blas
Name Version Build Depends Channel
────────────────────────────────────────────────────────────
scikit-learn 0.20.3 py37h27c97d8_0 blas 1.0 mkl pkgs/main
mkl_random 1.0.2 py37h27c97d8_0 blas 1.0 mkl pkgs/main
numpy 1.16.2 py37hacdab7b_0 blas 1.0 mkl pkgs/main
numpy-base 1.16.2 py37h6575580_0 blas 1.0 mkl pkgs/main
mkl_fft 1.0.10 py37h5e564d8_0 blas 1.0 mkl pkgs/main
scipy 1.2.1 py37h1410ff5_0 blas 1.0 mkl pkgs/main
然而,为了确定一些责任链,我们可能需要查看环境中的显式规范。对于这个环境,它有点微不足道:
## the `--from-history` flag will show only explicit specifications
$ mamba env export -n umap --from-history
name: umap
channels:
- defaults
dependencies:
- umap-learn
也就是说,在这个环境中只有一个指定的包,而且它不在列表中。将依赖的包看作一个树可能会更有帮助:
(umap) $ mamba repoquery whoneeds --tree blas
# ...
Executing the query blas
blas[1.0]
├─ scikit-learn[0.20.3]
│ └─ umap-learn[0.3.8]
├─ mkl_random[1.0.2]
│ └─ numpy[1.16.2]
│ ├─ scikit-learn already visited
│ ├─ numba[0.43.1]
│ │ └─ umap-learn already visited
│ ├─ mkl_fft[1.0.10]
│ ├─ scipy[1.2.1]
│ │ ├─ scikit-learn already visited
│ │ └─ umap-learn already visited
│ └─ umap-learn already visited
├─ numpy already visited
├─ numpy-base[1.16.2]
│ ├─ mkl_random already visited
│ └─ numpy already visited
├─ mkl_fft already visited
└─ scipy already visited
在这里,我们看到umap-learn
是如何连接到直接指定blas=1.0
的包链的。在这种情况下,我可能只运行mamba update umap-learn
,它会继续前进。也就是说,它不会像op中那样卡住。
新版本试运行
一个不那么法医学的方法是让Conda/Mamba责怪一个包裹。这并不总是可靠的,但有时它是有效的。康达在这方面特别糟糕,所以我想试试曼巴:
## try installing a newer blas, but use `-d` for dry-run
mamba install -n py -d 'blas >1'
在最好的情况下,它将报告一个与此请求冲突的包。