44e39bdca3
See https://github.com/astral-sh/uv/issues/2617 Note this also includes: - #2918 - #2931 (pending) A first step towards Python toolchain management in Rust. First, we add a new crate to manage Python download metadata: - Adds a new `uv-toolchain` crate - Adds Rust structs for Python version download metadata - Duplicates the script which downloads Python version metadata - Adds a script to generate Rust code from the JSON metadata - Adds a utility to download and extract the Python version I explored some alternatives like a build script using things like `serde` and `uneval` to automatically construct the code from our structs but deemed it to heavy. Unlike Rye, I don't generate the Rust directly from the web requests and have an intermediate JSON layer to speed up iteration on the Rust types. Next, we add add a `uv-dev` command `fetch-python` to download Python versions per the bootstrapping script. - Downloads a requested version or reads from `.python-versions` - Extracts to `UV_BOOTSTRAP_DIR` - Links executables for path extension This command is not really intended to be user facing, but it's a good PoC for the `uv-toolchain` API. Hash checking (via the sha256) isn't implemented yet, we can do that in a follow-up. Finally, we remove the `scripts/bootstrap` directory, update CI to use the new command, and update the CONTRIBUTING docs. <img width="1023" alt="Screenshot 2024-04-08 at 17 12 15" src="https://github.com/astral-sh/uv/assets/2586601/57bd3cf1-7477-4bb8-a8e9-802a00d772cb">
71 lines
2.4 KiB
TOML
71 lines
2.4 KiB
TOML
[package]
|
|
name = "uv-dev"
|
|
version = "0.0.1"
|
|
description = "Build wheels from source distributions"
|
|
publish = false
|
|
|
|
edition = { workspace = true }
|
|
rust-version = { workspace = true }
|
|
homepage = { workspace = true }
|
|
documentation = { workspace = true }
|
|
repository = { workspace = true }
|
|
authors = { workspace = true }
|
|
license = { workspace = true }
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
distribution-filename = { workspace = true }
|
|
distribution-types = { workspace = true }
|
|
pep440_rs = { workspace = true }
|
|
pep508_rs = { workspace = true }
|
|
uv-build = { workspace = true }
|
|
uv-cache = { workspace = true, features = ["clap"] }
|
|
uv-client = { workspace = true }
|
|
uv-configuration = { workspace = true }
|
|
uv-dispatch = { workspace = true }
|
|
uv-extract = { workspace = true }
|
|
uv-fs = { workspace = true }
|
|
uv-installer = { workspace = true }
|
|
uv-interpreter = { workspace = true }
|
|
uv-normalize = { workspace = true }
|
|
uv-resolver = { workspace = true }
|
|
uv-toolchain = { workspace = true }
|
|
uv-types = { workspace = true }
|
|
|
|
# Any dependencies that are exclusively used in `uv-dev` should be listed as non-workspace
|
|
# dependencies, to ensure that we're forced to think twice before including them in other crates.
|
|
anstream = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
chrono = { workspace = true }
|
|
clap = { workspace = true, features = ["derive"] }
|
|
fs-err = { workspace = true, features = ["tokio"] }
|
|
futures = { workspace = true }
|
|
indicatif = { workspace = true }
|
|
itertools = { workspace = true }
|
|
owo-colors = { workspace = true }
|
|
petgraph = { workspace = true }
|
|
poloto = { version = "19.1.2" }
|
|
resvg = { version = "0.29.0" }
|
|
rustc-hash = { workspace = true }
|
|
reqwest = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
tagu = { version = "0.1.6" }
|
|
tokio = { workspace = true }
|
|
tokio-util = { workspace = true, features = ["compat"] }
|
|
tracing = { workspace = true }
|
|
tracing-durations-export = { workspace = true, features = ["plot"] }
|
|
tracing-indicatif = { workspace = true }
|
|
tracing-subscriber = { workspace = true }
|
|
url = { workspace = true }
|
|
walkdir = { workspace = true }
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
mimalloc = { version = "0.1.39" }
|
|
|
|
[target.'cfg(all(not(target_os = "windows"), not(target_os = "openbsd"), any(target_arch = "x86_64", target_arch = "aarch64", target_arch = "powerpc64")))'.dependencies]
|
|
tikv-jemallocator = { version = "0.5.4" }
|