python3Packages.uv: reuse already built uv binary (#412206)

This commit is contained in:
Gaétan Lepage
2025-05-31 23:38:01 +02:00
committed by GitHub
2 changed files with 31 additions and 22 deletions
+30 -21
View File
@@ -1,36 +1,45 @@
{
buildPythonPackage,
installShellFiles,
rustPlatform,
pkgs,
versionCheckHook,
hatchling,
lib,
uv,
}:
buildPythonPackage {
inherit (pkgs.uv)
inherit (uv)
pname
version
src
cargoDeps
meta
cargoBuildFlags
postInstall
versionCheckProgramArg
;
pyproject = true;
postPatch = ''
substituteInPlace python/uv/_find_uv.py \
--replace-fail '"""Return the uv binary path."""' "return '$out/bin/uv'"
build-system = [ hatchling ];
postPatch =
# Do not rely on path lookup at runtime to find the uv binary.
# Use the propagated binary instead.
''
substituteInPlace python/uv/_find_uv.py \
--replace-fail '"""Return the uv binary path."""' "return '${lib.getExe uv}'"
''
# Sidestep the maturin build system in favour of reusing the binary already built by nixpkgs,
# to avoid rebuilding the uv binary for every active python package set.
+ ''
substituteInPlace pyproject.toml \
--replace-fail 'requires = ["maturin>=1.0,<2.0"]' 'requires = ["hatchling"]' \
--replace-fail 'build-backend = "maturin"' 'build-backend = "hatchling.build"'
cat >> pyproject.toml <<EOF
[tool.hatch.build]
packages = ['python/uv']
EOF
'';
postInstall = ''
mkdir -p $out/bin && ln -s ${lib.getExe uv} $out/bin/uv
'';
nativeBuildInputs = [
installShellFiles
rustPlatform.cargoSetupHook
rustPlatform.maturinBuildHook
];
nativeCheckInputs = [ versionCheckHook ];
pyproject = true;
pythonImportsCheck = [ "uv" ];
}
+1 -1
View File
@@ -18674,7 +18674,7 @@ self: super: with self; {
uuid6 = callPackage ../development/python-modules/uuid6 { };
uv = callPackage ../development/python-modules/uv { };
uv = callPackage ../development/python-modules/uv { inherit (pkgs) uv; };
uv-build = callPackage ../development/python-modules/uv-build { };