oldest-supported-numpy
Meta-package that provides the oldest NumPy that supports a given Python version and platform. If wheels for the platform became available on PyPI only for a more recent NumPy version, then that NumPy version is specified.
What it is and what it does
oldest-supported-numpy is a meta-package that solves a specific build-time problem: when you compile C extensions against NumPy, binaries built with older NumPy versions remain compatible with newer NumPy versions, but not vice versa. This package automatically selects and provides the oldest NumPy version that works with your target Python version and platform, eliminating the need to manually maintain a long list of version pins in your pyproject.toml.
You use it by adding it to your build-system requires list instead of manually pinning NumPy versions for each Python version. The package contains a static mapping of Python versions to the oldest compatible NumPy release (or the oldest with prebuilt wheels for your platform), and pip installs that NumPy version into your build environment automatically. This is purely a build-time convenience; your package can still require a newer NumPy at runtime if needed.
Use it for:
- Building a NumPy-based C extension without manually maintaining version pins for each Python version.
- Ensuring compiled wheels remain forward-compatible with newer NumPy versions in user environments.
- Simplifying pyproject.toml for packages that depend on NumPy's C API but don't require recent NumPy features.
- Updating build requirements automatically as new Python versions are released, without editing pyproject.toml.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Provides the oldest version of NumPy compatible with a given Python version and platform, for use as a build-time dependency to ensure ABI compatibility across compiled extensions.
Yes, if you maintain a package with NumPy C extensions and want to avoid manual version pinning in pyproject.toml. The dormant maintenance status is not a concern because the package's role is static—it maintains a mapping that only needs updates when NumPy or Python versions change. Check that the pinned NumPy versions still match your platform and Python support before adopting it.
Install
oldest-supported-numpy on PyPI
pip
pip install oldest-supported-numpyuv
uv add oldest-supported-numpypoetry
poetry add oldest-supported-numpyInstalling oldest-supported-numpy
Before you install
Low friction; single runtime dependency (numpy). Dormant maintenance status (last release 2023-12-21, no commits since 2024-09-15), but the package's role is narrow and stable—it maintains a static mapping of Python versions to NumPy versions rather than active feature development.
License in practice
BSD license is permissive; no restrictions on use or redistribution in your own projects.
Quickstart
# In pyproject.toml:
[build-system]
requires = ["wheel", "setuptools", "oldest-supported-numpy"]
# oldest-supported-numpy automatically installs the appropriate NumPy version
# for your Python version and platform during build.
Intended only for build-time use in pyproject.toml; not a runtime package for application code. Requires Python >= 3.7.
Verify before relying
- Whether the NumPy version pinnings remain accurate for current Python releases beyond 3.7.
- Whether dormant status (no commits since 2024-09-15) will delay updates if NumPy or Python compatibility issues arise.
Package facts
| License | BSD (permissive) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — numpy |
| Maintenance | dormant — 967 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 13,547,387/month — #1,275 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: oldest_supported_numpy-2023.12.21-py3-none-any.whl
Tags
More Build Tools packages
Provides reusable utilities for Python…
permissive · top 100 on PyPI
tqdmWraps any iterable to display a real-time…
copyleft · top 100 on PyPI
pippip is the standard installer for Python…
permissive · top 100 on PyPI
hatchlingHatchling is a standards-compliant Python build…
permissive · top 100 on PyPI
grpcio-toolsGenerates Python gRPC service stubs and message…
permissive · top 1,000 on PyPI
pre-commitpre-commit is a framework for installing and…
permissive · top 1,000 on PyPI
legacy-cgiProvides the cgi and cgitb modules removed from…
permissive · top 5,000 on PyPI
requirementslibParses, builds, and converts between Pipfile…
permissive · top 15,000 on PyPI
simplesatSolves package dependency resolution using…
permissive · top 15,000 on PyPI
pip-toolspip-tools provides command-line tools to…
permissive · top 5,000 on PyPI
versioningitAutomatically determines your Python package's…
permissive · top 5,000 on PyPI
swigProvides SWIG as a PyPI-installable package,…
copyleft · top 5,000 on PyPI
scikit-build-coreA build backend that uses CMake to compile…
permissive · top 5,000 on PyPI
bumpAutomatically increments version numbers in…
permissive · top 15,000 on PyPI
patchelf-wrapperProvides a Python wrapper that downloads and…
permissive · top 5,000 on PyPI
pkg-aboutRetrieves Python package metadata at runtime in…
permissive · top 15,000 on PyPI