conda-forge
の numpy
パッケージはBLAS ライブラリのバックエンド(OpenBLAS, MKL, …)を柔軟に切り替えられる仕組みを提供している
Knowledge Base | conda-forge | community-driven packaging for conda
これはlibblas
という仮想パッケージを通じて実現されており,libblas
package を switch することによって環境に最適な BLAS 実装を選択可能なのである.
対象の package と一緒に libblas package で MKL を指定することで BLAS の実装を MKL にすることができる
pixi add numpy "libblas=*=*mkl"
# "blas=*=*mkl" でも挙動は同じ(legacy)
ちなみにこれは pixi.toml
では以下に相当する
[dependencies]
numpy = "*"
libblas = { version = "*", build = "*mkl" }
# libblas = { version = "3.9.0", build = "26_linux64_mkl" }
numpy の中で BLAS は指定されている(scipy-openblas
)
pixi add python
pixi add numpy --pypi
pypi-numpy [main●] % pixi run python -c "import numpy; print(numpy.__config__.show())";
"Build Dependencies": {
"blas": {
"name": "scipy-openblas",
"found": true,
"version": "0.3.28",
"detection method": "pkgconfig",
"include directory": "/opt/_internal/cpython-3.13.0/lib/python3.13/site-packages/scipy_openblas64/include",
"lib directory": "/opt/_internal/cpython-3.13.0/lib/python3.13/site-packages/scipy_openblas64/lib",
"openblas configuration": "OpenBLAS 0.3.28 USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell MAX_THREADS=64",
"pc file directory": "/project/.openblas"
},
pixi 仮想環境から blas(仮想パッケージ)を通じて動的に blas backend を読み出すようになっている(!)
pixi add numpy
"Build Dependencies": {
"blas": {
"name": "blas",
"found": true,
"version": "3.9.0",
"detection method": "pkgconfig",
"include directory": "/home/mai/pixi-faiss-examples/pixi-numpy/.pixi/envs/default/include",
"lib directory": "/home/mai/pixi-faiss-examples/pixi-numpy/.pixi/envs/default/lib",
"openblas configuration": "unknown",
"pc file directory": "/home/mai/pixi-faiss-examples/pixi-numpy/.pixi/envs/default/lib/pkgconfig"
},
pixi-numpy [main●] % pixi list | grep blas
libblas 3.9.0 26_linux64_openblas 16 KiB conda libblas-3.9.0-26_linux64_openblas.conda
libcblas 3.9.0 26_linux64_openblas 16 KiB conda libcblas-3.9.0-26_linux64_openblas.conda
liblapack 3.9.0 26_linux64_openblas 16 KiB conda liblapack-3.9.0-26_linux64_openblas.conda
libopenblas 0.3.28 pthreads_h94d23a6_1 5.3 MiB conda libopenblas-0.3.28-pthreads_h94d23a6_1.conda
default では version=*
build=*openblas
がついてくる.
https://pypackaging-native.github.io/key-issues/native-dependencies/blas_openmp/