We, the WheelNext group and contributors, are writing to share an update on our open-source effort to address some long-standing challenges within the Python packaging ecosystem, particularly the distribution of packages with hardware-specific or platform-dependent builds.
For years, the community has navigated the complexities of installing scientific computing, AI/ML, and high-performance packages. The familiar process of directing users to a web page to construct a specific pip install
command with a special index URL for libraries like PyTorch or JAX highlights a gap in the current packaging standards.
While wheel tags have served the ecosystem well, they lack the expressiveness for the growing heterogeneity of modern hardware, from GPUs and their corresponding driver versions (CUDA, ROCm) to specific CPU instruction sets (AVX512) and library backends (MKL, OpenBLAS).
To address this issue in a standardized and open way, the WheelNext open-source initiative and project was founded. Our goal is to collaborate with the community to evolve the Python packaging standards, better serving these important use cases across various Python communities.
Introducing… Wheel Variants
Today, we are pleased to announce a first full-scale experimental release following a soon-to-be-published proposal called “Wheel Variants”. This is a proposed extension to the wheel specification designed to make platform-specific package distribution easier for package maintainers, and installation more smooth for end users. The key concepts are:
-
A Provider Plugin system, allowing vendors and communities to ship small, install-time packages that can detect system capabilities (e.g., CUDA version, CPU features).
-
A declarative metadata format for wheels to express their specific requirements (e.g.,
nvidia :: cuda_version_lower_bound :: 12.8
). Yes, absolutely inspired by Python classifier format. -
A mechanism for installers to automatically run these plugins to match the user’s system with the best-fitting variant wheel, simplifying the user experience to a familiar
[uv] pip install torch
.
We have carefully designed this system to ensure that installers unaware of variants will safely ignore them, maintaining backward compatibility with the existing ecosystem. We aim to complete the first version of the PEP by the end of October, taking into consideration the feedback from our “real-world experiment.” This will cover the overall design, the impact on end users and package maintainers, and the necessary changes to install tools and package indexes.
To move from theory to practice and gather crucial real-world data before a formal PEP submission, we are happy to announce an important milestone. In collaboration with the PyTorch team, we are testing our design with the experimental release of PyTorch 2.8.0 as a wheel variant. Paired with an experimental build of the uv
installer, this allows us to stress-test the end-to-end packaging and installation experience, from build and publication to discovery and installation, on one of the ecosystem’s most popular and complex packages.
We are committed to a transparent, community-driven process. This experimental release is a crucial step in gathering the necessary feedback to refine and strengthen our proposal. We aim to present a robust, well-vetted PEP to the community that builds on these real-world findings.
We are eager to hear (here on DPO, on Github, or PyPA Discord) from anyone who tries out this experimental release, and in particular from active members of the Python packaging community if they have any questions, concerns or new ideas.
Try it Today !
Linux / MacOS
curl -LsSf https://astral.sh/uv/install.sh | INSTALLER_DOWNLOAD_URL=https://wheelnext.astral.sh sh
uv venv
uv pip install torch
Windows
powershell -c { $env:INSTALLER_DOWNLOAD_URL = 'https://wheelnext.astral.sh'; irm https://astral.sh/uv/install.ps1 | iex }
uv venv
uv pip install torch
Automatically, uv pip install torch
will determine which variant is the best fit based on a variant-plugin based analysis of the system, including the availability of NVIDIA GPU, NVIDIA CUDA Driver and NVIDIA CUDA Compute Capability.
If no NVIDIA GPU is present on the machine, the CPU-only build will be installed.
Engineering Note
For testing purpose, it is possible to influence the NVIDIA variant plugin resolution using:
export NV_VARIANT_PROVIDER_FORCE_CUDA_DRIVER_VERSION="12.8" # Any value >= 12.0
export NV_VARIANT_PROVIDER_FORCE_SM_ARCH="9.0" # Any value >= 5.0,<13.0
Blog Posts - Four different perspectives
We would like to share four blog posts (published yesterday-today) that explore the concept of wheel variants from different perspectives. These posts provide useful background and technical details on the topic. Reading all four will give you a comprehensive understanding of the various approaches and implementations of wheel variants. We recommend checking them out to get a well-rounded view.
- Astral: A variant-enabled build of
uv
- NVIDIA: Streamline CUDA-Accelerated Python Install and Packaging Workflows with Wheel Variants
- PyTorch Foundation: PyTorch Wheel Variants, the Frontier of Python Packaging
- Quansight: Python Wheels: from Tags to Variants
We would also like to welcome you to watch the Webinar organized by the PyTorch Foundation: Register to attend - Today (Thursday 14th 2025, 10am Pacific). A replay is usually published on YouTube for those who missed the livestream. I will update my post with the link when published.
In case you missed it, you can also watch of PyCon 2025 talk available on YouTube: Reinventing the Wheel: A Community-Driven Roadmap for Python Packaging
Thank you for your help !
Thank you for your help in testing and reviewing our work. We look forward to the exciting conversations that will follow.
Jonathan (on behalf of the WheelNext contributors)