# How to Install RAPIDS with uv


RAPIDS packages live on NVIDIA's own package index, not PyPI (see [Why Installing GPU Python Packages Is So Complicated](https://pydevtools.com/handbook/explanation/installing-cuda-python-packages.md) for background). Getting [uv](https://pydevtools.com/handbook/reference/uv.md) to find them requires registering that index.

## Prerequisites

RAPIDS requires:

- Linux with glibc >= 2.28 (Ubuntu 20.04+, Debian 10+, Fedora 29+). On Windows, use WSL2 on Windows 11. macOS is not supported.
- NVIDIA GPU with compute capability 7.0+ (Volta architecture or newer).
- NVIDIA driver version 525.60.13+ for CUDA 12, or 580.65.06+ for CUDA 13.
- Python 3.10, 3.11, 3.12, or 3.13.

Check the installed driver version with:

```shell
nvidia-smi
```

## Configure the NVIDIA index in pyproject.toml

RAPIDS packages are hosted at `https://pypi.nvidia.com`. Add this index to `pyproject.toml` so uv can resolve them:

```toml
[[tool.uv.index]]
name = "nvidia"
url = "https://pypi.nvidia.com"
```

Unlike PyTorch, RAPIDS bakes the CUDA version into the package name (`cudf-cu12`, `cuml-cu13`), so there is no need for `tool.uv.sources` routing. The index registration alone is enough.

Then add the desired RAPIDS packages as dependencies:

```toml
[project]
dependencies = [
    "cudf-cu12>=26.2",
    "cuml-cu12>=26.2",
]
```

Run `uv sync` to install everything:

```shell
uv sync
```

To restrict uv so that only RAPIDS packages (and their NVIDIA-hosted transitive dependencies) come from the NVIDIA index, add `explicit = true`:

```toml
[[tool.uv.index]]
name = "nvidia"
url = "https://pypi.nvidia.com"
explicit = true

[tool.uv.sources]
cudf-cu12 = { index = "nvidia" }
cuml-cu12 = { index = "nvidia" }
```

This prevents uv from querying `pypi.nvidia.com` for unrelated packages. See [How to use private package indexes with uv](https://pydevtools.com/handbook/how-to/how-to-use-private-package-indexes-with-uv.md) for more on index configuration.

## Quick install with uv pip

For a one-off install outside of a project, use the `uv pip` interface:

```shell
uv pip install cudf-cu12 --extra-index-url https://pypi.nvidia.com
```

## Choose between CUDA 12 and CUDA 13

RAPIDS publishes separate packages for each CUDA major version. The suffix in the package name controls which CUDA variant gets installed:

| CUDA version | Package suffix | Example |
|---|---|---|
| CUDA 12 | `-cu12` | `cudf-cu12`, `cuml-cu12` |
| CUDA 13 | `-cu13` | `cudf-cu13`, `cuml-cu13` |

Match the suffix to the CUDA toolkit version on the target machine. Check with:

```shell
nvcc --version
```

If the system has CUDA 12.x, use `-cu12` packages. If it has CUDA 13.x, use `-cu13`. Mixing CUDA versions across packages in the same environment will cause runtime errors.

## Consider conda or pixi for mixed GPU stacks

When a project needs RAPIDS alongside other CUDA-dependent libraries like PyTorch, dependency conflicts can arise because each library may pin different versions of shared CUDA runtime packages. The pip/uv ecosystem resolves these packages independently from each index.

[conda](https://pydevtools.com/handbook/explanation/understanding-the-conda-anaconda-ecosystem.md) and [pixi](https://pydevtools.com/handbook/reference/pixi.md) handle CUDA as a shared system-level dependency, which avoids these conflicts. If uv resolution fails due to clashing CUDA transitive dependencies, switching to a conda-based workflow may be the more practical path.
