uv/crates
Zanie Blue ec2723a9f5
Add uvx alias for uv tool run (#4632)
Closes https://github.com/astral-sh/uv/issues/4476

Originally, this used the changes in #4642 to invoke `main()` from a
`uvx` binary. This had the benefit of `uvx` being entirely standalone at
the cost of doubling our artifact size. We think that's the incorrect
trade-off.

Instead, we assume `uvx` is always next to `uv` and create a tiny binary
(<1MB) that invokes `uv` in a child process. This seems preferable to a
`cargo-dist` alias because we have more control over it. This binary
should "just work" for all of our cargo-dist distributions and
installers, but we'll need to add a new entry point for our PyPI
distribution. I'll probably tackle support there separately?

```
❯ ls -lah target/release/uv target/release/uvx
-rwxr-xr-x  1 zb  staff    31M Jun 28 23:23 target/release/uv
-rwxr-xr-x  1 zb  staff   452K Jun 28 23:22 target/release/uvx
```

This includes some small overhead:

```
❯ hyperfine --shell=none --warmup=100 './target/release/uv tool run --help' './target/release/uvx --help' --min-runs 2000
Benchmark 1: ./target/release/uv tool run --help
  Time (mean ± σ):       2.2 ms ±   0.1 ms    [User: 1.3 ms, System: 0.5 ms]
  Range (min … max):     2.0 ms …   4.0 ms    2000 runs
 
  Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.
 
Benchmark 2: ./target/release/uvx --help
  Time (mean ± σ):       2.9 ms ±   0.1 ms    [User: 1.7 ms, System: 0.9 ms]
  Range (min … max):     2.8 ms …   4.2 ms    2000 runs
 
  Warning: Statistical outliers were detected. Consider re-running this benchmark on a quiet system without any interferences from other programs. It might help to use the '--warmup' or '--prepare' options.
 
Summary
  ./target/release/uv tool run --help ran
    1.35 ± 0.09 times faster than ./target/release/uvx --help
```

I presume there may be some other downsides to a child process? The
wrapper is a little awkward. We could consider `execv` but this is
complicated across platforms. An example implementation of that over in
[monotrail](433af5aed9/crates/monotrail/src/monotrail.rs (L764-L799)).
2024-07-01 20:42:02 -05:00
..
bench Respect index strategy in source distribution builds (#4468) 2024-06-24 12:03:38 +00:00
cache-key Remove some unused pub use exports (#3930) 2024-05-30 22:26:52 -04:00
distribution-filename Make .egg-info filename parsing spec compliant (#4533) 2024-06-25 23:49:43 +00:00
distribution-types Make .egg-info filename parsing spec compliant (#4533) 2024-06-25 23:49:43 +00:00
install-wheel-rs Respect data scripts in uv tool install (#4693) 2024-07-01 12:22:37 -04:00
once-map Simplify OnceMap::wait_blocking (#4704) 2024-07-01 15:17:37 -04:00
pep440-rs Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
pep508-rs Disable Clippy's too-many-arguments rule (#4663) 2024-06-30 19:30:38 +00:00
platform-tags fix: add missing ppc64le alias for powerpc64le (#3963) 2024-06-02 13:15:24 -04:00
pypi-types Support conflicting URL in separate forks (#4435) 2024-06-26 13:58:23 +02:00
requirements-txt Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv Add uvx alias for uv tool run (#4632) 2024-07-01 20:42:02 -05:00
uv-auth Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
uv-build Disable Clippy's too-many-arguments rule (#4663) 2024-06-30 19:30:38 +00:00
uv-cache Represent build tag as u64 (#4253) 2024-06-11 21:40:08 +00:00
uv-cli Implement --package for pip tree (#4655) 2024-07-01 21:12:59 +00:00
uv-client Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv-configuration Flatten requirements eagerly in get_dependencies (#4430) 2024-06-25 21:13:47 +00:00
uv-dev Respect index strategy in source distribution builds (#4468) 2024-06-24 12:03:38 +00:00
uv-dispatch Disable Clippy's too-many-arguments rule (#4663) 2024-06-30 19:30:38 +00:00
uv-distribution Enable projects to opt-out of workspace management (#4565) 2024-07-01 16:17:43 -04:00
uv-extract Fix nightly cfg checker warnings (#3932) 2024-05-31 09:35:52 +00:00
uv-fs Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv-git Fix implementation of GitDatabase::contains (#4698) 2024-07-01 13:01:29 -04:00
uv-installer Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv-macros Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
uv-normalize Enable workspace lint configuration in remaining crates (#4329) 2024-06-18 03:02:28 +00:00
uv-requirements Support unnamed requirements in uv tool install (#4716) 2024-07-01 21:37:14 -04:00
uv-resolver Use requires-python semantics for --universal (#4701) 2024-07-01 15:16:40 -04:00
uv-scripts Add PEP 723 support to uv run (#4656) 2024-07-01 08:20:24 -04:00
uv-settings Add a universal resolution mode to pip compile (#4505) 2024-06-25 21:28:50 +00:00
uv-state Add uv tool install (#4492) 2024-06-26 10:24:29 -05:00
uv-tool Support unnamed requirements in uv tool install (#4716) 2024-07-01 21:37:14 -04:00
uv-toolchain Replace map_or(false, ..) uses with is_some_and and is_ok_and (#4703) 2024-07-01 19:28:42 +00:00
uv-trampoline Support x86 windows (#3873) 2024-05-28 16:07:39 +00:00
uv-types Respect index strategy in source distribution builds (#4468) 2024-06-24 12:03:38 +00:00
uv-version Bump version to v0.2.18 (#4650) 2024-06-29 14:30:01 -04:00
uv-virtualenv Use relative path for lib64 symlink (#4268) 2024-06-12 09:36:27 -04:00
uv-warnings Fix a bug where no warning is output when parsing of workspace settings fails. (#4014) 2024-06-04 09:21:19 -04:00
README.md Rename uv-interpreter crate to uv-toolchain (#4120) 2024-06-07 13:59:14 -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-toolchain

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.