After seeing yet another dozen packages endure keywords on Gentoo since of a sole key dependency switching to uv-build, I would akin to plea on behalf of Gentoo users: delight don’t use uv-build as a build backend. Just to be clear, this is not concerning uv itself or any another Astral tools; these are fine tools alongside a nice and receptive upstream. The uv-build backend is one item we have to differ on. I’m not saying it’s bad; I’m saying that its benefits don’t outweigh the drawbacks.
What are the drawbacks? It’s really big and it’s written in Rust. Rust has many advantages, but none of them really matter for a build backend that is used to build clean Python packages. It’s a huge dependency (as of 0.13.0, its wheels are between 1.2 MiB and 1.5 MiB, depending on the platform) and it has no advantage complete using a small clean Python backend (say, flit-core whose rotor is 45 KiB). It method that all Gentoo users need to build it from source, and stated that it’s released fairly frequently (12 releases in the 30 days previous to penning this post), that’s a lot of building. Like, for all 100 ms spent operating uv-build to instal one publish of your package, Gentoo users volition expend many hours construction new uv-build versions complete and complete again.
However, build times aren’t the biggest problem; portability is. You can run Python beautiful much anyplace anywhere you can get a operating C compiler. Some insignificant features may not work, but the center is fairly portable. The catalog of platforms supported by Rust is expanding slowly, and equal if you can get a operating Rust compiler on a stated platform, uv may not work. The problems can range from bugs in the lot of packages that uv depends on (for example, rustix::fs and its requirements skipping SPARC, for no apparent reason), to the resulting executable being so big that the toolchain runs out of location area (and dissimilar scheme memory, you can’t really add location area to a system; the Gentoo uv ebuild already carries two hacks to create it imaginable to build uv on 32-bit platforms). And then, if your phase is not supported at all… well, let’s fair say that adding and maintaining a new phase is a full-time job that may affect a lot of swearing at the code churn.
What concerning the advantages? Well, I’m conscious of two reasons to use uv-build. One is consistency alongside using uv for your project, and it doesn’t really matter. It’s a backend and the entire item of PEP 517 is that you can use any backend alongside any tool. You can use flit-core, you can use hatchling, and either of them volition activity fair fine alongside uv (or any another frontend). The another logic is achievement and that disagreement makes equal small sense. Even if it mattered, we’re realistically talking concerning a difference in the ballpark of 100 ms, for an act executed rarely; it is likewise imaginable that any acquire volition be outweighed by the period needed to fetch the 1.5 MiB rotor for uv-build. But it doesn’t matter, since realistically the backend is lone used by project developers, contributors, CI/CD workflows, downstream packagers and users of origin distributions; all regular users use wheels instead. Of these groups, origin allocation person collection is the largest and the most impacted, and any achievement acquire is defeated by the period spent construction uv-build.