KEMBAR78
Document why uv discards upper bounds on `requires-python` by konstin · Pull Request #15927 · astral-sh/uv · GitHub
Skip to content

Conversation

konstin
Copy link
Member

@konstin konstin commented Sep 18, 2025

We're regularly get questions about this. The DPO thread is the best ressource, but it's also a long read, so I summarized some points for uv's decision.

@konstin konstin added the documentation Improvements or additions to documentation label Sep 18, 2025
For most project it's not possible to determine whether they will be compatible with a new Python
version once its released, so blocking newer versions in advance would only block users from
upgrading or testing newer Python versions. The exception are packages which use the unstable C ABI
or internals of CPython such as its bytecode format, some of which uv handles by inspecting the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"some of which uv handles" is confusing here. Isn't this part of how Python packaging represents this?

Comment on lines 176 to 178
When a project uses a `requires-python` upper bound in a new release, while it wasn't using one in
older release, attempts to install on a too new Python will instead resolve to the older version
without the bound, wrongly circumventing the bound.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This paragraph is pretty confusing. Maybe you should say "Transitioning from not using upper bounds to including them is also problematic. For example, when a project adds a new upper bound to requires-python, attempts to install it on a new Python version will resolve to an older version of the project without the bound instead of failing."

Comment on lines 167 to 168
[DPO thread](https://discuss.python.org/t/requires-python-upper-limits/12663), informing uv's choice
as a combination of aspects:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"informing uv's choice as a combination of aspects" is confusing to me, what are you trying to say there?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's like, go read the full discussion if you think we should change this, these docs won't (can't) cover all of it, but here's a summary of the parts most relevant to uv.

Comment on lines 180 to 182
Another aspect is that when uv resolves for the whole `requires-python` range, so it would require
placing an upper bound on it when any used package has an upper bound, and would potentially resolve
differently for different upper bounds.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This paragraph is also confusing :)

Can you tell me more about "would potentially resolve differently for different upper bounds"?

it can update compatibility for a new Python version, while metadata on PyPI cannot be changed once
published.

This choice on the other hand is a problem for packages that use the version-dependent C API of
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"This choice on the other hand is a problem for packages that ..."

This is a wordy qualifier.

I'd say something like "Ignoring upper bounds is problematic for packages that ..."

wheels for CPython 3.10 through 3.13 and declares `requires-python = ">=3.10"`. The means that when
we resolve a `numpy>=2,<3` requirement in a project with `requires-python = ">=3.9"`, we resolve
numpy 2.0.0 and the lockfile doesn't install on Python 3.13 or newer. To alleviate this, whenever we
reject a version due to a too high Python requirement, we fork on that Python version. This behavior
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"reject a version due to a too high Python requirement" is confusing. Maybe "reject a package version when it requires a newer Python version"?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe instead of "fork on that Python version" we should just say "fork the resolution to find appropriate package versions for both ranges of Python versions"

@zanieb zanieb changed the title Document why uv discards upper bounds Document why uv discards upper bounds on requires-python Sep 18, 2025
@konstin konstin temporarily deployed to uv-test-registries September 23, 2025 13:21 — with GitHub Actions Inactive
@konstin konstin temporarily deployed to uv-test-registries September 23, 2025 14:06 — with GitHub Actions Inactive
prevent the project from being used on a too recent Python version. Instead of failing, the resolver
will pick to the older version without the bound, circumventing the bound.

For a resolution that is as universally installable as possible, uv ensure that the selected
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section is basically saying that we tried that with poetry and it wasn't helpful

dependency versions are compatible with the `requires-python` range of the project. For example, for
a project with `requires-python = ">=3.12"`, uv will not use a dependency version with
`requires-python = ">=3.13"`, as otherwise the resolution is not installable on Python 3.12, which
the project declares to support. Applying the same logic to upper bounds means that bumping the
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ignoring the option to split this into two fields here, or other advanced options such as ignoring the upper bound only on the current workspace, this is better documented in the DPO thread, and the other answer is that it's not worth doing that, if we wanted to add new metadata for e.g. the numba case then this should be a new PEP imho, so it's also rather for the DPO discussion.

resolve numpy 2.0.0 and the lockfile doesn't install on Python 3.13 or newer. To alleviate this,
whenever we reject a version when it requires a newer Python version, we fork by splitting the
resolution markers on that Python version. This behavior can be controlled by `--fork-strategy`. In
the example case, upon encountering numpy 2.1.0 we fork into Python versions `>=3.9,<3.10` and
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The irony that we're using an upper bound on Python here is not lost on me, though for package selection we're only using the lower bound again, the upper bound exists for internal coherence tracking (and for a lockfile optimization where we drop wheels outside the range).

konstin and others added 4 commits October 9, 2025 15:56
We're regularly get questions about this. The DPO thread is the best ressource, but it's also a long read, so I summarized some points for uv's decision.
Co-authored-by: Zanie Blue <contact@zanie.dev>
@konstin konstin force-pushed the konsti/document-discarding-reuqires-python-upper-bounds branch from ac92f2a to c4277e0 Compare October 9, 2025 13:56
@konstin konstin temporarily deployed to uv-test-registries October 9, 2025 14:11 — with GitHub Actions Inactive
@konstin konstin temporarily deployed to uv-test-publish October 9, 2025 14:11 — with GitHub Actions Inactive
@konstin konstin merged commit 787d035 into main Oct 9, 2025
94 of 98 checks passed
@konstin konstin deleted the konsti/document-discarding-reuqires-python-upper-bounds branch October 9, 2025 15:24
Ignoring an upper bound is a problem for packages such as numpy which use the version-dependent C
API of CPython. As of writing, each numpy release support 4 Python minor versions, e.g., numpy 2.0.0
has wheels for CPython 3.9 through 3.12 and declares `requires-python = ">=3.9"`, while numpy 2.1.0
has wheels for CPython 3.10 through 3.13 and declares `requires-python = ">=3.10"`. The means that
Copy link

@Molkree Molkree Oct 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's a typo here, supposed to be

This means that

@konstin

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 10, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | minor | `0.8.22` -> `0.9.1` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.9.1`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#091)

[Compare Source](astral-sh/uv@0.9.0...0.9.1)

Released on 2025-10-09.

##### Enhancements

- Log Python choice in `uv init` ([#&#8203;16182](astral-sh/uv#16182))
- Fix `pylock.toml` config conflict error messages ([#&#8203;16211](astral-sh/uv#16211))

##### Configuration

- Add `UV_UPLOAD_HTTP_TIMEOUT` and respect `UV_HTTP_TIMEOUT` in uploads ([#&#8203;16040](astral-sh/uv#16040))
- Support `UV_WORKING_DIRECTORY` for setting `--directory` ([#&#8203;16125](astral-sh/uv#16125))

##### Bug fixes

- Allow missing `Scripts` directory ([#&#8203;16206](astral-sh/uv#16206))
- Fix handling of Python requests with pre-releases in ranges ([#&#8203;16208](astral-sh/uv#16208))
- Preserve comments on version bump ([#&#8203;16141](astral-sh/uv#16141))
- Retry all HTTP/2 errors ([#&#8203;16038](astral-sh/uv#16038))
- Treat deleted Windows registry keys as equivalent to missing ones ([#&#8203;16194](astral-sh/uv#16194))
- Ignore pre-release Python versions when a patch version is requested ([#&#8203;16210](astral-sh/uv#16210))

##### Documentation

- Document why uv discards upper bounds on `requires-python` ([#&#8203;15927](astral-sh/uv#15927))
- Document uv version environment variables were added in ([#&#8203;15196](astral-sh/uv#15196))

### [`v0.9.0`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#090)

[Compare Source](astral-sh/uv@0.8.24...0.9.0)

Released on 2025-10-07.

This breaking release is primarily motivated by the release of Python 3.14, which contains some breaking changes (we recommend reading the ["What's new in Python 3.14"](https://docs.python.org/3/whatsnew/3.14.html) page). uv may use Python 3.14 in cases where it previously used 3.13, e.g., if you have not pinned your Python version and do not have any Python versions installed on your machine. While we think this is uncommon, we prefer to be cautious. We've included some additional small changes that could break workflows.

See our [Python 3.14](https://astral.sh/blog/python-3.14) blog post for some discussion of features we're excited about!

There are no breaking changes to [`uv_build`](https://docs.astral.sh/uv/concepts/build-backend/). If you have an upper bound in your `[build-system]` table, you should update it.

##### Breaking changes

- **Python 3.14 is now the default stable version**

  The default Python version has changed from 3.13 to 3.14. This applies to Python version installation when no Python version is requested, e.g., `uv python install`. By default, uv will use the system Python version if present, so this may not cause changes to general use of uv. For example, if Python 3.13 is installed already, then `uv venv` will use that version. If no Python versions are installed on a machine and automatic downloads are enabled, uv will now use 3.14 instead of 3.13, e.g., for `uv venv` or `uvx python`. This change will not affect users who are using a `.python-version` file to pin to a specific Python version.
- **Allow use of free-threaded variants in Python 3.14+ without explicit opt-in** ([#&#8203;16142](astral-sh/uv#16142))

  Previously, free-threaded variants of Python were considered experimental and required explicit opt-in (i.e., with `3.14t`) for usage. Now uv will allow use of free-threaded Python 3.14+ interpreters without explicit selection. The GIL-enabled build of Python will still be preferred, e.g., when performing an installation with `uv python install 3.14`. However, e.g., if a free-threaded interpreter comes before a GIL-enabled build on the `PATH`, it will be used. This change does not apply to free-threaded Python 3.13 interpreters, which will continue to require opt-in.
- **Use Python 3.14 stable Docker images** ([#&#8203;16150](astral-sh/uv#16150))

  Previously, the Python 3.14 images had an `-rc` suffix, e.g., `python:3.14-rc-alpine` or
  `python:3.14-rc-trixie`. Now, the `-rc` suffix has been removed to match the stable
  [upstream images](https://hub.docker.com/_/python). The `-rc` images tags will no longer be
  updated. This change should not break existing workflows.
- **Upgrade Alpine Docker image to Alpine 3.22**

  Previously, the `uv:alpine` Docker image was based on Alpine 3.21. Now, this image is based on Alpine 3.22. The previous image can be recovered with `uv:alpine3.21` and will continue to be updated until a future release.
- **Upgrade Debian Docker images to Debian 13 "Trixie"**

  Previously, the `uv:debian` and `uv:debian-slim` Docker images were based on Debian 12 "Bookworm". Now, these images are based on Debian 13 "Trixie". The previous images can be recovered with `uv:bookworm` and `uv:bookworm-slim` and will continue to be updated until a future release.
- **Fix incorrect output path when a trailing `/` is used in `uv build`** ([#&#8203;15133](astral-sh/uv#15133))

  When using `uv build` in a workspace, the artifacts are intended to be written to a `dist` directory in the workspace root. A bug caused workspace root determination to fail when the input path included a trailing `/` causing the `dist` directory to be placed in the child directory. This bug has been fixed in this release. For example, `uv build child/` is used, the output path will now be in `<workspace root>/dist/` rather than `<workspace root>/child/dist/`.

##### Python

- Add CPython 3.14.0
- Add CPython 3.13.8

##### Enhancements

- Don't warn when a dependency is constrained by another dependency ([#&#8203;16149](astral-sh/uv#16149))

##### Bug fixes

- Fix `uv python upgrade / install` output when there is a no-op for one request ([#&#8203;16158](astral-sh/uv#16158))
- Surface pinned-version hint when `uv tool upgrade` can’t move the tool ([#&#8203;16081](astral-sh/uv#16081))
- Ban pre-release versions in `uv python upgrade` requests ([#&#8203;16160](astral-sh/uv#16160))
- Fix `uv python upgrade` replacement of installed binaries on pre-release to stable ([#&#8203;16159](astral-sh/uv#16159))

##### Documentation

- Update `uv pip compile` args in `layout.md` ([#&#8203;16155](astral-sh/uv#16155))

### [`v0.8.24`](https://github.com/astral-sh/uv/releases/tag/0.8.24)

[Compare Source](astral-sh/uv@0.8.23...0.8.24)

#### Release Notes

Released on 2025-10-06.

##### Enhancements

- Emit a message on `cache clean` and `prune` when lock is held ([#&#8203;16138](astral-sh/uv#16138))
- Add `--force` flag for `uv cache prune` ([#&#8203;16137](astral-sh/uv#16137))

##### Documentation

- Fix example of bumping beta version without patch bump ([#&#8203;16132](astral-sh/uv#16132))

#### Install uv 0.8.24

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.24/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.24/uv-installer.ps1 | iex"
```

#### Download uv 0.8.24

| File                                                                                                                                          | Platform                     | Checksum                                                                                                             |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-apple-darwin.tar.gz)                     | Apple Silicon macOS          | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-apple-darwin.tar.gz.sha256)           |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-apple-darwin.tar.gz)                      | Intel macOS                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-apple-darwin.tar.gz.sha256)            |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-pc-windows-msvc.zip)                     | ARM64 Windows                | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-pc-windows-msvc.zip.sha256)           |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-pc-windows-msvc.zip)                           | x86 Windows                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-pc-windows-msvc.zip.sha256)              |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-pc-windows-msvc.zip)                      | x64 Windows                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-pc-windows-msvc.zip.sha256)            |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-unknown-linux-gnu.tar.gz)           | ARM64 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)      |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-unknown-linux-gnu.tar.gz)                 | x86 Linux                    | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-unknown-linux-gnu.tar.gz.sha256)         |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-powerpc64-unknown-linux-gnu.tar.gz)       | PPC64 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)    |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-powerpc64le-unknown-linux-gnu.tar.gz)   | PPC64LE Linux                | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)  |
| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-riscv64gc-unknown-linux-gnu.tar.gz)       | RISCV Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256)    |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-s390x-unknown-linux-gnu.tar.gz)               | S390x Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-s390x-unknown-linux-gnu.tar.gz.sha256)        |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-unknown-linux-gnu.tar.gz)            | x64 Linux                    | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-unknown-linux-gnu.tar.gz.sha256)       |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-armv7-unknown-linux-gnueabihf.tar.gz)   | ARMv7 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)  |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-unknown-linux-musl.tar.gz)         | ARM64 MUSL Linux             | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-aarch64-unknown-linux-musl.tar.gz.sha256)     |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-unknown-linux-musl.tar.gz)               | x86 MUSL Linux               | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-i686-unknown-linux-musl.tar.gz.sha256)        |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-unknown-linux-musl.tar.gz)          | x64 MUSL Linux               | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-x86_64-unknown-linux-musl.tar.gz.sha256)      |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-arm-unknown-linux-musleabihf.tar.gz)     | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)   |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux             | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.24/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

