TL;DR

conda-forgenumpy パッケージはBLAS ライブラリのバックエンド(OpenBLAS, MKL, …)を柔軟に切り替えられる仕組みを提供している

Knowledge Base | conda-forge | community-driven packaging for conda

これはlibblas という仮想パッケージを通じて実現されており,libblas package を switch することによって環境に最適な BLAS 実装を選択可能なのである.

So what?

対象の 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" }

1. pip で入る numpy

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"
    },

2. conda-forge numpy (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/

https://pypackaging-native.github.io/key-issues/native-dependencies/blas_openmp/