7964bfbb2b
The architecture of uv does not necessarily match that of the python interpreter (#2326). In cross compiling/testing scenarios the operating system can also mismatch. To solve this, we move arch and os detection to python, vendoring the relevant pypa/packaging code, preventing mismatches between what the python interpreter was compiled for and what uv was compiled for. To make the scripts more manageable, they are now a directory in a tempdir and we run them with `python -m` . I've simplified the pypa/packaging code since we're still building the tags in rust. A `Platform` is now instantiated by querying the python interpreter for its platform. The pypa/packaging files are copied verbatim for easier updates except a `lru_cache()` python 3.7 backport. Error handling is done by a `"result": "success|error"` field that allow passing error details to rust: ```console $ uv venv --no-cache × Can't use Python at `/home/konsti/projects/uv/.venv/bin/python3` ╰─▶ Unknown operation system `linux` ``` I've used the [maturin sysconfig collection](https://github.com/PyO3/maturin/tree/855f6d2cb1fb8fb43c2bb9e500ab0e5e84bd3140/sysconfig) as reference. I'm unsure how to test these changes across the wide variety of platforms. Fixes #2326
39 lines
1.2 KiB
TOML
39 lines
1.2 KiB
TOML
[package]
|
|
name = "uv-dispatch"
|
|
version = "0.0.1"
|
|
description = "Avoid cyclic crate dependencies between resolver, installer and builder"
|
|
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-types = { path = "../distribution-types" }
|
|
pep508_rs = { path = "../pep508-rs" }
|
|
platform-tags = { path = "../platform-tags" }
|
|
pypi-types = { path = "../pypi-types" }
|
|
uv-build = { path = "../uv-build" }
|
|
uv-cache = { path = "../uv-cache" }
|
|
uv-client = { path = "../uv-client" }
|
|
uv-distribution = { path = "../uv-distribution" }
|
|
uv-installer = { path = "../uv-installer" }
|
|
uv-interpreter = { path = "../uv-interpreter" }
|
|
uv-resolver = { path = "../uv-resolver" }
|
|
uv-traits = { path = "../uv-traits" }
|
|
uv-virtualenv = { path = "../uv-virtualenv" }
|
|
|
|
anyhow = { workspace = true }
|
|
fs-err = { workspace = true }
|
|
futures = { workspace = true }
|
|
itertools = { workspace = true }
|
|
rustc-hash = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
tokio = { workspace = true }
|
|
tracing = { workspace = true }
|