2020-10-25 05:09:08 +00:00
|
|
|
pkgs: python: with pkgs.lib;
|
|
|
|
let
|
|
|
|
namePrefix = python.libPrefix + "-";
|
|
|
|
makeOverridablePythonPackage = f: origArgs:
|
|
|
|
let
|
|
|
|
ff = f origArgs;
|
|
|
|
overrideWith = newArgs: origArgs // (if isFunction newArgs then newArgs origArgs else newArgs);
|
|
|
|
in
|
|
|
|
if builtins.isAttrs ff then (ff // {
|
|
|
|
overridePythonAttrs = newArgs: makeOverridablePythonPackage f (overrideWith newArgs);
|
|
|
|
})
|
|
|
|
else if builtins.isFunction ff then {
|
|
|
|
overridePythonAttrs = newArgs: makeOverridablePythonPackage f (overrideWith newArgs);
|
|
|
|
__functor = self: ff;
|
|
|
|
}
|
|
|
|
else ff;
|
|
|
|
toPythonModule = drv:
|
|
|
|
drv.overrideAttrs( oldAttrs: {
|
|
|
|
# Use passthru in order to prevent rebuilds when possible.
|
|
|
|
passthru = (oldAttrs.passthru or {})// {
|
|
|
|
pythonModule = python;
|
|
|
|
pythonPath = [ ]; # Deprecated, for compatibility.
|
|
|
|
requiredPythonModules = python.pkgs.requiredPythonModules drv.propagatedBuildInputs;
|
|
|
|
};
|
|
|
|
});
|
|
|
|
callPackage = pkgs.newScope python.pkgs;
|
|
|
|
in
|
|
|
|
pySelf: pySuper: {
|
2020-11-19 04:11:19 +00:00
|
|
|
buildPythonPackage = makeOverridablePythonPackage (
|
2021-05-22 13:13:42 +00:00
|
|
|
makeOverridable (callPackage "${pkgs.path}/pkgs/development/interpreters/python/mk-python-derivation.nix" {
|
2020-11-19 04:11:19 +00:00
|
|
|
inherit namePrefix; # We want Python libraries to be named like e.g. "python3.6-${name}"
|
|
|
|
inherit toPythonModule; # Libraries provide modules
|
2021-05-22 13:13:42 +00:00
|
|
|
|
|
|
|
# this prevents infinite recursions when overriding setuptools later
|
|
|
|
setuptools = python.pkgs.setuptools;
|
2020-11-19 04:11:19 +00:00
|
|
|
})
|
|
|
|
);
|
2020-10-25 05:09:08 +00:00
|
|
|
|
2020-11-19 04:11:19 +00:00
|
|
|
buildPythonApplication = makeOverridablePythonPackage (
|
2021-05-22 13:13:42 +00:00
|
|
|
makeOverridable (callPackage "${pkgs.path}/pkgs/development/interpreters/python/mk-python-derivation.nix" {
|
2020-11-19 04:11:19 +00:00
|
|
|
namePrefix = ""; # Python applications should not have any prefix
|
|
|
|
toPythonModule = x: x; # Application does not provide modules.
|
2021-05-22 13:13:42 +00:00
|
|
|
|
|
|
|
# this prevents infinite recursions when overriding setuptools later
|
|
|
|
setuptools = python.pkgs.setuptools;
|
2020-11-19 04:11:19 +00:00
|
|
|
})
|
|
|
|
);
|
2020-10-25 05:09:08 +00:00
|
|
|
}
|