Merge remote-tracking branch 'upstream/python-unstable' into HEAD

This commit is contained in:
Frederik Rietdijk 2017-11-23 16:38:39 +01:00
commit 35f5912db5
14 changed files with 135 additions and 101 deletions

View File

@ -1,11 +1,14 @@
/* This function provides a generic Python package builder. It is
intended to work with packages that use `distutils/setuptools'
(http://pypi.python.org/pypi/setuptools/), which represents a large
number of Python packages nowadays. */
# This function provides a generic Python package builder,
# and can build packages that use distutils, setuptools or flit.
{ lib
, python
, mkPythonDerivation
, wrapPython
, setuptools
, unzip
, ensureNewerSourcesHook
, pythonModule
, namePrefix
, bootstrapped-pip
, flit
}:
@ -15,6 +18,9 @@ let
flit-specific = import ./build-python-package-flit.nix { inherit python flit; };
wheel-specific = import ./build-python-package-wheel.nix { };
common = import ./build-python-package-common.nix { inherit python bootstrapped-pip; };
mkPythonDerivation = import ./mk-python-derivation.nix {
inherit lib python wrapPython setuptools unzip ensureNewerSourcesHook pythonModule namePrefix;
};
in
{

View File

@ -201,7 +201,7 @@ in stdenv.mkDerivation {
in rec {
inherit libPrefix sitePackages x11Support hasDistutilsCxxPatch;
executable = libPrefix;
buildEnv = callPackage ../../wrapper.nix { python = self; };
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
pkgs = pythonPackages;
isPy2 = true;

View File

@ -160,7 +160,7 @@ in stdenv.mkDerivation {
in rec {
inherit libPrefix sitePackages x11Support;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; };
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
pkgs = pythonPackages;
isPy3 = true;

View File

@ -154,7 +154,7 @@ in stdenv.mkDerivation {
in rec {
inherit libPrefix sitePackages x11Support;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; };
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
pkgs = pythonPackages;
isPy3 = true;

View File

@ -153,7 +153,7 @@ in stdenv.mkDerivation {
in rec {
inherit libPrefix sitePackages x11Support;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; };
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
pkgs = pythonPackages;
isPy3 = true;

View File

@ -1,4 +1,4 @@
/* Generic builder for Python packages that come without a setup.py. */
# Generic builder.
{ lib
, python
@ -6,13 +6,13 @@
, setuptools
, unzip
, ensureNewerSourcesHook
# Whether the derivation provides a Python module or not.
, pythonModule
, namePrefix
}:
{ name ? "${attrs.pname}-${attrs.version}"
# by default prefix `name` e.g. "python3.3-${name}"
, namePrefix ? python.libPrefix + "-"
# Dependencies for building the package
, buildInputs ? []
@ -54,18 +54,21 @@ if disabled
then throw "${name} not supported for interpreter ${python.executable}"
else
python.stdenv.mkDerivation (builtins.removeAttrs attrs ["disabled" "checkInputs"] // {
python.stdenv.mkDerivation (builtins.removeAttrs attrs [
"disabled" "checkInputs" "doCheck" "doInstallCheck" "dontWrapPythonPrograms" "catchConflicts"
] // {
name = namePrefix + name;
inherit pythonPath;
buildInputs = [ wrapPython ] ++ buildInputs ++ pythonPath
++ [ (ensureNewerSourcesHook { year = "1980"; }) ]
buildInputs = ([ wrapPython (ensureNewerSourcesHook { year = "1980"; }) ]
++ (lib.optional (lib.hasSuffix "zip" attrs.src.name or "") unzip)
++ lib.optionals doCheck checkInputs;
++ lib.optionals doCheck checkInputs
++ lib.optional catchConflicts setuptools # If we nog longer propagate setuptools
++ buildInputs
++ pythonPath
);
# propagate python/setuptools to active setup-hook in nix-shell
# Propagate python and setuptools. We should stop propagating setuptools.
propagatedBuildInputs = propagatedBuildInputs ++ [ python setuptools ];
# Python packages don't have a checkPhase, only an installCheckPhase
@ -83,15 +86,12 @@ python.stdenv.mkDerivation (builtins.removeAttrs attrs ["disabled" "checkInputs"
passthru = {
inherit python; # The python interpreter
inherit pythonModule;
} // passthru;
meta = with lib.maintainers; {
meta = {
# default to python's platforms
platforms = python.meta.platforms;
} // meta // {
# add extra maintainer(s) to every package
maintainers = (meta.maintainers or []) ++ [ chaoflow ];
# a marker for release utilities to discover python packages
isBuildPythonPackage = python.meta.platforms;
};
} // meta;
})

View File

@ -137,7 +137,7 @@ in stdenv.mkDerivation rec {
inherit zlibSupport libPrefix sitePackages;
executable = "pypy";
isPypy = true;
buildEnv = callPackage ../../wrapper.nix { python = self; };
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
interpreter = "${self}/bin/${executable}";
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};
pkgs = pythonPackages;

View File

@ -2,13 +2,14 @@
, extraLibs ? []
, extraOutputsToInstall ? []
, postBuild ? ""
, ignoreCollisions ? false }:
, ignoreCollisions ? false
, requiredPythonModules
, }:
# Create a python executable that knows about additional packages.
let
recursivePthLoader = import ../../python-modules/recursive-pth-loader/default.nix { stdenv = stdenv; python = python; };
env = let
paths = stdenv.lib.closePropagation (extraLibs ++ [ python recursivePthLoader ] ) ;
paths = requiredPythonModules (extraLibs ++ [ python ] ) ;
in buildEnv {
name = "${python.name}-env";

View File

@ -11,8 +11,6 @@ stdenv.mkDerivation rec {
postPatch = "patchShebangs ./src/Analyses/cat_with_lines";
pythonPath = []; # python wrapper support
patches = [
./darwin.patch # configure relies on impure sw_vers to -Dunix
];

View File

@ -9,9 +9,9 @@ let
};
setuptools_source = fetchPypi {
pname = "setuptools";
version = "36.4.0";
version = "36.7.1";
format = "wheel";
sha256 = "4d54c0bfee283e78609169213f9c075827d5837086f58b588b417b093c23464b";
sha256 = "eaacfa35eb11199d0b017df416421781a75209817bff3f94820556e36c49bd77";
};
# TODO: Shouldn't be necessary anymore for pip > 9.0.1!

View File

@ -1,10 +1,9 @@
{ stdenv, buildPythonPackage, fetchPypi, isPy26, argparse, hypothesis, py
, setuptools_scm
, setuptools_scm, setuptools
}:
buildPythonPackage rec {
version = "3.2.5";
pname = "pytest";
name = "${pname}-${version}";
preCheck = ''
# don't test bash builtins
@ -16,8 +15,9 @@ buildPythonPackage rec {
sha256 = "6d5bd4f7113b444c55a3bbb5c738a3dd80d43563d063fc42dcb0aaefbdd78b81";
};
buildInputs = [ hypothesis setuptools_scm ];
propagatedBuildInputs = [ py ]
checkInputs = [ hypothesis ];
buildInputs = [ setuptools_scm ];
propagatedBuildInputs = [ py setuptools ]
++ (stdenv.lib.optional isPy26 argparse);
meta = with stdenv.lib; {

View File

@ -8,13 +8,13 @@
# Should use buildPythonPackage here somehow
stdenv.mkDerivation rec {
pname = "setuptools";
version = "36.6.0";
version = "36.7.1";
name = "${python.libPrefix}-${pname}-${version}";
src = fetchPypi {
inherit pname version;
extension = "zip";
sha256 = "62074589522a798da243f47348f38020d55b6c945652e2f2c09d3a96299812b7";
sha256 = "543becf5d33d8989dc5222403997488e9dc3872bdecdabb0f57184ca253ec1e8";
};
buildInputs = [ python wrapPython unzip ];

View File

@ -28,8 +28,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ wrapGAppsHook ];
pythonPath = with pythonPackages;
[ pycups pycurl dbus-python pygobject3 requests pycairo pysmbc ];
pythonPath = with pythonPackages; requiredPythonModules [ pycups pycurl dbus-python pygobject3 requests pycairo pysmbc ];
configureFlags =
[ "--with-udev-rules"

View File

@ -31,10 +31,9 @@ let
callPackage = pkgs.newScope self;
bootstrapped-pip = callPackage ../development/python-modules/bootstrapped-pip { };
namePrefix = python.libPrefix + "-";
mkPythonDerivation = makeOverridable( callPackage ../development/interpreters/python/mk-python-derivation.nix {
});
bootstrapped-pip = callPackage ../development/python-modules/bootstrapped-pip { };
# Derivations built with `buildPythonPackage` can already be overriden with `override`, `overrideAttrs`, and `overrideDerivation`.
# This function introduces `overridePythonAttrs` and it overrides the call to `buildPythonPackage`.
@ -52,13 +51,20 @@ let
}
else ff;
buildPythonPackage = makeOverridablePythonPackage (callPackage ../development/interpreters/python/build-python-package.nix {
inherit mkPythonDerivation;
buildPythonPackage = makeOverridablePythonPackage ( makeOverridable (callPackage ../development/interpreters/python/build-python-package.nix {
inherit bootstrapped-pip;
flit = self.flit;
});
# We want Python libraries to be named like e.g. "python3.6-${name}"
inherit namePrefix;
pythonModule = python;
}));
buildPythonApplication = args: buildPythonPackage ({namePrefix="";} // args );
buildPythonApplication = makeOverridablePythonPackage ( makeOverridable (callPackage ../development/interpreters/python/build-python-package.nix {
inherit bootstrapped-pip;
flit = self.flit;
namePrefix = "";
pythonModule = false;
}));
graphiteVersion = "1.0.2";
@ -80,10 +86,40 @@ let
else throw "Unsupported kind ${kind}");
in fetcher (builtins.removeAttrs attrs ["format"]) );
# Check whether a derivation provides a Python module.
hasPythonModule = drv: (hasAttr "pythonModule" drv) && ( (getAttr "pythonModule" drv) == python);
# Get list of required Python modules given a list of derivations.
requiredPythonModules = drvs: let
filterNull = list: filter (x: !isNull x) list;
conditionalGetRecurse = attr: condition: drv: let f = conditionalGetRecurse attr condition; in
(if (condition drv) then unique [drv]++(concatMap f (filterNull(getAttr attr drv))) else []);
_required = drv: conditionalGetRecurse "propagatedBuildInputs" hasPythonModule drv;
in [python] ++ (unique (concatMap _required (filterNull drvs)));
# Create a PYTHONPATH from a list of derivations. This function recurses into the items to find derivations
# providing Python modules.
makePythonPath = drvs: stdenv.lib.makeSearchPath python.sitePackages (requiredPythonModules drvs);
# Convert derivation to a Python module.
toPythonModule = drv:
drv.overrideAttrs( oldAttrs: {
# Use passthru in order to prevent rebuilds when possible.
passthru = (oldAttrs.passthru or {})// {
name = namePrefix + oldAttrs.name;
pythonModule = python;
pythonPath = [ ]; # Deprecated, for compatibility.
};
});
disabledIf = x: drv:
if x then throw "${removePrefix namePrefix (drv.pname or drv.name)} not supported for interpreter ${python.executable}" else drv;
in {
inherit python bootstrapped-pip pythonAtLeast pythonOlder isPy26 isPy27 isPy33 isPy34 isPy35 isPy36 isPyPy isPy3k mkPythonDerivation buildPythonPackage buildPythonApplication;
inherit python bootstrapped-pip pythonAtLeast pythonOlder isPy26 isPy27 isPy33 isPy34 isPy35 isPy36 isPyPy isPy3k buildPythonPackage buildPythonApplication;
inherit fetchPypi callPackage;
inherit hasPythonModule requiredPythonModules makePythonPath disabledIf;
# helpers
@ -154,9 +190,7 @@ in {
breathe = callPackage ../development/python-modules/breathe { };
browsermob-proxy = if ! isPy3k then
callPackage ../development/python-modules/browsermob-proxy {}
else throw "browsermob-proxy is not supported for ${python.executable}";
browsermob-proxy = disabledIf isPy3k (callPackage ../development/python-modules/browsermob-proxy {});
bugseverywhere = callPackage ../applications/version-management/bugseverywhere {};
@ -222,11 +256,11 @@ in {
pyamf = callPackage ../development/python-modules/pyamf { };
pyatspi = if isPy3k then callPackage ../development/python-modules/pyatspi { } else throw "pyatspi not supported for interpreter ${python.executable}";
pyatspi = disabledIf (!isPy3k) (callPackage ../development/python-modules/pyatspi { });
pycairo = callPackage ../development/python-modules/pycairo { };
pycangjie = if isPy3k then callPackage ../development/python-modules/pycangjie { } else throw "pycangjie not supported for interpreter ${python.executable}";
pycangjie = disabledIf (!isPy3k) (callPackage ../development/python-modules/pycangjie { });
pycrypto = callPackage ../development/python-modules/pycrypto { };
@ -236,7 +270,7 @@ in {
PyChromecast = callPackage ../development/python-modules/pychromecast { };
pyexiv2 = if (!isPy3k) then callPackage ../development/python-modules/pyexiv2 {} else throw "pyexiv2 not supported for interpreter ${python.executable}";
pyexiv2 = disabledIf isPy3k (callPackage ../development/python-modules/pyexiv2 {});
py3exiv2 = callPackage ../development/python-modules/py3exiv2 { };
@ -298,13 +332,13 @@ in {
PyWebDAV = callPackage ../development/python-modules/pywebdav { };
pyxml = if !isPy3k then callPackage ../development/python-modules/pyxml{ } else throw "pyxml not supported for interpreter ${python.executable}";
pyxml = disabledIf isPy3k (callPackage ../development/python-modules/pyxml{ });
relatorio = callPackage ../development/python-modules/relatorio { };
pyzufall = callPackage ../development/python-modules/pyzufall { };
rhpl = if !isPy3k then callPackage ../development/python-modules/rhpl {} else throw "rhpl not supported for interpreter ${python.executable}";
rhpl = disabledIf isPy3k (callPackage ../development/python-modules/rhpl {});
simpleeval = callPackage ../development/python-modules/simpleeval { };
@ -1336,10 +1370,10 @@ in {
# Build boost for this specific Python version
# TODO: use separate output for libboost_python.so
boost = pkgs.boost.override {
boost = toPythonModule (pkgs.boost.override {
inherit (self) python numpy;
enablePython = true;
};
});
buttersink = buildPythonPackage rec {
name = "buttersink-0.6.8";
@ -3200,15 +3234,15 @@ in {
propagatedBuildInputs = with self; [ pyusb ];
};
opencv = pkgs.opencv.override {
opencv = toPythonModule (pkgs.opencv.override {
enablePython = true;
pythonPackages = self;
};
});
opencv3 = pkgs.opencv3.override {
opencv3 = toPythonModule (pkgs.opencv3.override {
enablePython = true;
pythonPackages = self;
};
});
openidc-client = callPackage ../development/python-modules/openidc-client/default.nix {};
@ -4735,13 +4769,11 @@ in {
easy-thumbnails = callPackage ../development/python-modules/easy-thumbnails { };
eccodes = if (isPy27) then
(pkgs.eccodes.overrideAttrs (oldattrs: {
name = "${python.libPrefix}-" + oldattrs.name;
})).override {
enablePython = true;
pythonPackages = self;
} else throw "eccodes not supported for interpreter ${python.executable}";
eccodes = disabledIf (!isPy27)
(toPythonModule (pkgs.eccodes.override {
enablePython = true;
pythonPackages = self;
}));
EditorConfig = buildPythonPackage rec {
name = "EditorConfig-${version}";
@ -8712,10 +8744,10 @@ in {
folium = callPackage ../development/python-modules/folium { };
fontforge = pkgs.fontforge.override {
fontforge = toPythonModule (pkgs.fontforge.override {
withPython = true;
inherit python;
};
});
fonttools = callPackage ../development/python-modules/fonttools { };
@ -8889,11 +8921,9 @@ in {
};
};
gdal = (pkgs.gdal.overrideDerivation (oldattrs: {
name = "${python.libPrefix}-" + oldattrs.name;
})).override {
gdal = toPythonModule (pkgs.gdal.override {
pythonPackages = self;
};
});
gdrivefs = buildPythonPackage rec {
version = "0.14.8";
@ -9265,13 +9295,11 @@ in {
};
};
grib-api = if (isPy27) then
(pkgs.grib-api.overrideAttrs (oldattrs: {
name = "${python.libPrefix}-" + oldattrs.name;
})).override {
enablePython = true;
pythonPackages = self;
} else throw "grib-api not supported for interpreter ${python.executable}";
grib-api = disabledIf (!isPy27) (toPythonModule
(pkgs.grib-api.override {
enablePython = true;
pythonPackages = self;
}));
gspread = buildPythonPackage rec {
version = "0.2.3";
@ -10373,14 +10401,14 @@ in {
inherit (pkgs) libsodium;
};
libplist = if isPy3k then throw "libplist not supported for interpreter ${python.executable}" else
(pkgs.libplist.override{python2Packages=self; }).py;
libplist = disabledIf isPy3k
(toPythonModule (pkgs.libplist.override{python2Packages=self; })).py;
libxml2 = if isPy3k then throw "libxml2 not supported for interpreter ${python.executable}" else
(pkgs.libxml2.override{pythonSupport=true; python2=python;}).py;
libxml2 = disabledIf isPy3k
(toPythonModule (pkgs.libxml2.override{pythonSupport=true; python2=python;})).py;
libxslt = if isPy3k then throw "libxslt not supported for interpreter ${python.executable}" else
(pkgs.libxslt.override{pythonSupport=true; python2=python; inherit (self) libxml2;}).py;
libxslt = disabledIf isPy3k
(toPythonModule (pkgs.libxslt.override{pythonSupport=true; python2=python; inherit (self) libxml2;})).py;
limnoria = buildPythonPackage rec {
name = "limnoria-${version}";
@ -16994,9 +17022,8 @@ in {
};
};
qscintilla = if isPy3k || isPyPy
then throw "qscintilla-${pkgs.qscintilla.version} not supported for interpreter ${python.executable}"
else buildPythonPackage rec {
qscintilla = disabledIf (isPy3k || isPyPy)
(buildPythonPackage rec {
# TODO: Qt5 support
name = "qscintilla-${version}";
version = pkgs.qscintilla.version;
@ -17025,7 +17052,7 @@ in {
maintainers = with maintainers; [ danbst ];
platforms = platforms.linux;
};
};
});
qserve = buildPythonPackage rec {
@ -17173,6 +17200,10 @@ in {
readme_renderer = callPackage ../development/python-modules/readme_renderer { };
rivet = disabledIf isPy3k (toPythonModule (pkgs.rivet.override {
python2 = python;
}));
rjsmin = callPackage ../development/python-modules/rjsmin { };
pysolr = buildPythonPackage rec {
@ -17444,7 +17475,7 @@ in {
rply = callPackage ../development/python-modules/rply/default.nix {};
rpm = (pkgs.rpm.override{inherit python;});
rpm = toPythonModule (pkgs.rpm.override{inherit python;});
rpmfluff = callPackage ../development/python-modules/rpmfluff {};
@ -22091,7 +22122,7 @@ EOF
};
# For backwards compatibility. Please use nixpkgs.udiskie instead.
udiskie = pkgs.udiskie.override { pythonPackages = self; };
udiskie = toPythonModule (pkgs.udiskie.override { pythonPackages = self; });
# Should be bumped along with EFL!
pythonefl = buildPythonPackage rec {
@ -24353,9 +24384,8 @@ EOF
ROPGadget = callPackage ../development/python-modules/ROPGadget { };
# We need "normal" libxml2 and not the python package by the same name.
pywbem = if !(isPy36)
then callPackage ../development/python-modules/pywbem { libxml2 = pkgs.libxml2; }
else throw "pywbem not supported for interpreter ${python.executable}";
pywbem = disabledIf isPy36
(callPackage ../development/python-modules/pywbem { libxml2 = pkgs.libxml2; });
unicorn = callPackage ../development/python-modules/unicorn { };
@ -24427,8 +24457,8 @@ EOF
zeep = callPackage ../development/python-modules/zeep { };
zeitgeist = if isPy3k then throw "zeitgeist not supported for interpreter ${python.executable}" else
(pkgs.zeitgeist.override{python2Packages=self;}).py;
zeitgeist = disabledIf isPy3k
(toPythonModule (pkgs.zeitgeist.override{python2Packages=self;})).py;
zeroconf = callPackage ../development/python-modules/zeroconf { };