### [`v0.8.23`](https://github.com/astral-sh/uv/releases/tag/0.8.23)

[Compare Source](astral-sh/uv@0.8.22...0.8.23)

#### Release Notes

Released on 2025-10-03.

##### Enhancements

- Build `s390x` on stable Rust compiler version ([#&#8203;16082](astral-sh/uv#16082))
- Add `UV_SKIP_WHEEL_FILENAME_CHECK` to allow installing invalid wheels ([#&#8203;16046](astral-sh/uv#16046))

##### Bug fixes

- Avoid rejecting already-installed URL distributions with `--no-sources` ([#&#8203;16094](astral-sh/uv#16094))
- Confirm that the directory name is a valid Python install key during managed check ([#&#8203;16080](astral-sh/uv#16080))
- Ignore origin when comparing installed tools ([#&#8203;16055](astral-sh/uv#16055))
- Make cache control lookups robust to username ([#&#8203;16088](astral-sh/uv#16088))
- Re-order lock validation checks by severity ([#&#8203;16045](astral-sh/uv#16045))
- Remove tracking of inferred dependency conflicts ([#&#8203;15909](astral-sh/uv#15909))
- Respect `--no-color` on the CLI ([#&#8203;16044](astral-sh/uv#16044))
- Deduplicate marker-specific dependencies in `uv pip tree` output ([#&#8203;16078](astral-sh/uv#16078))

##### Documentation

- Document transparent x86\_64 emulation on aarch64 ([#&#8203;16041](astral-sh/uv#16041))
- Document why we ban URLs from index dependencies ([#&#8203;15929](astral-sh/uv#15929))
- Fix rendering of `_CONDA_ROOT` in reference ([#&#8203;16114](astral-sh/uv#16114))
- Windows arm64 and Linux RISC-V64 are Tier 2 supported ([#&#8203;16027](astral-sh/uv#16027))

#### Install uv 0.8.23

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.23/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.23/uv-installer.ps1 | iex"
```

#### Download uv 0.8.23

| File                                                                                                                                          | Platform                     | Checksum                                                                                                             |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-apple-darwin.tar.gz)                     | Apple Silicon macOS          | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-apple-darwin.tar.gz.sha256)           |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-apple-darwin.tar.gz)                      | Intel macOS                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-apple-darwin.tar.gz.sha256)            |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-pc-windows-msvc.zip)                     | ARM64 Windows                | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-pc-windows-msvc.zip.sha256)           |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-pc-windows-msvc.zip)                           | x86 Windows                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-pc-windows-msvc.zip.sha256)              |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-pc-windows-msvc.zip)                      | x64 Windows                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-pc-windows-msvc.zip.sha256)            |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-unknown-linux-gnu.tar.gz)           | ARM64 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-unknown-linux-gnu.tar.gz.sha256)      |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-unknown-linux-gnu.tar.gz)                 | x86 Linux                    | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-unknown-linux-gnu.tar.gz.sha256)         |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-powerpc64-unknown-linux-gnu.tar.gz)       | PPC64 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256)    |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-powerpc64le-unknown-linux-gnu.tar.gz)   | PPC64LE Linux                | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256)  |
| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-riscv64gc-unknown-linux-gnu.tar.gz)       | RISCV Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256)    |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-s390x-unknown-linux-gnu.tar.gz)               | S390x Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-s390x-unknown-linux-gnu.tar.gz.sha256)        |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-unknown-linux-gnu.tar.gz)            | x64 Linux                    | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-unknown-linux-gnu.tar.gz.sha256)       |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-armv7-unknown-linux-gnueabihf.tar.gz)   | ARMv7 Linux                  | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256)  |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-unknown-linux-musl.tar.gz)         | ARM64 MUSL Linux             | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-aarch64-unknown-linux-musl.tar.gz.sha256)     |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-unknown-linux-musl.tar.gz)               | x86 MUSL Linux               | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-i686-unknown-linux-musl.tar.gz.sha256)        |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-unknown-linux-musl.tar.gz)          | x64 MUSL Linux               | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-x86_64-unknown-linux-musl.tar.gz.sha256)      |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-arm-unknown-linux-musleabihf.tar.gz)     | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-arm-unknown-linux-musleabihf.tar.gz.sha256)   |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux             | [checksum](https://github.com/astral-sh/uv/releases/download/0.8.23/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzIuNSIsInVwZGF0ZWRJblZlciI6IjQxLjE0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants