From 6c85fff302615c62bf4f632bca661bc48298b0a3 Mon Sep 17 00:00:00 2001 From: Theodore Ni <3806110+tjni@users.noreply.github.com> Date: Thu, 27 Jul 2023 23:29:57 -0700 Subject: python3.pkgs.buildPythonPackage: switch to PyPA build and installer --- .../interpreters/python/mk-python-derivation.nix | 42 +++++++++++++++++----- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'pkgs/development/interpreters/python/mk-python-derivation.nix') diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index 79e45b8dc39..b848c85e3b2 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -12,8 +12,8 @@ , update-python-libraries , setuptools , flitBuildHook -, pipBuildHook -, pipInstallHook +, pypaBuildHook +, pypaInstallHook , pythonCatchConflictsHook , pythonImportsCheckHook , pythonNamespacesHook @@ -161,6 +161,16 @@ let in inputs: builtins.map (checkDrv) inputs; + isBootstrapInstallPackage = builtins.elem (attrs.pname or null) [ + "flit-core" "installer" + ]; + + isBootstrapPackage = isBootstrapInstallPackage || builtins.elem (attrs.pname or null) ([ + "build" "packaging" "pyproject-hooks" "wheel" + ] ++ lib.optionals (python.pythonOlder "3.11") [ + "tomli" + ]); + # Keep extra attributes from `attrs`, e.g., `patchPhase', etc. self = toPythonModule (stdenv.mkDerivation ((builtins.removeAttrs attrs [ "disabled" "checkPhase" "checkInputs" "nativeCheckInputs" "doCheck" "doInstallCheck" "dontWrapPythonPrograms" "catchConflicts" "format" @@ -174,7 +184,10 @@ let wrapPython ensureNewerSourcesForZipFilesHook # move to wheel installer (pip) or builder (setuptools, flit, ...)? pythonRemoveTestsDirHook - ] ++ lib.optionals catchConflicts [ + ] ++ lib.optionals (catchConflicts && !isBootstrapPackage) [ + # When building a package that is also part of the bootstrap chain, we + # must ignore conflicts after installation, because there will be one with + # the package in the bootstrap. pythonCatchConflictsHook ] ++ lib.optionals removeBinBytecode [ pythonRemoveBinBytecodeHook @@ -184,15 +197,26 @@ let setuptoolsBuildHook ] ++ lib.optionals (format == "flit") [ flitBuildHook - ] ++ lib.optionals (format == "pyproject") [ - pipBuildHook - ] ++ lib.optionals (format == "wheel") [ + ] ++ lib.optionals (format == "pyproject") [( + if isBootstrapPackage then + pypaBuildHook.override { + inherit (python.pythonForBuild.pkgs.bootstrap) build; + wheel = null; + } + else + pypaBuildHook + )] ++ lib.optionals (format == "wheel") [ wheelUnpackHook ] ++ lib.optionals (format == "egg") [ eggUnpackHook eggBuildHook eggInstallHook - ] ++ lib.optionals (!(format == "other") || dontUsePipInstall) [ - pipInstallHook - ] ++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [ + ] ++ lib.optionals (format != "other") [( + if isBootstrapInstallPackage then + pypaInstallHook.override { + inherit (python.pythonForBuild.pkgs.bootstrap) installer; + } + else + pypaInstallHook + )] ++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [ # This is a test, however, it should be ran independent of the checkPhase and checkInputs pythonImportsCheckHook ] ++ lib.optionals (python.pythonAtLeast "3.3") [ -- cgit 1.4.1