diff --git a/pkgs/development/interpreters/python/hooks/default.nix b/pkgs/development/interpreters/python/hooks/default.nix index 5d605b240ad8..9d4b61c1a0fa 100644 --- a/pkgs/development/interpreters/python/hooks/default.nix +++ b/pkgs/development/interpreters/python/hooks/default.nix @@ -115,6 +115,11 @@ in rec { }; } ./python-namespaces-hook.sh) {}; + pythonOutputDistHook = callPackage ({ }: + makeSetupHook { + name = "python-output-dist-hook"; + } ./python-output-dist-hook.sh ) {}; + pythonRecompileBytecodeHook = callPackage ({ }: makeSetupHook { name = "python-recompile-bytecode-hook"; diff --git a/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh b/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh new file mode 100644 index 000000000000..e73e45cd597a --- /dev/null +++ b/pkgs/development/interpreters/python/hooks/python-output-dist-hook.sh @@ -0,0 +1,10 @@ +# Setup hook for storing dist folder (wheels/sdists) in a separate output +echo "Sourcing python-catch-conflicts-hook.sh" + +pythonOutputDistPhase() { + echo "Executing pythonOutputDistPhase" + mv "dist" "$dist" + echo "Finished executing pythonOutputDistPhase" +} + +preFixupPhases+=" pythonOutputDistPhase" diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index f37ad592cb49..f82611554a2e 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -17,6 +17,7 @@ , pythonCatchConflictsHook , pythonImportsCheckHook , pythonNamespacesHook +, pythonOutputDistHook , pythonRemoveBinBytecodeHook , pythonRemoveTestsDirHook , setuptoolsBuildHook @@ -49,6 +50,8 @@ # Enabled to detect some (native)BuildInputs mistakes , strictDeps ? true +, outputs ? [ "out" ] + # used to disable derivation, useful for specific python versions , disabled ? false @@ -106,11 +109,13 @@ else let inherit (python) stdenv; + withDistOutput = lib.elem format ["pyproject" "setuptools" "flit"]; + name_ = name; self = toPythonModule (stdenv.mkDerivation ((builtins.removeAttrs attrs [ "disabled" "checkPhase" "checkInputs" "doCheck" "doInstallCheck" "dontWrapPythonPrograms" "catchConflicts" "format" - "disabledTestPaths" + "disabledTestPaths" "outputs" ]) // { name = namePrefix + name_; @@ -144,6 +149,8 @@ let ] ++ lib.optionals (python.pythonAtLeast "3.3") [ # Optionally enforce PEP420 for python3 pythonNamespacesHook + ] ++ lib.optionals withDistOutput [ + pythonOutputDistHook ] ++ nativeBuildInputs; buildInputs = buildInputs ++ pythonPath; @@ -177,6 +184,8 @@ let # Python packages built through cross-compilation are always for the host platform. disallowedReferences = lib.optionals (python.stdenv.hostPlatform != python.stdenv.buildPlatform) [ python.pythonForBuild ]; + outputs = outputs ++ lib.optional withDistOutput "dist"; + meta = { # default to python's platforms platforms = python.meta.platforms; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 9e8e4aec9425..fd9a0c583da8 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -119,6 +119,7 @@ in { pythonCatchConflictsHook pythonImportsCheckHook pythonNamespacesHook + pythonOutputDistHook pythonRecompileBytecodeHook pythonRelaxDepsHook pythonRemoveBinBytecodeHook