uv/crates
Andrew Gallant d2e7c0554b
uv-resolver: add initial version of universal lock file format (#3314)
This is meant to be a base on which to build. There are some parts
which are implicitly incomplete and others which are explicitly
incomplete. The latter are indicated by TODO comments.

Here is a non-exhaustive list of incomplete things. In many cases, these
are incomplete simply because the data isn't present in a
`ResolutionGraph`. Future work will need to refactor our resolver so
that this data is correctly passed down.

* Not all wheels are included. Only the "selected" wheel for the current
  distribution is included.
* Marker expressions are always absent.
* We don't emit hashes for certainly kinds of distributions (direct
  URLs, git, and path).
* We don't capture git information from a dependency specification.
  Right now, we just always emit "default branch."

There are perhaps also other changes we might want to make to the format
of a more cosmetic nature. Right now, all arrays are encoded using
whatever the `toml` crate decides to do. But we might want to exert more
control over this. For example, by using inline tables or squashing more
things into strings (like I did for `Source` and `Hash`). I think the
main trade-off here is that table arrays are somewhat difficult to read
(especially without indentation), where as squashing things down into a
more condensed format potentially makes future compatible additions
harder.

I also went pretty light on the documentation here than what I would
normally do. That's primarily because I think this code is going to
go through some evolution and I didn't want to spend too much time
documenting something that is likely to change.

Finally, here's an example of the lock file format in TOML for the
`anyio` dependency. I generated it with the following command:

```
cargo run -p uv -- pip compile -p3.10 ~/astral/tmp/reqs/anyio.in --unstable-uv-lock-file
```

And that writes out a `uv.lock` file:

