This repository provides binary wheels for NumPy and SciPy, linked to Intel's high-performance
oneAPI Math Kernel
Library for Intel CPUs.
The wheels are accessible through a custom Python Package Index (PyPI) and can be installed with
pip or uv.
MKL-accelerated wheels are available for 64-bit versions of Linux and Windows. If using one of the recommended package manager below, there are no other prerequisites; all dependencies — including Python if using uv or Nix — are automatically installed by the package manager.
uv
# Create a Python project with uv.
uv init
uv add numpy scipy --index https://urob.github.io/numpy-mklpip
# Install globally or into active venv.
pip install numpy scipy --extra-index-url https://urob.github.io/numpy-mklnix
# Create and run virtual devshell using Nix.
nix flake init --template github:urob/numpy-mkl
nix develop .manual
Wheels for manual installs can be downloaded here. Manual
installs must install compatible versions of mkl-service, mkl, and its indirect dependencies. It
is recommended to install mkl-service from this repository, which has been patched to detect and
autoload the mkl library at runtime.
MKL is only available on x86-64 architectures, excluding macOS systems. When using uv, one can
use platform markers to automatically
install MKL-linked versions of NumPy and SciPy when on a compatible system, and otherwise fall back
to the default versions from PyPI.
Below is a simple illustration, which falls back to the PyPI packages on macOS.1 To
install the environment, copy the following snippet into pyproject.toml and then run uv sync.
This will install a virtual environment in .venv, which can be activated on the command line or
via most Python editors.
[project]
name = "example-project"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = [
"numpy>=2.2.6",
"scipy>=1.15.2",
"mkl-service>=2.4.2; sys_platform != 'darwin'",
]
[tool.uv.sources]
numpy = [{ index = "numpy-mkl", marker = "sys_platform != 'darwin'" }]
scipy = [{ index = "numpy-mkl", marker = "sys_platform != 'darwin'" }]
mkl-service = [{ index = "numpy-mkl", marker = "sys_platform != 'darwin'" }]
[[tool.uv.index]]
name = "numpy-mkl"
url = "https://urob.github.io/numpy-mkl"
explicit = trueThe usual way to obtain MKL-accelerated NumPy and SciPy packages is through
Anaconda or Conda-forge. The purpose of
this repository is to provide an alternative for users who prefer to use pip or uv for package
management. Other alternatives are listed below.
| Windows | Linux | Notes | |
|---|---|---|---|
| This repository | Yes | Yes | |
| Intel(r) Distribution for Python | Yes | Yes | Does not support NumPy 2.x |
| Numpy-mkl-wheels | Yes | No | Manual install only |
Linux wheels are built with gcc on Ubuntu 22.04. Windows wheels are built with msvc (numpy) and
mingw-w64 (scipy) on Windows Server 2022. These compilers showed the most consistent runtime
performance in a series of benchmarks, even in comparison to
icx-compiled wheels.
All binaries are dynamically linked against the MKL library. The packages are patched to detect the
library at runtime as long as mkl is installed anywhere accessible by Python. (This is indeed
the case when using one of the recommended install methods above, which will automatically install
mkl alongside NumPy or SciPy.)
Footnotes
-
More sophisticated checks can be added by combining with the
platform_machinemarker. In practices, distinguishing between macOS and other systems seems to be good enough for most use cases. ↩