diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2017-03-21 10:08:10 +0100 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2017-08-09 11:10:54 +0200 |
commit | 345b35c48af0c6534fc649ef4b2050ebf0b91d50 (patch) | |
tree | 0609075a939f31769ac494062dc634f009083577 /pkgs | |
parent | 90282d95bd5c468a10bd06315023830a752918e2 (diff) | |
download | nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar.gz nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar.bz2 nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar.lz nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar.xz nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.tar.zst nixlib-345b35c48af0c6534fc649ef4b2050ebf0b91d50.zip |
Python: add buildPythonPackage.overridePythonPackage method.
This allows one to always override the call to `buildPythonPackage`. In the following example we create an environment where we have the `blaze` package using an older version of `pandas`. We override first the Python interpreter and pass `packageOverrides` which contains the overrides for packages in the package set. ``` with import <nixpkgs> {}; (let python = let packageOverrides = self: super: { pandas = super.pandas.overridePythonPackage(old: rec { version = "0.19.1"; name = "pandas-${version}"; src = super.fetchPypi { pname = "pandas"; inherit version; sha256 = "08blshqj9zj1wyjhhw3kl2vas75vhhicvv72flvf1z3jvapgw295"; }; }); }; in pkgs.python3.override {inherit packageOverrides;}; in python.withPackages(ps: [ps.blaze])).env ```
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/top-level/python-packages.nix | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6df0af982957..eb5e5459450b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -35,7 +35,24 @@ let mkPythonDerivation = makeOverridable( callPackage ../development/interpreters/python/mk-python-derivation.nix { }); - buildPythonPackage = makeOverridable (callPackage ../development/interpreters/python/build-python-package.nix { + + # Derivations built with `buildPythonPackage` can already be overriden with `override`, `overrideAttrs`, and `overrideDerivation`. + # This function introduces `overridePythonPackage` and it overrides the call to `buildPythonPackage`. + makeOverridablePythonPackage = f: origArgs: + let + ff = f origArgs; + overrideWith = newArgs: origArgs // (if builtins.isFunction newArgs then newArgs origArgs else newArgs); + in + if builtins.isAttrs ff then (ff // { + overridePythonPackage = newArgs: makeOverridable f (overrideWith newArgs); + }) + else if builtins.isFunction ff then { + overridePythonPackage = newArgs: makeOverridable f (overrideWith newArgs); + __functor = self: ff; + } + else ff; + + buildPythonPackage = makeOverridablePythonPackage (callPackage ../development/interpreters/python/build-python-package.nix { inherit mkPythonDerivation; inherit bootstrapped-pip; flit = self.flit; |