```toml
version = 1

[[distribution]]
name = "anyio"
version = "4.3.0"
source = "registry+https://pypi.org/simple"

[[distribution.wheel]]
url = "2f20c40b45/anyio-4.3.0-py3-none-any.whl"
hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"

[[distribution.dependencies]]
name = "exceptiongroup"
version = "1.2.1"
source = "registry+https://pypi.org/simple"

[[distribution.dependencies]]
name = "idna"
version = "3.7"
source = "registry+https://pypi.org/simple"

[[distribution.dependencies]]
name = "sniffio"
version = "1.3.1"
source = "registry+https://pypi.org/simple"

[[distribution.dependencies]]
name = "typing-extensions"
version = "4.11.0"
source = "registry+https://pypi.org/simple"

[[distribution]]
name = "exceptiongroup"
version = "1.2.1"
source = "registry+https://pypi.org/simple"

[[distribution.wheel]]
url = "79fe92dd41/exceptiongroup-1.2.1-py3-none-any.whl"
hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"

[[distribution]]
name = "idna"
version = "3.7"
source = "registry+https://pypi.org/simple"

[[distribution.wheel]]
url = "741d8c8280/idna-3.7-py3-none-any.whl"
hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"

[[distribution]]
name = "sniffio"
version = "1.3.1"
source = "registry+https://pypi.org/simple"

[[distribution.wheel]]
url = "75a9c94214/sniffio-1.3.1-py3-none-any.whl"
hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"

[[distribution]]
name = "typing-extensions"
version = "4.11.0"
source = "registry+https://pypi.org/simple"

[[distribution.wheel]]
url = "936e209267/typing_extensions-4.11.0-py3-none-any.whl"
hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"
```
2024-04-29 14:03:17 -04:00
..
bench Avoid repeating paths of workspace packages (#2573) 2024-03-20 16:16:02 -04:00
cache-key Avoid panic for file url (#3306) 2024-04-29 16:39:16 +02:00
distribution-filename Add support for .tar.bz2 source distributions (#3069) 2024-04-16 18:34:55 +00:00
distribution-types uv-resolver: add initial version of universal lock file format (#3314) 2024-04-29 14:03:17 -04:00
install-wheel-rs Fix span recording with install_wheel_rs (#3293) 2024-04-28 18:33:40 +00:00
once-map once-map: avoid hard-coding Arc (#3242) 2024-04-24 11:11:46 -04:00
pep440-rs Update Rust crate pyo3 to 0.21.0 (#2911) 2024-04-22 18:27:22 +00:00
pep508-rs Update Rust crate pyo3 to 0.21.0 (#2911) 2024-04-22 18:27:22 +00:00
platform-tags Add ticks around error messages more consistently (#3004) 2024-04-22 23:58:36 +00:00
pypi-types Avoid Removing Quotes From Requirement Markers (#3214) 2024-04-23 14:07:51 -04:00
requirements-txt Move RequirementsTxtRequirement to its own module (#3235) 2024-04-24 11:16:10 +00:00
uv uv-resolver: add initial version of universal lock file format (#3314) 2024-04-29 14:03:17 -04:00
uv-auth Remove KeyringProvider.cache (#3243) 2024-04-24 15:39:24 +00:00
uv-build Remove unused dependencies (#3236) 2024-04-24 11:18:24 +00:00
uv-cache Use fs_err for cachedir errors (#3304) 2024-04-29 16:33:10 +02:00
uv-client Ignore 401 errors with multiple indexes (#3292) 2024-04-28 10:06:43 -04:00
uv-configuration Implement --index-strategy unsafe-best-match (#3138) 2024-04-27 01:24:54 +00:00
uv-dev Remove unused dependencies (#3236) 2024-04-24 11:18:24 +00:00
uv-dispatch Use link mode for builds, in uv pip compile and for uv venv seed packages (#3016) 2024-04-15 08:49:41 +00:00
uv-distribution Remove unused dependencies (#3236) 2024-04-24 11:18:24 +00:00
uv-extract Fix single crate tokio features (#3234) 2024-04-24 08:55:15 +00:00
uv-fs Use fs_err for cachedir errors (#3304) 2024-04-29 16:33:10 +02:00
uv-git Dedicated error type for direct url parsing (#3181) 2024-04-22 11:57:36 +00:00
uv-installer Remove unused dependencies (#3236) 2024-04-24 11:18:24 +00:00
uv-interpreter Create --target directories lazily (#3274) 2024-04-26 03:36:56 +00:00
uv-normalize Add JSON Schema support (#3046) 2024-04-17 17:24:41 +00:00
uv-requirements An enum and backticks for lookahead error (#3216) 2024-04-23 17:28:10 +00:00
uv-resolver uv-resolver: add initial version of universal lock file format (#3314) 2024-04-29 14:03:17 -04:00
uv-toolchain Fix uv-toolchain requirement on pep508_rs (#3256) 2024-04-24 19:10:47 -04:00
uv-trampoline Use c-string literals and update trampolines (#2590) 2024-03-21 15:36:00 +00:00
uv-types Remove unused dependencies (#3236) 2024-04-24 11:18:24 +00:00
uv-version Bump version to v0.1.39 (#3286) 2024-04-27 07:18:16 -04:00
uv-virtualenv Use fs_err for cachedir errors (#3304) 2024-04-29 16:33:10 +02:00
uv-warnings Rename to uv (#1302) 2024-02-15 11:19:46 -06:00
uv-workspace Add --target support to sync and install (#3257) 2024-04-25 19:15:39 -04:00
README.md Rename uv-traits and split into separate modules (#2674) 2024-03-26 15:39:43 -05:00

Crates

bench

Functionality for benchmarking uv.

cache-key

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

distribution-filename

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

distribution-types

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

install-wheel-rs

Install built distributions (wheels) into a virtual environment.]

once-map

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

pep440-rs

Utilities for interacting with Python version numbers and specifiers.

pep508-rs

Utilities for interacting with PEP 508 dependency specifiers.

platform-host

Functionality for detecting the current platform (operating system, architecture, etc.).

platform-tags

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

uv

Command-line interface for the uv package manager.

uv-build

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-interpreter

Functionality for detecting and leveraging the current Python interpreter.

uv-normalize

Normalize package and extra names as per Python specifications.

uv-package

Types and functionality for working with Python packages, e.g., parsing wheel files.

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-types

Shared traits for uv, to avoid circular dependencies.

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.

requirements-txt

Functionality for parsing requirements.txt files.