uv/crates
konsti a6daab422f
Add incompatibility from proxy to base package (#15200)
Add an incompatibility that lets pubgrub skip of marker packages when
the base package already has an incompatible version to improve the
error messages (https://github.com/astral-sh/uv/issues/15199).

The change is also a small perf improvement. Overall this should be able
to improve performance in slow cases by avoiding trying proxy package
versions that are impossible anyway, for a (ideally very small cost) for
tracking the additional incompatibility and tracking the base package
for each proxy package.

```
$ hhyperfine --warmup 2 "uv pip compile --universal scripts/requirements/airflow.in" "target/release/uv pip compile --universal scripts/requirements/airflow.in"
Benchmark 1: uv pip compile --universal scripts/requirements/airflow.in
  Time (mean ± σ):     145.5 ms ±   3.9 ms    [User: 154.7 ms, System: 140.7 ms]
  Range (min … max):   139.2 ms … 153.4 ms    20 runs
 
Benchmark 2: target/release/uv pip compile --universal scripts/requirements/airflow.in
  Time (mean ± σ):     128.7 ms ±   5.5 ms    [User: 141.9 ms, System: 137.3 ms]
  Range (min … max):   121.8 ms … 142.0 ms    23 runs
 
Summary
  target/release/uv pip compile --universal scripts/requirements/airflow.in ran
    1.13 ± 0.06 times faster than uv pip compile --universal scripts/requirements/airflow.in
```

This implementation is the basic version: When we see a proxy
`foo{...}>=x,<y` we add a dependency edge `foo{...}>=x,<y` ->
`foo>=x,<y`. There are several way to extend this, which likely help
more with performance than with error messages.

One idea is that if we see `foo{...}>=x,<y` but we already made a
selection for `foo==z` outside that range, we can insert a dependency
`foo{...}!=z` -> `foo!=z`. This avoids trying any version of the proxy
package except the version that matches our previous selection.

Another is that if we see a dependency `foo>=x,<y`, we also add
`foo{...}>=x,y` -> `foo>=x,<y`. This allows backtracking beyond `foo`
immediately if all version of `foo{...}>=x,<y` are incompatible, since
`foo{...}>=x,<y` incompatible -> `foo>=x,<y` incompatible -> the package
that depended of `foo>=x,<y` is incompatible.

The cost for each of these operations is tracking an additional
incompatibility per virtual package. An alternative approach is to only
add the incompatibility lazily, only when we've tried several version of
the virtual package already. This needs to be weighed of with the better
error messages that the incompatibility gives, we unfortunately have
only few large reference examples.

Requires https://github.com/astral-sh/pubgrub/pull/45

Closes https://github.com/astral-sh/uv/issues/15199
2025-09-22 13:26:08 +02:00
..
uv Add incompatibility from proxy to base package (#15200) 2025-09-22 13:26:08 +02:00
uv-auth Avoid ANSI codes in debug! messages (#15843) 2025-09-17 14:30:43 +00:00
uv-bench Use a global BaseClientBuilder (#15548) 2025-08-29 13:30:51 -05:00
uv-bin-install Retry streaming Python and bin download errors (#15567) 2025-08-31 15:07:22 +00:00
uv-build Bump version to 0.8.19 (#15953) 2025-09-19 14:34:41 -05:00
uv-build-backend Better warning for no direct build (#15898) 2025-09-17 13:18:41 +02:00
uv-build-frontend fix misleading debug message in uv sync (#15881) 2025-09-16 18:39:08 +00:00
uv-cache Make uv cache clean parallel process safe (#15888) 2025-09-19 10:21:22 +02:00
uv-cache-info Follow links when cache-key is a glob (#13438) 2025-07-14 11:35:34 -04:00
uv-cache-key Add DisplaySafeUrl newtype to prevent leaking of credentials by default (#13560) 2025-05-27 00:05:30 +02:00
uv-cli Infer check URL from publish URL when known (#15886) 2025-09-16 14:03:03 +00:00
uv-client Use EnvVars in linehaul (#15931) 2025-09-18 14:08:58 +00:00
uv-configuration Allow escaping spaces in --env-file handling (#15815) 2025-09-12 18:11:51 -04:00
uv-console Bump MSRV to 1.88 (#15935) 2025-09-18 14:00:39 -04:00
uv-dev Sync latest Python releases (#15958) 2025-09-20 02:25:21 +00:00
uv-dirs Use workspace dependencies for crate dev-dependencies (#14903) 2025-07-25 13:57:49 -05:00
uv-dispatch Fix uv sync --no-sources not switching from editable to registry installations (#15234) 2025-09-17 06:35:32 -05:00
uv-distribution Allow [project] to be missing from a pyproject.toml (#14113) 2025-09-17 10:48:56 -05:00
uv-distribution-filename Add logging of incompatible tags on satisfies check (#15663) 2025-09-03 11:45:49 -05:00
uv-distribution-types Fix implied platform_machine marker for win_arm64 platform tag (#15921) 2025-09-17 19:33:59 -04:00
uv-extract Respect UV_INSECURE_NO_ZIP_VALIDATION=1 in duplicate header errors (#15912) 2025-09-17 14:34:49 +00:00
uv-fs Make uv cache clean parallel process safe (#15888) 2025-09-19 10:21:22 +02:00
uv-git Update Rust toolchain to 1.89 (#15157) 2025-08-08 13:01:52 +00:00
uv-git-types Include SHA when listing lockfile changes (#15817) 2025-09-12 17:57:58 +00:00
uv-globfilter additional use of Self, remove * and & where not needed (#15091) 2025-08-05 15:19:56 -05:00
uv-install-wheel Reject already-installed wheels that don't match the target platform (#15484) 2025-08-25 09:20:54 -04:00
uv-installer Avoid ANSI codes in debug! messages (#15843) 2025-09-17 14:30:43 +00:00
uv-keyring Use the windows crate facade consistently (#15737) 2025-09-09 15:07:14 +00:00
uv-logging Add logging to the uv build backend (#15533) 2025-08-27 09:14:00 +02:00
uv-macros Use consistent workspace inheritance (#15031) 2025-08-02 22:03:51 +02:00
uv-metadata Harden ZIP streaming to reject repeated entries and other malformed ZIP files (#15136) 2025-08-07 15:31:48 +01:00
uv-normalize Add rkyv implementation for Core Metadata (#15532) 2025-08-26 10:22:50 -04:00
uv-once-map Make the use of Self consistent. (#15074) 2025-08-05 20:17:12 +01:00
uv-options-metadata Make the use of Self consistent. (#15074) 2025-08-05 20:17:12 +01:00
uv-pep440 Update Rust toolchain to 1.89 (#15157) 2025-08-08 13:01:52 +00:00
uv-pep508 Add rkyv implementation for Core Metadata (#15532) 2025-08-26 10:22:50 -04:00
uv-performance-memory-allocator Update Rust crate mimalloc to v0.1.48 (#15724) 2025-09-08 07:08:37 +00:00
uv-platform Don't trace logs all architectures (#15710) 2025-09-07 17:31:50 +02:00
uv-platform-tags Improve BSD tag construction (#15829) 2025-09-14 10:48:37 -04:00
uv-preview Remove the native system store from the keyring providers (#15612) 2025-09-02 13:16:52 -05:00
uv-publish Rename provides_extras to provides_extra (#15825) 2025-09-14 13:27:45 +00:00
uv-pypi-types Avoid re-parsing pyproject.toml when provided as a source (#15851) 2025-09-15 10:07:38 -04:00
uv-python Sync latest Python releases (#15958) 2025-09-20 02:25:21 +00:00
uv-redacted Make the use of Self consistent. (#15074) 2025-08-05 20:17:12 +01:00
uv-requirements Avoid re-parsing pyproject.toml when provided as a source (#15851) 2025-09-15 10:07:38 -04:00
uv-requirements-txt Support recursive requirements and constraints inclusion (#15657) 2025-09-05 11:20:12 +02:00
uv-resolver Add incompatibility from proxy to base package (#15200) 2025-09-22 13:26:08 +02:00
uv-scripts Import PackageName from uv-normalize (#15439) 2025-08-21 23:15:40 +00:00
uv-settings Rename provides_extras to provides_extra (#15825) 2025-09-14 13:27:45 +00:00
uv-shell Use the windows crate facade consistently (#15737) 2025-09-09 15:07:14 +00:00
uv-small-str Update schemars 1.0.0 (#13693) 2025-06-24 21:43:31 +02:00
uv-state Add pyx support to uv auth commands (#15636) 2025-09-02 18:18:09 -04:00
uv-static Use EnvVars in linehaul (#15931) 2025-09-18 14:08:58 +00:00
uv-tool fix misleading debug message in uv sync (#15881) 2025-09-16 18:39:08 +00:00
uv-torch Add PyG packages to torch backend (#15911) 2025-09-17 14:18:30 +00:00
uv-trampoline Update trampoline to ~1.87 nightly (#15052) 2025-08-06 12:45:04 +00:00
uv-trampoline-builder Use workspace dependencies for crate dev-dependencies (#14903) 2025-07-25 13:57:49 -05:00
uv-types Import PackageName from uv-normalize (#15439) 2025-08-21 23:15:40 +00:00
uv-version Bump version to 0.8.19 (#15953) 2025-09-19 14:34:41 -05:00
uv-virtualenv fix misleading debug message in uv sync (#15881) 2025-09-16 18:39:08 +00:00
uv-warnings Better warning chain styling (#14934) 2025-07-28 16:23:39 +00:00
uv-workspace Allow [project] to be missing from a pyproject.toml (#14113) 2025-09-17 10:48:56 -05:00
README.md Link to Dependency specifiers instead of PEP 508 (#8411) 2024-10-21 14:43:38 -04:00

Crates

uv-bench

Functionality for benchmarking uv.

uv-cache-key

Generic functionality for caching paths, URLs, and other resources across platforms.

uv-distribution-filename

Parse built distribution (wheel) and source distribution (sdist) filenames to extract structured metadata.

uv-distribution-types

Abstractions for representing built distributions (wheels) and source distributions (sdists), and the sources from which they can be downloaded.

uv-install-wheel-rs

Install built distributions (wheels) into a virtual environment.

uv-once-map

A waitmap-like concurrent hash map for executing tasks exactly once.

uv-pep440-rs

Utilities for interacting with Python version numbers and specifiers.

uv-pep508-rs

Utilities for parsing and evaluating dependency specifiers, previously known as PEP 508.

uv-platform-tags

Functionality for parsing and inferring Python platform tags as per PEP 425.

uv-cli

Command-line interface for the uv package manager.

uv-build-frontend

A PEP 517-compatible build frontend for uv.

uv-cache

Functionality for caching Python packages and associated metadata.

uv-client

Client for interacting with PyPI-compatible HTTP APIs.

uv-dev

Development utilities for uv.

uv-dispatch

A centralized struct for resolving and building source distributions in isolated environments. Implements the traits defined in uv-types.

uv-distribution

Client for interacting with built distributions (wheels) and source distributions (sdists). Capable of fetching metadata, distribution contents, etc.

uv-extract

Utilities for extracting files from archives.

uv-fs

Utilities for interacting with the filesystem.

uv-git

Functionality for interacting with Git repositories.

uv-installer

Functionality for installing Python packages into a virtual environment.

uv-python

Functionality for detecting and leveraging the current Python interpreter.

uv-normalize

Normalize package and extra names as per Python specifications.

uv-requirements

Utilities for reading package requirements from pyproject.toml and requirements.txt files.

uv-resolver

Functionality for resolving Python packages and their dependencies.

uv-shell

Utilities for detecting and manipulating shell environments.

uv-types

Shared traits for uv, to avoid circular dependencies.

uv-pypi-types

General-purpose type definitions for types used in PyPI-compatible APIs.

uv-virtualenv

A venv replacement to create virtual environments in Rust.

uv-warnings

User-facing warnings for uv.

uv-workspace

Workspace abstractions for uv.

uv-requirements-txt

Functionality for parsing requirements.txt files.