buildPythonPackage: recompile bytecode for reproducibility
Due to a change in pip the unpacked wheels are no longer reproducible. We recompile the bytecode to cleanup this error. https://github.com/NixOS/nixpkgs/issues/81441
This commit is contained in:
parent
a7ea828f09
commit
818cf7827b
|
@ -1,5 +1,6 @@
|
||||||
# Hooks for building Python packages.
|
# Hooks for building Python packages.
|
||||||
{ python
|
{ python
|
||||||
|
, lib
|
||||||
, callPackage
|
, callPackage
|
||||||
, makeSetupHook
|
, makeSetupHook
|
||||||
, disabledIf
|
, disabledIf
|
||||||
|
@ -97,6 +98,16 @@ in rec {
|
||||||
};
|
};
|
||||||
} ./python-namespaces-hook.sh) {};
|
} ./python-namespaces-hook.sh) {};
|
||||||
|
|
||||||
|
pythonRecompileBytecodeHook = callPackage ({ }:
|
||||||
|
makeSetupHook {
|
||||||
|
name = "python-recompile-bytecode-hook";
|
||||||
|
substitutions = {
|
||||||
|
inherit pythonInterpreter pythonSitePackages;
|
||||||
|
compileArgs = lib.concatStringsSep " " (["-q" "-f" "-i -"] ++ lib.optionals isPy3k ["-j $NIX_BUILD_CORES"]);
|
||||||
|
bytecodeName = if isPy3k then "__pycache__" else "*.pyc";
|
||||||
|
};
|
||||||
|
} ./python-recompile-bytecode-hook.sh ) {};
|
||||||
|
|
||||||
pythonRemoveBinBytecodeHook = callPackage ({ }:
|
pythonRemoveBinBytecodeHook = callPackage ({ }:
|
||||||
makeSetupHook {
|
makeSetupHook {
|
||||||
name = "python-remove-bin-bytecode-hook";
|
name = "python-remove-bin-bytecode-hook";
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Setup hook for recompiling bytecode.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/81441
|
||||||
|
echo "Sourcing python-recompile-bytecode-hook.sh"
|
||||||
|
|
||||||
|
# Remove all bytecode from the $out output. Then, recompile only site packages folder
|
||||||
|
# Note this effectively duplicates `python-remove-bin-bytecode`, but long-term
|
||||||
|
# this hook should be removed again.
|
||||||
|
|
||||||
|
pythonRecompileBytecodePhase () {
|
||||||
|
# TODO: consider other outputs than $out
|
||||||
|
|
||||||
|
items="$(find "$out" -name "@bytecodeName@")"
|
||||||
|
if [[ -n $items ]]; then
|
||||||
|
for pycache in $items; do
|
||||||
|
rm -rf "$pycache"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
find "$out"/@pythonSitePackages@ -name "*.py" -exec @pythonInterpreter@ -OO -m compileall @compileArgs@ {} +
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z "${dontUsePythonRecompileBytecode-}" ]; then
|
||||||
|
postPhases+=" pythonRecompileBytecodePhase"
|
||||||
|
fi
|
|
@ -17,6 +17,7 @@
|
||||||
, pythonCatchConflictsHook
|
, pythonCatchConflictsHook
|
||||||
, pythonImportsCheckHook
|
, pythonImportsCheckHook
|
||||||
, pythonNamespacesHook
|
, pythonNamespacesHook
|
||||||
|
, pythonRecompileBytecodeHook
|
||||||
, pythonRemoveBinBytecodeHook
|
, pythonRemoveBinBytecodeHook
|
||||||
, pythonRemoveTestsDirHook
|
, pythonRemoveTestsDirHook
|
||||||
, setuptoolsBuildHook
|
, setuptoolsBuildHook
|
||||||
|
@ -110,6 +111,7 @@ let
|
||||||
python
|
python
|
||||||
wrapPython
|
wrapPython
|
||||||
ensureNewerSourcesForZipFilesHook # move to wheel installer (pip) or builder (setuptools, flit, ...)?
|
ensureNewerSourcesForZipFilesHook # move to wheel installer (pip) or builder (setuptools, flit, ...)?
|
||||||
|
pythonRecompileBytecodeHook # Remove when solved https://github.com/NixOS/nixpkgs/issues/81441
|
||||||
pythonRemoveTestsDirHook
|
pythonRemoveTestsDirHook
|
||||||
] ++ lib.optionals catchConflicts [
|
] ++ lib.optionals catchConflicts [
|
||||||
setuptools pythonCatchConflictsHook
|
setuptools pythonCatchConflictsHook
|
||||||
|
|
|
@ -118,6 +118,7 @@ in {
|
||||||
pythonCatchConflictsHook
|
pythonCatchConflictsHook
|
||||||
pythonImportsCheckHook
|
pythonImportsCheckHook
|
||||||
pythonNamespacesHook
|
pythonNamespacesHook
|
||||||
|
pythonRecompileBytecodeHook
|
||||||
pythonRemoveBinBytecodeHook
|
pythonRemoveBinBytecodeHook
|
||||||
pythonRemoveTestsDirHook
|
pythonRemoveTestsDirHook
|
||||||
setuptoolsBuildHook
|
setuptoolsBuildHook
|
||||||
|
|
Loading…
Reference in a new issue