python3.pkgs.pypaBuildHook: fix conflicts
This modifies the pypaBuildHook to not propagate its own python dependencies into the build environment. This prevents package conflicts. - modify pypa-build-hook.sh to call pyproject-build via an absolute path. This removes the need of putting the dependencies inside the hook's propagatedBuildInputs - remove the hook's dependencies from propagatedBuildInputs - add a passthru test to the hook testing for the fix
This commit is contained in:
@@ -7,12 +7,15 @@
|
||||
, packaging
|
||||
, pyproject-hooks
|
||||
, tomli
|
||||
, makeWrapper
|
||||
}:
|
||||
let
|
||||
buildBootstrapPythonModule = basePackage: attrs: stdenv.mkDerivation ({
|
||||
pname = "${python.libPrefix}-bootstrap-${basePackage.pname}";
|
||||
inherit (basePackage) version src meta;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
@@ -38,12 +41,30 @@ let
|
||||
bootstrap-pyproject-hooks = buildBootstrapPythonModule pyproject-hooks {};
|
||||
|
||||
bootstrap-tomli = buildBootstrapPythonModule tomli {};
|
||||
|
||||
sitePkgs = python.sitePackages;
|
||||
in
|
||||
buildBootstrapPythonModule build {
|
||||
propagatedBuildInputs = [
|
||||
bootstrap-packaging
|
||||
bootstrap-pyproject-hooks
|
||||
] ++ lib.optionals (python.pythonOlder "3.11") [
|
||||
bootstrap-tomli
|
||||
];
|
||||
# like the installPhase above, but wrapping the pyproject-build command
|
||||
# to set up PYTHONPATH with the correct dependencies.
|
||||
# This allows using `pyproject-build` without propagating its dependencies
|
||||
# into the build environment, which is necessary to prevent
|
||||
# pythonCatchConflicts from raising false positive alerts.
|
||||
# This would happen whenever the package to build has a dependency on
|
||||
# another version of a package that is also a dependency of pyproject-build.
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
PYTHONPATH="${installer}/${python.sitePackages}" \
|
||||
${python.interpreter} -m installer \
|
||||
--destdir "$out" --prefix "" dist/*.whl
|
||||
|
||||
wrapProgram $out/bin/pyproject-build \
|
||||
--prefix PYTHONPATH : "$out/${sitePkgs}" \
|
||||
--prefix PYTHONPATH : "${bootstrap-pyproject-hooks}/${sitePkgs}" \
|
||||
--prefix PYTHONPATH : "${bootstrap-packaging}/${sitePkgs}" \
|
||||
--prefix PYTHONPATH : "${bootstrap-tomli}/${sitePkgs}"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user