about summary refs log tree commit diff
path: root/pkgs/top-level
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/top-level')
-rw-r--r--pkgs/top-level/aliases.nix1
-rw-r--r--pkgs/top-level/all-packages.nix379
-rw-r--r--pkgs/top-level/coq-packages.nix8
-rw-r--r--pkgs/top-level/haskell-packages.nix20
-rw-r--r--pkgs/top-level/metrics.nix3
-rw-r--r--pkgs/top-level/ocaml-packages.nix9
-rw-r--r--pkgs/top-level/perl-packages.nix369
-rw-r--r--pkgs/top-level/php-packages.nix166
-rw-r--r--pkgs/top-level/python-packages.nix7148
-rw-r--r--pkgs/top-level/release-lib.nix2
10 files changed, 962 insertions, 7143 deletions
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index df143b059e7d..02971c5dcff6 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -133,6 +133,7 @@ mapAliases ({
   gupnp_dlna = gupnp-dlna; # added 2018-02-25
   gupnp_igd = gupnp-igd; # added 2018-02-25
   gupnptools = gupnp-tools;  # added 2015-12-19
+  gutenberg = zola;  # added 2018-11-17
   heimdalFull = heimdal; # added 2018-05-01
   hicolor_icon_theme = hicolor-icon-theme; # added 2018-02-25
   htmlTidy = html-tidy;  # added 2014-12-06
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ecf3716e9263..a2da88459649 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -183,7 +183,7 @@ with pkgs;
   fetchfossil = callPackage ../build-support/fetchfossil { };
 
   fetchgit = callPackage ../build-support/fetchgit {
-    git = gitMinimal;
+    git = buildPackages.gitMinimal;
   };
 
   fetchgitPrivate = callPackage ../build-support/fetchgit/private.nix { };
@@ -294,8 +294,8 @@ with pkgs;
     ... # For hash agility
   }@args: fetchzip ({
     inherit name;
-    url = "http://git.savannah.gnu.org/cgit/${repo}.git/snapshot/${repo}-${rev}.tar.gz";
-    meta.homepage = "http://git.savannah.gnu.org/cgit/${repo}.git/";
+    url = "https://git.savannah.gnu.org/cgit/${repo}.git/snapshot/${repo}-${rev}.tar.gz";
+    meta.homepage = "https://git.savannah.gnu.org/cgit/${repo}.git/";
   } // removeAttrs args [ "repo" "rev" ]) // { inherit rev; };
 
   # gitlab example
@@ -314,8 +314,8 @@ with pkgs;
     ... # For hash agility
   }@args: fetchzip ({
     inherit name;
-    url = "http://repo.or.cz/${repo}.git/snapshot/${rev}.tar.gz";
-    meta.homepage = "http://repo.or.cz/${repo}.git/";
+    url = "https://repo.or.cz/${repo}.git/snapshot/${rev}.tar.gz";
+    meta.homepage = "https://repo.or.cz/${repo}.git/";
   } // removeAttrs args [ "repo" "rev" ]) // { inherit rev; };
 
   fetchNuGet = callPackage ../build-support/fetchnuget { };
@@ -344,7 +344,7 @@ with pkgs;
       inherit contents compressor prepend;
     };
 
-  makeWrapper = makeSetupHook { deps = [ dieHook ]; }
+  makeWrapper = makeSetupHook { deps = [ dieHook ]; substitutions = { shell = pkgs.runtimeShell; }; }
                               ../build-support/setup-hooks/make-wrapper.sh;
 
   makeModulesClosure = { kernel, firmware, rootModules, allowMissing ? false }:
@@ -420,6 +420,8 @@ with pkgs;
 
   iconConvTools = callPackage ../build-support/icon-conv-tools {};
 
+  #package writers
+  writers = callPackage ../build-support/writers {};
 
   ### TOOLS
 
@@ -475,6 +477,8 @@ with pkgs;
 
   acme-client = callPackage ../tools/networking/acme-client { inherit (darwin) apple_sdk; };
 
+  amass = callPackage ../tools/networking/amass { };
+
   afew = callPackage ../applications/networking/mailreaders/afew { pythonPackages = python3Packages; };
 
   afio = callPackage ../tools/archivers/afio { };
@@ -591,6 +595,8 @@ with pkgs;
 
   autoflake = callPackage ../development/tools/analysis/autoflake { };
 
+  autospotting = callPackage ../applications/misc/autospotting { };
+
   avfs = callPackage ../tools/filesystems/avfs { };
 
   avldrums-lv2 = callPackage ../applications/audio/avldrums-lv2 { };
@@ -605,6 +611,8 @@ with pkgs;
 
   aws-env = callPackage ../tools/admin/aws-env { };
 
+  aws-google-auth = pythonPackages.callPackage ../tools/admin/aws-google-auth { };
+
   aws-okta = callPackage ../tools/security/aws-okta { };
 
   aws-rotate-key = callPackage ../tools/admin/aws-rotate-key { };
@@ -679,6 +687,8 @@ with pkgs;
 
   cozy = callPackage ../applications/audio/cozy-audiobooks { };
 
+  deskew = callPackage ../applications/graphics/deskew { };
+
   diskus = callPackage ../tools/misc/diskus { };
 
   djmount = callPackage ../tools/filesystems/djmount { };
@@ -784,6 +794,8 @@ with pkgs;
 
   xcodeenv = callPackage ../development/mobile/xcodeenv { };
 
+  ssh-agents = callPackage ../tools/networking/ssh-agents { };
+
   titaniumenv = callPackage ../development/mobile/titaniumenv { };
 
   abootimg = callPackage ../development/mobile/abootimg {};
@@ -909,7 +921,8 @@ with pkgs;
     filebeat6
     heartbeat6
     metricbeat6
-    packetbeat6;
+    packetbeat6
+    journalbeat6;
 
   filebeat = filebeat6;
   heartbeat = heartbeat6;
@@ -932,12 +945,8 @@ with pkgs;
 
   bindfs = callPackage ../tools/filesystems/bindfs { };
 
-  bins = callPackage ../tools/graphics/bins { };
-
   bitbucket-cli = python2Packages.bitbucket-cli;
 
-  bittornado = callPackage ../tools/networking/p2p/bittornado { };
-
   blink = callPackage ../applications/networking/instant-messengers/blink { };
 
   blockhash = callPackage ../tools/graphics/blockhash { };
@@ -1520,6 +1529,8 @@ with pkgs;
 
   metabase = callPackage ../servers/metabase { };
 
+  miniserve = callPackage ../tools/misc/miniserve { };
+
   mkspiffs = callPackage ../tools/filesystems/mkspiffs { };
 
   mkspiffs-presets = recurseIntoAttrs (callPackages ../tools/filesystems/mkspiffs/presets.nix { });
@@ -1577,6 +1588,8 @@ with pkgs;
 
   parallel-rust = callPackage ../tools/misc/parallel-rust { };
 
+  pyCA = python3Packages.callPackage ../applications/video/pyca {};
+
   scour = with python3Packages; toPythonApplication scour;
 
   s2png = callPackage ../tools/graphics/s2png { };
@@ -1995,6 +2008,10 @@ with pkgs;
       inherit (gnome3) dconf;
     };
 
+    table-chinese = callPackage ../tools/inputmethods/ibus-engines/ibus-table-chinese {
+      ibus-table = ibus-engines.table;
+    };
+
     table-others = callPackage ../tools/inputmethods/ibus-engines/ibus-table-others {
       ibus-table = ibus-engines.table;
     };
@@ -2078,7 +2095,7 @@ with pkgs;
 
   crackxls = callPackage ../tools/security/crackxls { };
 
-  create-cycle-app = nodePackages_8_x.create-cycle-app;
+  create-cycle-app = nodePackages.create-cycle-app;
 
   createrepo_c = callPackage ../tools/package-management/createrepo_c { };
 
@@ -2124,20 +2141,10 @@ with pkgs;
 
   curl_7_59 = callPackage ../tools/networking/curl/7_59.nix rec {
     fetchurl = fetchurlBoot;
-    http2Support = true;
-    zlibSupport = true;
-    sslSupport = zlibSupport;
-    scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin;
-    gssSupport = !stdenv.hostPlatform.isWindows;
   };
 
   curl = callPackage ../tools/networking/curl rec {
     fetchurl = fetchurlBoot;
-    http2Support = true;
-    zlibSupport = true;
-    sslSupport = zlibSupport;
-    scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin;
-    gssSupport = !stdenv.hostPlatform.isWindows;
   };
 
   curl_unix_socket = callPackage ../tools/networking/curl-unix-socket rec { };
@@ -2355,6 +2362,8 @@ with pkgs;
 
   duply = callPackage ../tools/backup/duply { };
 
+  dvd-vr = callPackage ../tools/cd-dvd/dvd-vr { };
+
   dvdisaster = callPackage ../tools/cd-dvd/dvdisaster { };
 
   dvdplusrwtools = callPackage ../tools/cd-dvd/dvd+rw-tools { };
@@ -2367,6 +2376,8 @@ with pkgs;
     # customConfig = builtins.readFile ./dvtm.config.h;
   };
 
+  dvtm-unstable = callPackage ../tools/misc/dvtm/unstable.nix {};
+
   ecmtools = callPackage ../tools/cd-dvd/ecm-tools { };
 
   e2tools = callPackage ../tools/filesystems/e2tools { };
@@ -2445,7 +2456,7 @@ with pkgs;
 
   # The latest version used by elasticsearch, logstash, kibana and the the beats from elastic.
   elk5Version = "5.6.9";
-  elk6Version = "6.3.2";
+  elk6Version = "6.5.1";
 
   elasticsearch5 = callPackage ../servers/search/elasticsearch/5.x.nix { };
   elasticsearch6 = callPackage ../servers/search/elasticsearch { };
@@ -2757,6 +2768,8 @@ with pkgs;
 
   fuseiso = callPackage ../tools/filesystems/fuseiso { };
 
+  fusuma = callPackage ../tools/inputmethods/fusuma {};
+
   fdbPackages = callPackage ../servers/foundationdb {
     stdenv49 = overrideCC stdenv gcc49;
   };
@@ -2766,10 +2779,12 @@ with pkgs;
     foundationdb52
     foundationdb60;
 
-  foundationdb = foundationdb52;
+  foundationdb = foundationdb60;
 
   fuse-7z-ng = callPackage ../tools/filesystems/fuse-7z-ng { };
 
+  fusee-launcher = callPackage ../development/tools/fusee-launcher { };
+
   fwknop = callPackage ../tools/security/fwknop { };
 
   exfat = callPackage ../tools/filesystems/exfat { };
@@ -2880,11 +2895,11 @@ with pkgs;
 
   gitlab-runner = callPackage ../development/tools/continuous-integration/gitlab-runner { };
 
-  gitlab-shell = callPackage ../applications/version-management/gitlab-shell { };
+  gitlab-shell = callPackage ../applications/version-management/gitlab/gitlab-shell { };
 
-  gitlab-workhorse = callPackage ../applications/version-management/gitlab-workhorse { };
+  gitlab-workhorse = callPackage ../applications/version-management/gitlab/gitlab-workhorse { };
 
-  gitaly = callPackage ../applications/version-management/gitaly { };
+  gitaly = callPackage ../applications/version-management/gitlab/gitaly { };
 
   gitstats = callPackage ../applications/version-management/gitstats { };
 
@@ -2898,6 +2913,8 @@ with pkgs;
 
   glmark2 = callPackage ../tools/graphics/glmark2 { };
 
+  glogg = libsForQt5.callPackage ../tools/text/glogg { };
+
   glxinfo = callPackage ../tools/graphics/glxinfo { };
 
   gmrender-resurrect = callPackage ../tools/networking/gmrender-resurrect {
@@ -3098,12 +3115,8 @@ with pkgs;
     stdenv = stdenv_32bit;
   };
 
-  gx = callPackage ../tools/package-management/gx {
-    buildGoPackage = buildGo110Package;
-  };
-  gx-go = callPackage ../tools/package-management/gx/go {
-    buildGoPackage = buildGo110Package;
-  };
+  gx = callPackage ../tools/package-management/gx { };
+  gx-go = callPackage ../tools/package-management/gx/go { };
 
   sbsigntool = callPackage ../tools/security/sbsigntool { };
 
@@ -3215,7 +3228,7 @@ with pkgs;
 
   halibut = callPackage ../tools/typesetting/halibut { };
 
-  halide = callPackage ../development/compilers/halide {};
+  halide = callPackage ../development/compilers/halide { };
 
   hardinfo = callPackage ../tools/system/hardinfo { };
 
@@ -3484,17 +3497,15 @@ with pkgs;
 
   ised = callPackage ../tools/misc/ised {};
 
-  isl = isl_0_17;
+  isl = isl_0_20;
   isl_0_11 = callPackage ../development/libraries/isl/0.11.1.nix { };
-  isl_0_12 = callPackage ../development/libraries/isl/0.12.2.nix { };
   isl_0_14 = callPackage ../development/libraries/isl/0.14.1.nix { };
-  isl_0_15 = callPackage ../development/libraries/isl/0.15.0.nix { };
   isl_0_17 = callPackage ../development/libraries/isl/0.17.1.nix { };
+  isl_0_20 = callPackage ../development/libraries/isl/0.20.0.nix { };
 
   ispike = callPackage ../development/libraries/science/robotics/ispike { };
 
   isync = callPackage ../tools/networking/isync { };
-  isyncUnstable = callPackage ../tools/networking/isync/unstable.nix { };
 
   jaaa = callPackage ../applications/audio/jaaa { };
 
@@ -3518,6 +3529,8 @@ with pkgs;
 
   jhead = callPackage ../tools/graphics/jhead { };
 
+  jid = callPackage ../development/tools/jid { };
+
   jing = self.jing-trang;
   jing-trang = callPackage ../tools/text/xml/jing-trang { };
 
@@ -3762,11 +3775,17 @@ with pkgs;
 
   mxt-app = callPackage ../misc/mxt-app { };
 
+  mxisd = callPackage ../servers/mxisd { };
+
   nagstamon = callPackage ../tools/misc/nagstamon {
     pythonPackages = python3Packages;
   };
 
-  netdata = callPackage ../tools/system/netdata { };
+  nbench = callPackage ../tools/misc/nbench { };
+
+  netdata = callPackage ../tools/system/netdata {
+    inherit (darwin.apple_sdk.frameworks) CoreFoundation IOKit;
+  };
 
   netsurf = recurseIntoAttrs (let callPackage = newScope pkgs.netsurf; in rec {
     # ui could be gtk, sixel or framebuffer. Note that console display (sixel)
@@ -3846,7 +3865,7 @@ with pkgs;
     nodejs = pkgs.nodejs-6_x;
   };
 
-  nodePackages = nodePackages_8_x;
+  nodePackages = nodePackages_10_x;
 
   npm2nix = nodePackages.npm2nix;
 
@@ -4112,10 +4131,6 @@ with pkgs;
 
   mdbtools = callPackage ../tools/misc/mdbtools { };
 
-  mdbtools_git = callPackage ../tools/misc/mdbtools/git.nix {
-    inherit (gnome2) scrollkeeper;
-  };
-
   mdk = callPackage ../development/tools/mdk { };
 
   mdp = callPackage ../applications/misc/mdp { };
@@ -4376,7 +4391,11 @@ with pkgs;
 
   nextcloud = callPackage ../servers/nextcloud { };
 
-  nextcloud-client = libsForQt5.callPackage ../applications/networking/nextcloud-client { };
+  nextcloud-client-unwrapped = libsForQt5.callPackage ../applications/networking/nextcloud-client { };
+
+  nextcloud-client = callPackage ../applications/networking/nextcloud-client/wrapper.nix {
+    nextcloud-client = nextcloud-client-unwrapped;
+  };
 
   nextcloud-news-updater = callPackage ../servers/nextcloud/news-updater.nix { };
 
@@ -4662,6 +4681,10 @@ with pkgs;
   pandoc = haskell.lib.overrideCabal (haskell.lib.justStaticExecutables haskellPackages.pandoc) (drv: {
     configureFlags = drv.configureFlags or [] ++ ["-fembed_data_files"];
     buildDepends = drv.buildDepends or [] ++ [haskellPackages.file-embed];
+    postInstall = ''
+      mkdir -p $out/share/man/man1
+      cp man/pandoc.1 $out/share/man/man1/
+    '';
   });
 
   pamtester = callPackage ../tools/security/pamtester { };
@@ -4686,6 +4709,8 @@ with pkgs;
 
   pepper = callPackage ../tools/admin/salt/pepper { };
 
+  perceptualdiff = callPackage ../tools/graphics/perceptualdiff { };
+
   percona-xtrabackup = callPackage ../tools/backup/percona-xtrabackup {
     boost = boost159;
   };
@@ -4703,6 +4728,8 @@ with pkgs;
       };
   };
 
+  pulumi-bin = callPackage ../tools/admin/pulumi { };
+
   p0f = callPackage ../tools/security/p0f { };
 
   pngout = callPackage ../tools/graphics/pngout { };
@@ -4762,8 +4789,6 @@ with pkgs;
     inherit (pythonPackages) pillow;
   };
 
-  pdfshuffler = callPackage ../applications/misc/pdfshuffler { };
-
   briss = callPackage ../tools/graphics/briss { };
 
   brickd = callPackage ../servers/brickd {
@@ -4780,6 +4805,8 @@ with pkgs;
 
   pg_top = callPackage ../tools/misc/pg_top { };
 
+  pgcenter = callPackage ../tools/misc/pgcenter { };
+
   pgmetrics = callPackage ../tools/misc/pgmetrics { };
 
   pdsh = callPackage ../tools/networking/pdsh {
@@ -5415,10 +5442,6 @@ with pkgs;
   smarty3 = callPackage ../development/libraries/smarty3 { };
   smarty3-i18n = callPackage ../development/libraries/smarty3-i18n { };
 
-  smbldaptools = callPackage ../tools/networking/smbldaptools {
-    inherit (perlPackages) perlldap CryptSmbHash DigestSHA1;
-  };
-
   smbnetfs = callPackage ../tools/filesystems/smbnetfs {};
 
   smenu = callPackage ../tools/misc/smenu { };
@@ -5624,6 +5647,8 @@ with pkgs;
 
   znapzend = callPackage ../tools/backup/znapzend { };
 
+  targetcli = callPackage ../os-specific/linux/targetcli { };
+
   tarsnap = callPackage ../tools/backup/tarsnap { };
 
   tarsnapper = callPackage ../tools/backup/tarsnapper { };
@@ -5974,6 +5999,10 @@ with pkgs;
     SDL = SDL_sixel;
   };
 
+  openconnect_pa = callPackage ../tools/networking/openconnect_pa {
+    openssl = null;
+  };
+
   openconnect = openconnect_gnutls;
 
   openconnect_openssl = callPackage ../tools/networking/openconnect {
@@ -6032,6 +6061,8 @@ with pkgs;
 
   woof = callPackage ../tools/misc/woof { };
 
+  wpscan = callPackage ../tools/security/wpscan { };
+
   wsmancli = callPackage ../tools/system/wsmancli {};
 
   wolfebin = callPackage ../tools/networking/wolfebin {
@@ -6207,6 +6238,10 @@ with pkgs;
   volumeicon = callPackage ../tools/audio/volumeicon { };
 
   waf = callPackage ../development/tools/build-managers/waf { python = python3; };
+  wafHook = makeSetupHook {
+    deps = [ python ];
+    substitutions = { inherit waf; };
+  } ../development/tools/build-managers/waf/setup-hook.sh;
 
   wakelan = callPackage ../tools/networking/wakelan { };
 
@@ -6318,7 +6353,9 @@ with pkgs;
 
   xiccd = callPackage ../tools/misc/xiccd { };
 
-  xidlehook = callPackage ../tools/X11/xidlehook {};
+  xidlehook = callPackage ../tools/X11/xidlehook {
+    inherit (darwin.apple_sdk.frameworks) Security;
+  };
 
   xorriso = callPackage ../tools/cd-dvd/xorriso { };
 
@@ -6332,7 +6369,9 @@ with pkgs;
 
   xsel = callPackage ../tools/misc/xsel { };
 
-  xsv = callPackage ../tools/text/xsv { };
+  xsv = callPackage ../tools/text/xsv {
+    inherit (darwin.apple_sdk.frameworks) Security;
+  };
 
   xtreemfs = callPackage ../tools/filesystems/xtreemfs {
     boost = boost165;
@@ -6566,11 +6605,6 @@ with pkgs;
     name = "clang-wrapper-with-reexport-hack";
     bintools = darwin.binutils.override {
       useMacosReexportHack = true;
-      bintools = darwin.binutils.bintools.override {
-        cctools = darwin.cctools.override {
-          enableDumpNormalizedLibArgs = true;
-        };
-      };
     };
   };
 
@@ -7370,6 +7404,7 @@ with pkgs;
   # For beta and nightly releases use the nixpkgs-mozilla overlay
   rust = callPackage ../development/compilers/rust ({
     inherit (darwin.apple_sdk.frameworks) CoreFoundation Security;
+    llvm = llvm_7;
   } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) {
     stdenv = overrideCC stdenv gcc6; # with gcc-7: undefined reference to `__divmoddi4'
   });
@@ -7389,23 +7424,9 @@ with pkgs;
 
   defaultCrateOverrides = callPackage ../build-support/rust/default-crate-overrides.nix { };
 
+  makeRustPlatform = callPackage ../build-support/rust/make-rust-platform.nix {};
   rustPlatform = recurseIntoAttrs (makeRustPlatform rust);
 
-  makeRustPlatform = rust: lib.fix (self:
-    let
-      callPackage = newScope self;
-    in {
-      inherit rust;
-
-      buildRustPackage = callPackage ../build-support/rust {
-        inherit rust;
-      };
-
-      rustcSrc = callPackage ../development/compilers/rust/rust-src.nix {
-        inherit (rust) rustc;
-      };
-    });
-
   cargo-download = callPackage ../tools/package-management/cargo-download { };
   cargo-edit = callPackage ../tools/package-management/cargo-edit { };
   cargo-release = callPackage ../tools/package-management/cargo-release { };
@@ -7823,7 +7844,7 @@ with pkgs;
   # When switching these sets, please update docs at ../../doc/languages-frameworks/python.md
   python = python2;
   python2 = python27;
-  python3 = python36;
+  python3 = python37;
   pypy = pypy27;
 
   # Python interpreter that is build with all modules, including tkinter.
@@ -7867,8 +7888,8 @@ with pkgs;
   # Python package sets.
   python27Packages = lib.hiPrioSet (recurseIntoAttrs python27.pkgs);
   python35Packages = python35.pkgs;
-  python36Packages = recurseIntoAttrs python36.pkgs;
-  python37Packages = python37.pkgs;
+  python36Packages = python36.pkgs;
+  python37Packages = recurseIntoAttrs python37.pkgs;
   pypyPackages = pypy.pkgs;
 
   # Should eventually be moved inside Python interpreters.
@@ -8557,6 +8578,7 @@ with pkgs;
   gradle_2_14 = self.gradleGen.gradle_2_14;
   gradle_2_5 = self.gradleGen.gradle_2_5;
   gradle_3_5 = self.gradleGen.gradle_3_5;
+  gradle_4_10 = self.gradleGen.gradle_4_10;
 
   gperf = callPackage ../development/tools/misc/gperf { };
   # 3.1 changed some parameters from int to size_t, leading to mismatches.
@@ -8654,6 +8676,8 @@ with pkgs;
 
   kube-prompt = callPackage ../development/tools/kube-prompt { };
 
+  kubicorn = callPackage ../development/tools/kubicorn {  };
+
   kustomize = callPackage ../development/tools/kustomize { };
 
   kythe = callPackage ../development/tools/kythe { };
@@ -8697,6 +8721,8 @@ with pkgs;
 
   go-md2man = callPackage ../development/tools/misc/md2man {};
 
+  mage = callPackage ../development/tools/build-managers/mage { };
+
   minify = callPackage ../development/web/minify { };
 
   minizinc = callPackage ../development/tools/minizinc { };
@@ -8791,9 +8817,12 @@ with pkgs;
 
   pmccabe = callPackage ../development/tools/misc/pmccabe { };
 
+  pkgconf = callPackage ../development/tools/misc/pkgconf {};
+
   pkgconfig = callPackage ../development/tools/misc/pkgconfig {
     fetchurl = fetchurlBoot;
   };
+
   pkgconfigUpstream = lowPrio (pkgconfig.override { vanilla = true; });
 
   postiats-utilities = callPackage ../development/tools/postiats-utilities {};
@@ -8897,12 +8926,16 @@ with pkgs;
   scons = sconsPackages.scons_3_0_1;
   scons_2_5_1 = sconsPackages.scons_2_5_1;
 
+  mill = callPackage ../development/tools/build-managers/mill { };
+
   sbt = callPackage ../development/tools/build-managers/sbt { };
   sbt-with-scala-native = callPackage ../development/tools/build-managers/sbt/scala-native.nix { };
   simpleBuildTool = sbt;
 
   sbt-extras = callPackage ../development/tools/build-managers/sbt-extras { };
 
+  scss-lint = callPackage ../development/tools/scss-lint { };
+
   shallot = callPackage ../tools/misc/shallot { };
 
   shards = callPackage ../development/tools/build-managers/shards { };
@@ -8950,8 +8983,12 @@ with pkgs;
 
   spoofer-gui = callPackage ../tools/networking/spoofer { withGUI = true; };
 
+  sqlcheck = callPackage ../development/tools/database/sqlcheck { };
+
   sqlitebrowser = libsForQt5.callPackage ../development/tools/database/sqlitebrowser { };
 
+  sqlite-web = callPackage ../development/tools/database/sqlite-web { };
+
   sselp = callPackage ../tools/X11/sselp{ };
 
   stm32flash = callPackage ../development/tools/misc/stm32flash { };
@@ -8999,6 +9036,10 @@ with pkgs;
 
   tweak = callPackage ../applications/editors/tweak { };
 
+  tychus = callPackage ../development/tools/tychus {
+    inherit (darwin.apple_sdk.frameworks) CoreFoundation;
+  };
+
   uhd = callPackage ../development/tools/misc/uhd { };
 
   uisp = callPackage ../development/tools/misc/uisp { };
@@ -9048,6 +9089,8 @@ with pkgs;
     deps = [ xcbuild ];
   } ../development/tools/xcbuild/setup-hook.sh  ;
 
+  xcpretty = callPackage ../development/tools/xcpretty { };
+
   xmlindent = callPackage ../development/web/xmlindent {};
 
   xpwn = callPackage ../development/mobile/xpwn {};
@@ -9127,8 +9170,11 @@ with pkgs;
     #      apr with db58 on freebsd (nov 2015), for unknown reasons
   };
 
+  aravis = callPackage ../development/libraries/aravis {
+    inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad;
+  };
+
   arb = callPackage ../development/libraries/arb {};
-  arb-git = callPackage ../development/libraries/arb/git.nix {};
 
   argp-standalone = callPackage ../development/libraries/argp-standalone {};
 
@@ -9337,8 +9383,6 @@ with pkgs;
 
   commoncpp2 = callPackage ../development/libraries/commoncpp2 { };
 
-  confuse = callPackage ../development/libraries/confuse { };
-
   coredumper = callPackage ../development/libraries/coredumper { };
 
   ctl = callPackage ../development/libraries/ctl { };
@@ -9464,7 +9508,6 @@ with pkgs;
   editline = callPackage ../development/libraries/editline { };
 
   eigen = callPackage ../development/libraries/eigen {};
-  eigen3_3 = callPackage ../development/libraries/eigen/3.3.nix {};
 
   eigen2 = callPackage ../development/libraries/eigen/2.0.nix {};
 
@@ -9599,6 +9642,10 @@ with pkgs;
     inherit (darwin) cf-private;
     inherit (darwin.apple_sdk.frameworks) Cocoa AGL GLUT;
   };
+  fltk14 = callPackage ../development/libraries/fltk/1.4.nix {
+    inherit (darwin) cf-private;
+    inherit (darwin.apple_sdk.frameworks) Cocoa AGL GLUT;
+  };
   fltk = self.fltk13;
 
   flyway = callPackage ../development/tools/flyway { };
@@ -10156,6 +10203,8 @@ with pkgs;
 
   hyena = callPackage ../development/libraries/hyena { mono = mono4; };
 
+  hyperscan = callPackage ../development/libraries/hyperscan { };
+
   icu58 = callPackage (import ../development/libraries/icu/58.nix fetchurl) ({
     nativeBuildRoot = buildPackages.icu58.override { buildRootOnly = true; };
   } //
@@ -10613,6 +10662,7 @@ with pkgs;
   in
     (gap.override { keepAllPackages = false; }).overrideAttrs (oldAttrs: {
       name = "libgap-${oldAttrs.pname}-${version}";
+      inherit version;
       src = fetchurl {
         url = "https://www.gap-system.org/pub/gap/gap48/tar.bz2/gap${version}_${pkgVer}.tar.bz2";
         sha256 = "19n2p1mdg33s2x9rs51iak7rgndc1cwr56jyqnah0g1ydgg1yh6b";
@@ -10694,7 +10744,7 @@ with pkgs;
 
   libf2c = callPackage ../development/libraries/libf2c {};
 
-  libfive = callPackage ../development/libraries/libfive {};
+  libfive = callPackage ../development/libraries/libfive { };
 
   libfixposix = callPackage ../development/libraries/libfixposix {};
 
@@ -11055,8 +11105,6 @@ with pkgs;
 
   libosip = callPackage ../development/libraries/osip {};
 
-  libosip_3 = callPackage ../development/libraries/osip/3.nix {};
-
   libosmium = callPackage ../development/libraries/libosmium { };
 
   libosmocore = callPackage ../applications/misc/libosmocore { };
@@ -11269,7 +11317,6 @@ with pkgs;
   libviper = callPackage ../development/libraries/libviper { };
 
   libvpx = callPackage ../development/libraries/libvpx { };
-  libvpx-git = callPackage ../development/libraries/libvpx/git.nix { };
 
   libvterm = callPackage ../development/libraries/libvterm { };
   libvterm-neovim = callPackage ../development/libraries/libvterm-neovim { };
@@ -11298,7 +11345,9 @@ with pkgs;
 
   libxdg_basedir = callPackage ../development/libraries/libxdg-basedir { };
 
-  libxkbcommon = callPackage ../development/libraries/libxkbcommon { };
+  libxkbcommon = libxkbcommon_8;
+  libxkbcommon_8 = callPackage ../development/libraries/libxkbcommon { };
+  libxkbcommon_7 = callPackage ../development/libraries/libxkbcommon/libxkbcommon_7.nix { };
 
   libxklavier = callPackage ../development/libraries/libxklavier { };
 
@@ -11401,8 +11450,6 @@ with pkgs;
   mbedtls_1_3 = callPackage ../development/libraries/mbedtls/1.3.nix { };
   polarssl = mbedtls; # TODO: add to aliases.nix
 
-  mdds_0_7_1 = callPackage ../development/libraries/mdds/0.7.1.nix { };
-  mdds_0_12_1 = callPackage ../development/libraries/mdds/0.12.1.nix { };
   mdds = callPackage ../development/libraries/mdds { };
 
   mediastreamer = callPackage ../development/libraries/mediastreamer { };
@@ -11648,6 +11695,7 @@ with pkgs;
 
   opencv3 = callPackage ../development/libraries/opencv/3.x.nix {
     enableCuda = config.cudaSupport or false;
+    inherit (darwin) cf-private;
     inherit (darwin.apple_sdk.frameworks) AVFoundation Cocoa QTKit VideoDecodeAcceleration;
   };
 
@@ -11655,6 +11703,12 @@ with pkgs;
     enableCuda = false;
   };
 
+  opencv4 = callPackage ../development/libraries/opencv/4.x.nix {
+    enableCuda = config.cudaSupport or false;
+    inherit (darwin) cf-private;
+    inherit (darwin.apple_sdk.frameworks) AVFoundation Cocoa QTKit VideoDecodeAcceleration;
+  };
+
   openexr = callPackage ../development/libraries/openexr { };
 
   openexrid-unstable = callPackage ../development/libraries/openexrid-unstable { };
@@ -11702,20 +11756,11 @@ with pkgs;
 
   inherit (callPackages ../development/libraries/openssl {
       fetchurl = fetchurlBoot;
-      cryptodevHeaders = linuxPackages.cryptodev.override {
-        fetchurl = fetchurlBoot;
-        onlyHeaders = true;
-      };
     })
     openssl_1_0_2
     openssl_1_1;
 
-  openssl-chacha = callPackage ../development/libraries/openssl/chacha.nix {
-    cryptodevHeaders = linuxPackages.cryptodev.override {
-      fetchurl = fetchurlBoot;
-      onlyHeaders = true;
-    };
-  };
+  openssl-chacha = callPackage ../development/libraries/openssl/chacha.nix { };
 
   opensubdiv = callPackage ../development/libraries/opensubdiv {
     cudaSupport = config.cudaSupport or false;
@@ -11803,8 +11848,6 @@ with pkgs;
 
   podofo = callPackage ../development/libraries/podofo { lua5 = lua5_1; };
 
-  poker-eval = callPackage ../development/libraries/poker-eval { };
-
   polkit = callPackage ../development/libraries/polkit { };
 
   polkit_qt4 = callPackage ../development/libraries/polkit-qt-1/qt-4.nix { };
@@ -11941,6 +11984,7 @@ with pkgs;
       harfbuzz = harfbuzzFull;
       inherit libGL;
       inherit perl;
+      inherit (darwin) cf-private;
       inherit (gst_all_1) gstreamer gst-plugins-base;
       inherit (gnome3) gtk3 dconf;
     });
@@ -11956,8 +12000,9 @@ with pkgs;
       harfbuzz = harfbuzzFull;
       inherit libGL;
       inherit perl;
-      inherit (gst_all_1) gstreamer gst-plugins-base;
+      inherit (darwin) cf-private;
       inherit (gnome3) gtk3 dconf;
+      inherit (gst_all_1) gstreamer gst-plugins-base;
     });
 
   libsForQt511 = recurseIntoAttrs (lib.makeScope qt511.newScope mkLibsForQt5);
@@ -12499,7 +12544,7 @@ with pkgs;
   taglib-sharp = callPackage ../development/libraries/taglib-sharp { };
 
   talloc = callPackage ../development/libraries/talloc {
-    python = python2;
+    python = buildPackages.python2;
   };
 
   tclap = callPackage ../development/libraries/tclap {};
@@ -13149,7 +13194,7 @@ with pkgs;
     packages = [];
   };
 
-  rstudioWrapper = callPackage ../development/r-modules/wrapper-rstudio.nix {
+  rstudioWrapper = libsForQt5.callPackage ../development/r-modules/wrapper-rstudio.nix {
     recommendedPackages = with rPackages; [
       boot class cluster codetools foreign KernSmooth lattice MASS
       Matrix mgcv nlme nnet rpart spatial survival
@@ -13369,7 +13414,9 @@ with pkgs;
 
   hiawatha = callPackage ../servers/http/hiawatha {};
 
-  home-assistant = callPackage ../servers/home-assistant { };
+  home-assistant = callPackage ../servers/home-assistant {
+    python = python36;
+  };
 
   hydron = callPackage ../servers/hydron { };
 
@@ -13522,6 +13569,8 @@ with pkgs;
 
   pshs = callPackage ../servers/http/pshs { };
 
+  system-sendmail = lowPrio (callPackage ../servers/mail/system-sendmail { });
+
   # PulseAudio daemons
 
   pulseaudio = callPackage ../servers/pulseaudio {
@@ -14165,8 +14214,6 @@ with pkgs;
   fuse3 = fusePackages.fuse_3;
   fuse-common = hiPrio fusePackages.fuse_3.common;
 
-  fusionio-util = callPackage ../os-specific/linux/fusionio/util.nix { };
-
   fxload = callPackage ../os-specific/linux/fxload { };
 
   gfxtablet = callPackage ../os-specific/linux/gfxtablet {};
@@ -14353,16 +14400,6 @@ with pkgs;
       ];
   };
 
-  linux_4_18 = callPackage ../os-specific/linux/kernel/linux-4.18.nix {
-    kernelPatches =
-      [ kernelPatches.bridge_stp_helper
-        # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md
-        # when adding a new linux version
-        # kernelPatches.cpu-cgroup-v2."4.11"
-        kernelPatches.modinst_arg_list_too_long
-      ];
-  };
-
   linux_4_19 = callPackage ../os-specific/linux/kernel/linux-4.19.nix {
     kernelPatches =
       [ kernelPatches.bridge_stp_helper
@@ -14449,8 +14486,6 @@ with pkgs;
 
     v4l2loopback = callPackage ../os-specific/linux/v4l2loopback { };
 
-    fusionio-vsl = callPackage ../os-specific/linux/fusionio/vsl.nix { };
-
     lttng-modules = callPackage ../os-specific/linux/lttng-modules { };
 
     broadcom_sta = callPackage ../os-specific/linux/broadcom-sta { };
@@ -14560,7 +14595,6 @@ with pkgs;
   linuxPackages_4_4 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_4);
   linuxPackages_4_9 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_9);
   linuxPackages_4_14 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_14);
-  linuxPackages_4_18 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_18);
   linuxPackages_4_19 = recurseIntoAttrs (linuxPackagesFor pkgs.linux_4_19);
   # Don't forget to update linuxPackages_latest!
 
@@ -14643,6 +14677,8 @@ with pkgs;
 
   buildLinux = attrs: callPackage ../os-specific/linux/kernel/generic.nix attrs;
 
+  cryptodev = linuxPackages_4_9.cryptodev;
+
   dpdk = callPackage ../os-specific/linux/dpdk {
     kernel = null; # dpdk modules are in linuxPackages.dpdk.kmod
   };
@@ -14882,6 +14918,8 @@ with pkgs;
   procps = if stdenv.isLinux then callPackage ../os-specific/linux/procps-ng { }
            else unixtools.procps;
 
+  procdump = callPackage ../os-specific/linux/procdump { };
+
   qemu_kvm = lowPrio (qemu.override { hostCpuOnly = true; });
 
   # See `xenPackages` source for explanations.
@@ -14959,6 +14997,8 @@ with pkgs;
 
   smem = callPackage ../os-specific/linux/smem { };
 
+  speedometer = callPackage ../os-specific/linux/speedometer { };
+
   statifier = callPackage ../os-specific/linux/statifier { };
 
   sysdig = callPackage ../os-specific/linux/sysdig {
@@ -15386,6 +15426,8 @@ with pkgs;
 
   maia-icon-theme = callPackage ../data/icons/maia-icon-theme { };
 
+  mailcap = callPackage ../data/misc/mailcap { };
+
   marathi-cursive = callPackage ../data/fonts/marathi-cursive { };
 
   man-pages = callPackage ../data/documentation/man-pages { };
@@ -15670,6 +15712,8 @@ with pkgs;
 
   xorg-rgb = callPackage ../data/misc/xorg-rgb {};
 
+  zafiro-icons = callPackage ../data/icons/zafiro-icons { };
+
   zeal = libsForQt5.callPackage ../data/documentation/zeal { };
 
   zilla-slab = callPackage ../data/fonts/zilla-slab { };
@@ -15760,7 +15804,7 @@ with pkgs;
 
   antiword = callPackage ../applications/office/antiword {};
 
-  ao = callPackage ../applications/graphics/ao {};
+  ao = libfive;
 
   apache-directory-studio = callPackage ../applications/networking/apache-directory-studio {};
 
@@ -15933,6 +15977,7 @@ with pkgs;
 
   bitwig-studio1 =  callPackage ../applications/audio/bitwig-studio/bitwig-studio1.nix {
     inherit (gnome3) zenity;
+    libxkbcommon = libxkbcommon_7;
   };
   bitwig-studio2 =  callPackage ../applications/audio/bitwig-studio/bitwig-studio2.nix {
     inherit (gnome3) zenity;
@@ -15985,8 +16030,6 @@ with pkgs;
 
   bspwm = callPackage ../applications/window-managers/bspwm { };
 
-  bspwm-unstable = callPackage ../applications/window-managers/bspwm/unstable.nix { };
-
   btops = callPackage ../applications/window-managers/btops { };
 
   bvi = callPackage ../applications/editors/bvi { };
@@ -16346,6 +16389,8 @@ with pkgs;
 
   eaglemode = callPackage ../applications/misc/eaglemode { };
 
+  echoip = callPackage ../servers/echoip { };
+
   eclipses = recurseIntoAttrs (callPackage ../applications/editors/eclipse {
     jdk = jdk11;
   });
@@ -16540,8 +16585,6 @@ with pkgs;
 
     rectMark = callPackage ../applications/editors/emacs-modes/rect-mark { };
 
-    remember = callPackage ../applications/editors/emacs-modes/remember { };
-
     rudel = callPackage ../applications/editors/emacs-modes/rudel { };
 
     s = callPackage ../applications/editors/emacs-modes/s { };
@@ -17098,6 +17141,8 @@ with pkgs;
 
   manul = callPackage ../development/tools/manul { };
 
+  mindforger = libsForQt5.callPackage ../applications/editors/mindforger { };
+
   mi2ly = callPackage ../applications/audio/mi2ly {};
 
   moe =  callPackage ../applications/editors/moe { };
@@ -17222,11 +17267,6 @@ with pkgs;
 
   gv = callPackage ../applications/misc/gv { };
 
-  gutenberg = callPackage ../applications/misc/gutenberg {
-    inherit (darwin.apple_sdk.frameworks) CoreServices;
-    inherit (darwin) cf-private;
-  };
-
   guvcview = callPackage ../os-specific/linux/guvcview {
     pulseaudioSupport = config.pulseaudio or true;
     ffmpeg = ffmpeg_2;
@@ -17467,8 +17507,6 @@ with pkgs;
   # Impressive, formerly known as "KeyJNote".
   impressive = callPackage ../applications/office/impressive { };
 
-  inferno = pkgsi686Linux.callPackage ../applications/inferno { };
-
   inkscape = callPackage ../applications/graphics/inkscape {
     lcms = lcms2;
     poppler = poppler_0_61;
@@ -18233,8 +18271,6 @@ with pkgs;
 
   sxhkd = callPackage ../applications/window-managers/sxhkd { };
 
-  sxhkd-unstable = callPackage ../applications/window-managers/sxhkd/unstable.nix { };
-
   mpop = callPackage ../applications/networking/mpop {
     inherit (darwin.apple_sdk.frameworks) Security;
   };
@@ -18564,10 +18600,10 @@ with pkgs;
 
   poezio = python3Packages.poezio;
 
-  pommed = callPackage ../os-specific/linux/pommed {};
-
   pommed_light = callPackage ../os-specific/linux/pommed-light {};
 
+  polymake = callPackage ../applications/science/math/polymake { };
+
   pond = callPackage ../applications/networking/instant-messengers/pond { };
 
   ponymix = callPackage ../applications/audio/ponymix { };
@@ -18697,6 +18733,8 @@ with pkgs;
 
   qtscrobbler = callPackage ../applications/audio/qtscrobbler { };
 
+  quantomatic = callPackage ../applications/science/physics/quantomatic { };
+
   quassel = libsForQt5.callPackage ../applications/networking/irc/quassel {
     monolithic = true;
     daemon = false;
@@ -19289,6 +19327,11 @@ with pkgs;
     vte = gnome3.vte;
   };
 
+  aminal = callPackage ../applications/misc/aminal {
+    inherit (darwin.apple_sdk.frameworks) Carbon Cocoa Kernel;
+    inherit (darwin) cf-private;
+  };
+
   termite-unwrapped = callPackage ../applications/misc/termite {
     vte = gnome3.vte-ng;
   };
@@ -19406,6 +19449,8 @@ with pkgs;
 
   transgui = callPackage ../applications/networking/p2p/transgui { };
 
+  traverso = libsForQt5.callPackage ../applications/audio/traverso { };
+
   trayer = callPackage ../applications/window-managers/trayer { };
 
   tree = callPackage ../tools/system/tree {};
@@ -19464,7 +19509,9 @@ with pkgs;
 
   vcv-rack = callPackage ../applications/audio/vcv-rack { };
 
-  vdirsyncer = callPackage ../tools/misc/vdirsyncer { };
+  vdirsyncer = callPackage ../tools/misc/vdirsyncer {
+    inherit (darwin.apple_sdk.frameworks) Security;
+  };
 
   vdpauinfo = callPackage ../tools/X11/vdpauinfo { };
 
@@ -20036,11 +20083,15 @@ with pkgs;
     inherit (gnome3) gsettings-desktop-schemas vte;
   };
 
+  termonad-with-packages = callPackage ../applications/misc/termonad {
+    inherit (haskellPackages) ghcWithPackages;
+  };
+
   xtrace = callPackage ../tools/X11/xtrace { };
 
   xmacro = callPackage ../tools/X11/xmacro { };
 
-  xmove = callPackage ../applications/misc/xmove { };
+  xmlcopyeditor = callPackage ../applications/editors/xmlcopyeditor { };
 
   xmp = callPackage ../applications/audio/xmp { };
 
@@ -20115,6 +20166,11 @@ with pkgs;
 
   zita-njbridge = callPackage ../applications/audio/zita-njbridge { };
 
+  zola = callPackage ../applications/misc/zola {
+    inherit (darwin.apple_sdk.frameworks) CoreServices;
+    inherit (darwin) cf-private;
+  };
+
   zoom-us = libsForQt59.callPackage ../applications/networking/instant-messengers/zoom-us { };
 
   zotero = callPackage ../applications/office/zotero { };
@@ -20188,8 +20244,6 @@ with pkgs;
 
   blackshades = callPackage ../games/blackshades { };
 
-  blackshadeselite = callPackage ../games/blackshadeselite { };
-
   blobby = callPackage ../games/blobby { };
 
   boohu = callPackage ../games/boohu { };
@@ -20972,6 +21026,8 @@ with pkgs;
 
   hsetroot = callPackage ../tools/X11/hsetroot { };
 
+  imwheel = callPackage ../tools/X11/imwheel { };
+
   kakasi = callPackage ../tools/text/kakasi { };
 
   lumina = libsForQt5.callPackage ../desktops/lumina { };
@@ -21018,6 +21074,8 @@ with pkgs;
 
   gnome-themes-extra = gnome3.gnome-themes-extra;
 
+  nordic = callPackage ../misc/themes/nordic { };
+
   numix-gtk-theme = callPackage ../misc/themes/numix { };
 
   numix-solarized-gtk-theme = callPackage ../misc/themes/numix-solarized { };
@@ -21196,6 +21254,10 @@ with pkgs;
 
   ncbi_tools = callPackage ../applications/science/biology/ncbi-tools { };
 
+  niftyreg = callPackage ../applications/science/biology/niftyreg { };
+
+  niftyseg = callPackage ../applications/science/biology/niftyseg { };
+
   paml = callPackage ../applications/science/biology/paml { };
 
   picard-tools = callPackage ../applications/science/biology/picard-tools { };
@@ -21336,9 +21398,7 @@ with pkgs;
 
   scs = callPackage ../development/libraries/science/math/scs { };
 
-  sage = callPackage ../applications/science/math/sage {
-    nixpkgs = pkgs;
-  };
+  sage = callPackage ../applications/science/math/sage { };
   sageWithDoc = sage.override { withDoc = true; };
 
   suitesparse_4_2 = callPackage ../development/libraries/science/math/suitesparse/4.2.nix { };
@@ -21497,9 +21557,7 @@ with pkgs;
     java = if stdenv.isLinux then jre else jdk;
   };
 
-  iprover = callPackage ../applications/science/logic/iprover {
-    inherit (ocaml-ng.ocamlPackages_4_02) ocaml;
-  };
+  iprover = callPackage ../applications/science/logic/iprover { };
 
   jonprl = callPackage ../applications/science/logic/jonprl {
     smlnj = if stdenv.isDarwin
@@ -21663,7 +21721,6 @@ with pkgs;
   };
 
   caffe2 = callPackage ../development/libraries/science/math/caffe2 (rec {
-    eigen3 = eigen3_3;
     inherit (python3Packages) python future six numpy pydot;
     protobuf = protobuf3_1;
     python-protobuf = python3Packages.protobuf.override { inherit protobuf; };
@@ -21746,6 +21803,8 @@ with pkgs;
 
   scotch = callPackage ../applications/science/math/scotch { };
 
+  mininet = callPackage ../tools/virtualization/mininet { };
+
   msieve = callPackage ../applications/science/math/msieve { };
 
   weka = callPackage ../applications/science/math/weka { };
@@ -21783,6 +21842,8 @@ with pkgs;
 
   megam = callPackage ../applications/science/misc/megam { };
 
+  netlogo = callPackage ../applications/science/misc/netlogo { };
+
   ns-3 = callPackage ../development/libraries/science/networking/ns3 { };
 
   root = callPackage ../applications/science/misc/root {
@@ -21881,6 +21942,8 @@ with pkgs;
 
   beep = callPackage ../misc/beep { };
 
+  bees = callPackage ../tools/filesystems/bees { };
+
   blackbird = callPackage ../misc/themes/blackbird { };
 
   bootil = callPackage ../development/libraries/bootil { };
@@ -21972,7 +22035,6 @@ with pkgs;
   dell-530cdn = callPackage ../misc/drivers/dell-530cdn {};
 
   dosbox = callPackage ../misc/emulators/dosbox { };
-  dosbox-unstable = callPackage ../misc/emulators/dosbox/unstable.nix { };
 
   dpkg = callPackage ../tools/package-management/dpkg { };
 
@@ -22139,6 +22201,8 @@ with pkgs;
 
   mongoc = callPackage ../development/libraries/mongoc { };
 
+  morph = callPackage ../tools/package-management/morph { };
+
   mupen64plus = callPackage ../misc/emulators/mupen64plus { };
 
   muse = callPackage ../applications/audio/muse { };
@@ -22563,18 +22627,15 @@ with pkgs;
   sqsh = callPackage ../development/tools/sqsh { };
 
   inherit (callPackage ../applications/networking/cluster/terraform {})
-    terraform_0_8_5
-    terraform_0_8
-    terraform_0_9
-    terraform_0_10
-    terraform_0_10-full
     terraform_0_11
     terraform_0_11-full
+    terraform_0_12
     terraform_plugins_test
     ;
 
   terraform = terraform_0_11;
-  terraform-full = terraform_0_11-full;
+  # deprecated
+  terraform-full = terraform.full;
 
   terraform-providers = recurseIntoAttrs (
     callPackage ../applications/networking/cluster/terraform-providers {}
@@ -22586,14 +22647,6 @@ with pkgs;
 
   terragrunt = callPackage ../applications/networking/cluster/terragrunt {};
 
-  terragrunt_0_11_1 = callPackage ../applications/networking/cluster/terragrunt/0.11.1.nix {
-    terraform = terraform_0_8;
-  };
-
-  terragrunt_0_9_8 = callPackage ../applications/networking/cluster/terragrunt/0.9.8.nix {
-    terraform = terraform_0_8_5;
-  };
-
   tetex = callPackage ../tools/typesetting/tex/tetex { libpng = libpng12; };
 
   tetra-gtk-theme = callPackage ../misc/themes/tetra { };
@@ -22655,7 +22708,7 @@ with pkgs;
   vimUtils = callPackage ../misc/vim-plugins/vim-utils.nix { };
 
   vimPlugins = recurseIntoAttrs (callPackage ../misc/vim-plugins {
-    llvmPackages = llvmPackages_39;
+    llvmPackages = llvmPackages_6;
   });
 
   vimprobable2-unwrapped = callPackage ../applications/networking/browsers/vimprobable2 {
@@ -22876,6 +22929,8 @@ with pkgs;
 
   zimg = callPackage ../development/libraries/zimg { };
 
+  wtf = callPackage ../applications/misc/wtf { };
+
   zk-shell = callPackage ../applications/misc/zk-shell { };
 
   zuki-themes = callPackage ../misc/themes/zuki { };
@@ -22978,7 +23033,7 @@ with pkgs;
     avrgcc = pkgsCross.avr.buildPackages.gcc;
     avrbinutils = pkgsCross.avr.buildPackages.binutils;
     gcc-arm-embedded = pkgsCross.arm-embedded.buildPackages.gcc;
-    binutils-arm-embedded = pkgsCross.arm-embedded.buildPackages.binutils;
+    gcc-armhf-embedded = pkgsCross.armhf-embedded.buildPackages.gcc;
   };
 
   newlib = callPackage ../development/misc/newlib { };
diff --git a/pkgs/top-level/coq-packages.nix b/pkgs/top-level/coq-packages.nix
index 2084140c3fd8..188ab06b9698 100644
--- a/pkgs/top-level/coq-packages.nix
+++ b/pkgs/top-level/coq-packages.nix
@@ -14,6 +14,7 @@ let
         then callPackage ../development/coq-modules/bignums {}
         else null;
       category-theory = callPackage ../development/coq-modules/category-theory { };
+      Cheerios = callPackage ../development/coq-modules/Cheerios {};
       CoLoR = callPackage ../development/coq-modules/CoLoR {};
       coq-ext-lib = callPackage ../development/coq-modules/coq-ext-lib {};
       coq-haskell = callPackage ../development/coq-modules/coq-haskell { };
@@ -26,6 +27,7 @@ let
       heq = callPackage ../development/coq-modules/heq {};
       HoTT = callPackage ../development/coq-modules/HoTT {};
       interval = callPackage ../development/coq-modules/interval {};
+      InfSeqExt = callPackage ../development/coq-modules/InfSeqExt {};
       iris = callPackage ../development/coq-modules/iris {};
       math-classes = callPackage ../development/coq-modules/math-classes { };
       mathcomp = callPackage ../development/coq-modules/mathcomp { };
@@ -35,8 +37,10 @@ let
       QuickChick = callPackage ../development/coq-modules/QuickChick {};
       ssreflect = callPackage ../development/coq-modules/ssreflect { };
       stdpp = callPackage ../development/coq-modules/stdpp { };
+      StructTact = callPackage ../development/coq-modules/StructTact {};
       tlc = callPackage ../development/coq-modules/tlc {};
       Velisarios = callPackage ../development/coq-modules/Velisarios {};
+      Verdi = callPackage ../development/coq-modules/Verdi {};
     };
 
   filterCoqPackages = coq:
@@ -84,7 +88,9 @@ in rec {
   coqPackages_8_7 = mkCoqPackages coq_8_7;
   coqPackages_8_8 = mkCoqPackages coq_8_8;
   coqPackages_8_9 = mkCoqPackages coq_8_9;
-  coqPackages = coqPackages_8_8;
+  coqPackages = recurseIntoAttrs (lib.mapDerivationAttrset lib.dontDistribute
+    coqPackages_8_8
+  );
   coq = coqPackages.coq;
 
 }
diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix
index 80dd1a04e73d..357ab21fba1f 100644
--- a/pkgs/top-level/haskell-packages.nix
+++ b/pkgs/top-level/haskell-packages.nix
@@ -5,7 +5,7 @@
 let
   # These are attributes in compiler and packages that don't support integer-simple.
   integerSimpleExcludes = [
-    "ghc821Binary"
+    "ghc822Binary"
     "ghc844"
     "ghcjs"
     "ghcjs82"
@@ -42,31 +42,35 @@ in {
 
   compiler = {
 
-    ghc821Binary = callPackage ../development/compilers/ghc/8.2.1-binary.nix { };
+    ghc822Binary = callPackage ../development/compilers/ghc/8.2.2-binary.nix { };
 
     ghc822 = callPackage ../development/compilers/ghc/8.2.2.nix {
-      bootPkgs = packages.ghc821Binary;
+      bootPkgs = packages.ghc822Binary;
       inherit (buildPackages.python3Packages) sphinx;
       buildLlvmPackages = buildPackages.llvmPackages_39;
       llvmPackages = pkgs.llvmPackages_39;
     };
     ghc844 = callPackage ../development/compilers/ghc/8.4.4.nix {
-      bootPkgs = packages.ghc821Binary;
+      bootPkgs = packages.ghc822Binary;
+      inherit (buildPackages.python3Packages) sphinx;
       buildLlvmPackages = buildPackages.llvmPackages_5;
       llvmPackages = pkgs.llvmPackages_5;
     };
     ghc861 = callPackage ../development/compilers/ghc/8.6.1.nix {
       bootPkgs = packages.ghc822;
+      inherit (buildPackages.python3Packages) sphinx;
       buildLlvmPackages = buildPackages.llvmPackages_6;
       llvmPackages = pkgs.llvmPackages_6;
     };
     ghc862 = callPackage ../development/compilers/ghc/8.6.2.nix {
       bootPkgs = packages.ghc822;
+      inherit (buildPackages.python3Packages) sphinx;
       buildLlvmPackages = buildPackages.llvmPackages_6;
       llvmPackages = pkgs.llvmPackages_6;
     };
     ghcHEAD = callPackage ../development/compilers/ghc/head.nix {
-      bootPkgs = packages.ghc821Binary;
+      bootPkgs = packages.ghc822Binary;
+      inherit (buildPackages.python3Packages) sphinx;
       buildLlvmPackages = buildPackages.llvmPackages_5;
       llvmPackages = pkgs.llvmPackages_5;
     };
@@ -100,9 +104,9 @@ in {
   # Always get compilers from `buildPackages`
   packages = let bh = buildPackages.haskell; in {
 
-    ghc821Binary = callPackage ../development/haskell-modules {
-      buildHaskellPackages = bh.packages.ghc821Binary;
-      ghc = bh.compiler.ghc821Binary;
+    ghc822Binary = callPackage ../development/haskell-modules {
+      buildHaskellPackages = bh.packages.ghc822Binary;
+      ghc = bh.compiler.ghc822Binary;
       compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.2.x.nix { };
       packageSetConfig = bootstrapPackageSet;
     };
diff --git a/pkgs/top-level/metrics.nix b/pkgs/top-level/metrics.nix
index 77f620da7249..a199f61020c6 100644
--- a/pkgs/top-level/metrics.nix
+++ b/pkgs/top-level/metrics.nix
@@ -49,6 +49,9 @@ runCommand "nixpkgs-metrics"
     run nix-env.qa nix-env -f ${nixpkgs} -qa
     run nix-env.qaDrv nix-env -f ${nixpkgs} -qa --drv-path --meta --xml
 
+    num=$(nix-env -f ${nixpkgs} -qa | wc -l)
+    echo "nix-env.qaCount $num" >> $out/nix-support/hydra-metrics
+
     export GC_INITIAL_HEAP_SIZE=128k
     run nix-env.qaAggressive nix-env -f ${nixpkgs} -qa
     run nix-env.qaDrvAggressive nix-env -f ${nixpkgs} -qa --drv-path --meta --xml
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 1d0c14914362..197051f3c2ec 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -131,6 +131,9 @@ let
 
     bin_prot_p4 = callPackage ../development/ocaml-modules/bin_prot { };
 
+    bisect_ppx = callPackage ../development/ocaml-modules/bisect_ppx { };
+    bisect_ppx-ocamlbuild = callPackage ../development/ocaml-modules/bisect_ppx-ocamlbuild { };
+
     ocaml_cairo = callPackage ../development/ocaml-modules/ocaml-cairo { };
 
     cairo2 = callPackage ../development/ocaml-modules/cairo2 { };
@@ -552,6 +555,8 @@ let
 
     opam-file-format = callPackage ../development/ocaml-modules/opam-file-format { };
 
+    opti = callPackage ../development/ocaml-modules/opti { };
+
     otfm = callPackage ../development/ocaml-modules/otfm { };
 
     otr = callPackage ../development/ocaml-modules/otr { };
@@ -1039,7 +1044,9 @@ let
       enableX11 = config.unison.enableX11 or true;
     };
 
-    hol_light = callPackage ../applications/science/logic/hol_light { };
+    hol_light = callPackage ../applications/science/logic/hol_light {
+      camlp5 = callPackage ../development/tools/ocaml/camlp5 { legacy = true; };
+    };
 
   };
     in (ocamlPackages.janeStreet // ocamlPackages);
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index b440ce8b75d6..4bcc7f4d32c7 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -403,11 +403,11 @@ let
   };
 
   AppSqitch = buildPerlModule rec {
-    version = "0.9997";
+    version = "0.9998";
     name = "App-Sqitch-${version}";
     src = fetchurl {
       url = "mirror://cpan/authors/id/D/DW/DWHEELER/${name}.tar.gz";
-      sha256 = "985ade1a4181bef776016a287194711051e79c7a3c18f1ee1ec47e22ccf319d2";
+      sha256 = "5539f15c0e26ad3595e658e2c21481b0748cc89f6dca0a6ded1fdc62f88c8a5a";
     };
     buildInputs = [ CaptureTiny TestDeep TestDir TestException TestFile TestFileContents TestMockModule TestNoWarnings ];
     propagatedBuildInputs = [ Clone ConfigGitLike DBI DateTime EncodeLocale FileHomeDir HashMerge IOPager IPCRun3 IPCSystemSimple ListMoreUtils PathClass PerlIOutf8_strict StringFormatter StringShellQuote TemplateTiny Throwable TypeTiny URIdb libintl_perl ];
@@ -792,10 +792,10 @@ let
   };
 
   bignum = buildPerlPackage rec {
-    name = "bignum-0.50";
+    name = "bignum-0.51";
     src = fetchurl {
       url = "mirror://cpan/authors/id/P/PJ/PJACKLAM/${name}.tar.gz";
-      sha256 = "82f88a0acbbfa9c4c69f620316b37da8f4b3d2895208e6aad6121a8f0203a94f";
+      sha256 = "8ac0f6efe0b6f24804690e53908bdc5346613667f1c0590d8cf808ec090e9c47";
     };
     meta = {
       description = "Transparent BigNumber support for Perl";
@@ -921,10 +921,10 @@ let
   };
 
   BusinessISMN = buildPerlPackage rec {
-    name = "Business-ISMN-1.132";
+    name = "Business-ISMN-1.201";
     src = fetchurl {
       url = "mirror://cpan/authors/id/B/BD/BDFOY/${name}.tar.gz";
-      sha256 = "009dbkjx1s918qn6hm5qmc0rlqagiazhwg3m7rrfci7mw80hyb6g";
+      sha256 = "1cpcfyaz1fl6fnm076jx2jsphw147wj6aszj2yzqrgsncjhk2cja";
     };
     propagatedBuildInputs = [ TieCycle ];
     meta = {
@@ -1289,30 +1289,6 @@ let
     };
   };
 
-  CatalystEngineHTTPPrefork = buildPerlPackage rec {
-    name = "Catalyst-Engine-HTTP-Prefork-0.51";
-    src = fetchurl {
-      url = "mirror://cpan/authors/id/A/AG/AGRUNDMA/${name}.tar.gz";
-      sha256 = "1ygmrzc9akjaqfxid8br11ajj9qgfvhkimakcv4ffk4s5v7q2sii";
-    };
-    propagatedBuildInputs = [
-      CatalystRuntime HTTPBody NetServer
-      CookieXS HTTPHeaderParserXS
-    ];
-    buildInputs = [TestPod TestPodCoverage];
-    patches = [
-      # Fix chunked transfers (they were missing the final CR/LF at
-      # the end, which makes curl barf).
-      ../development/perl-modules/catalyst-fix-chunked-encoding.patch
-    ];
-
-    meta = {
-      # Depends on some old version of Catalyst-Runtime that contains
-      # Catalyst::Engine::CGI. But those version do not compile.
-      broken = true;
-    };
-  };
-
   CatalystManual = buildPerlPackage rec {
     name = "Catalyst-Manual-5.9009";
     src = fetchurl {
@@ -1341,10 +1317,10 @@ let
   };
 
   CatalystRuntime = buildPerlPackage rec {
-    name = "Catalyst-Runtime-5.90119";
+    name = "Catalyst-Runtime-5.90120";
     src = fetchurl {
-      url = mirror://cpan/authors/id/E/ET/ETHER/Catalyst-Runtime-5.90119.tar.gz;
-      sha256 = "19fff77c70a4fc8df2909db82629fda7f25d3e5d01f0152a145f8f8973ea87c7";
+      url = mirror://cpan/authors/id/E/ET/ETHER/Catalyst-Runtime-5.90120.tar.gz;
+      sha256 = "e3f791b75dfec668cb52fbe1c1596c051cc44de6c16eb333c79982d5e4822584";
     };
     buildInputs = [ TestFatal TypeTiny ];
     propagatedBuildInputs = [ CGISimple CGIStruct ClassC3AdoptNEXT DataDump HTTPBody ModulePluggable MooseXEmulateClassAccessorFast MooseXGetopt MooseXMethodAttributes MooseXRoleWithOverloading PathClass PlackMiddlewareFixMissingBodyInRedirect PlackMiddlewareMethodOverride PlackMiddlewareRemoveRedundantBody PlackMiddlewareReverseProxy PlackTestExternalServer SafeIsa StringRewritePrefix TaskWeaken TextSimpleTable TreeSimpleVisitorFactory URIws ];
@@ -1487,20 +1463,6 @@ let
     };
   };
 
-  CatalystPluginHTMLWidget = buildPerlPackage rec {
-    name = "Catalyst-Plugin-HTML-Widget-1.1";
-    src = fetchurl {
-      url = "mirror://cpan/authors/id/B/BO/BOBTFISH/${name}.tar.gz";
-      sha256 = "b4a4873162f515ec7cead6272533fc347c34711d138cc4c5e46b63fa2b74feff";
-    };
-    propagatedBuildInputs = [ CatalystRuntime HTMLWidget ];
-    meta = {
-      description = "HTML Widget Catalyst Plugin";
-      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
-      broken = true;
-    };
-  };
-
   CatalystPluginLogHandler = buildPerlModule rec {
     name = "Catalyst-Plugin-Log-Handler-0.08";
     src = fetchurl {
@@ -1853,10 +1815,10 @@ let
   };
 
   CGISimple = buildPerlModule rec {
-    name = "CGI-Simple-1.16";
+    name = "CGI-Simple-1.21";
     src = fetchurl {
-      url = mirror://cpan/authors/id/M/MA/MANWAR/CGI-Simple-1.16.tar.gz;
-      sha256 = "1j07qy22a9k4g1xasxma7yzfmwwn3iy50rkxdhz8hz9f09hiym0f";
+      url = mirror://cpan/authors/id/M/MA/MANWAR/CGI-Simple-1.21.tar.gz;
+      sha256 = "1wzc2igs4khmj7zfahvs87c24p9ks8hnqhhsyviyiix53xx2y6sg";
     };
     propagatedBuildInputs = [ IOStringy ];
     meta = {
@@ -3114,6 +3076,7 @@ let
       license = stdenv.lib.licenses.artistic2;
       maintainers = [ maintainers.thoughtpolice ];
     };
+    buildInputs = [ CanaryStability ];
   };
 
   CryptSSLeay = buildPerlPackage rec {
@@ -3871,10 +3834,10 @@ let
   };
 
   DateTimeLocale = buildPerlPackage rec {
-    name = "DateTime-Locale-1.22";
+    name = "DateTime-Locale-1.23";
     src = fetchurl {
       url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz";
-      sha256 = "757b3915c6b2aac89462c52fed36543f27dfb66abc98c895523d2ab95da65f94";
+      sha256 = "3a5a81e742da96d89b408e40f8bf4b21150663d8a5eb9dad7865db582193c015";
     };
     buildInputs = [ CPANMetaCheck FileShareDirInstall IPCSystemSimple TestFatal TestFileShareDir TestRequires TestWarnings ];
     propagatedBuildInputs = [ FileShareDir ParamsValidationCompiler Specio namespaceautoclean ];
@@ -3898,10 +3861,10 @@ let
   };
 
   DateTimeTimeZone = buildPerlPackage rec {
-    name = "DateTime-TimeZone-2.19";
+    name = "DateTime-TimeZone-2.20";
     src = fetchurl {
       url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz";
-      sha256 = "b9192efe202d71b4ff7840718807a244bfca3992afd7e7ca78da20849f5ea4f8";
+      sha256 = "6b69cb9406f7fd2f9ef452996de62686f0b8563469a7e7438fd2bf37735a2829";
     };
     buildInputs = [ TestFatal TestRequires ];
     propagatedBuildInputs = [ ClassSingleton ParamsValidationCompiler Specio namespaceautoclean ];
@@ -4023,22 +3986,6 @@ let
     };
   };
 
-  DevelSizeMe = buildPerlPackage {
-    name = "Devel-SizeMe-0.19";
-    src = fetchurl {
-      url = mirror://cpan/authors/id/T/TI/TIMB/Devel-SizeMe-0.19.tar.gz;
-      sha256 = "546e31ba83c0bf7cef37b38a462860461850473479d7d4ac6c0dadfb78d54717";
-    };
-    propagatedBuildInputs = [ DBDSQLite DBI DataDumperConcise HTMLParser JSONXS Moo ];
-    meta = {
-      homepage = https://github.com/timbunce/devel-sizeme;
-      description = "Unknown";
-      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
-      # See https://rt.cpan.org/Public/Bug/Display.html?id=92348
-      broken = true;
-    };
-  };
-
   DevelTrace = buildPerlPackage {
     name = "Devel-Trace-0.12";
     src = fetchurl {
@@ -4324,10 +4271,10 @@ let
   };
 
   DevelFindPerl = buildPerlPackage rec {
-    name = "Devel-FindPerl-0.014";
+    name = "Devel-FindPerl-0.015";
     src = fetchurl {
       url = "mirror://cpan/authors/id/L/LE/LEONT/${name}.tar.gz";
-      sha256 = "0ns95dsgmr8s0f1dfwd1cyv32vmd22w0vs51ppnnzp5zyi499581";
+      sha256 = "1z1xfj3178w632mqddyklk355a19bsgzkilznrng3rvg4bfbfxaj";
     };
     meta = {
       description = "Find the path to your perl";
@@ -5663,13 +5610,13 @@ let
   };
 
   FileChangeNotify = buildPerlPackage {
-    name = "File-ChangeNotify-0.28";
+    name = "File-ChangeNotify-0.29";
     src = fetchurl {
-      url = mirror://cpan/authors/id/D/DR/DROLSKY/File-ChangeNotify-0.28.tar.gz;
-      sha256 = "e00fe809d481131a08dca26e851cf0ffce8d9e9d03d58c58f15aa62e28aa2f05";
+      url = mirror://cpan/authors/id/D/DR/DROLSKY/File-ChangeNotify-0.29.tar.gz;
+      sha256 = "438d4295ef5f854ace61037a11726ef65dc0bf73e296bd12fc7e2108602a444b";
     };
     buildInputs = [ TestException TestRequires TestWithoutModule ];
-    propagatedBuildInputs = [ ClassLoad ModulePluggable Moo TypeTiny namespaceautoclean ];
+    propagatedBuildInputs = [ ModulePluggable Moo TypeTiny namespaceautoclean ];
     meta = with stdenv.lib; {
       description = "Watch for changes to files, cross-platform style";
       license = licenses.artistic2;
@@ -6029,11 +5976,11 @@ let
     };
   };
 
-  FileRemove = buildPerlPackage rec {
-    name = "File-Remove-1.57";
+  FileRemove = buildPerlModule rec {
+    name = "File-Remove-1.58";
     src = fetchurl {
-      url = mirror://cpan/authors/id/S/SH/SHLOMIF/File-Remove-1.57.tar.gz;
-      sha256 = "1b814lw181kkqh6c1n4p2zlzzsq6ic5pfpr831nphf2w2rhcvgmk";
+      url = mirror://cpan/authors/id/S/SH/SHLOMIF/File-Remove-1.58.tar.gz;
+      sha256 = "1n6h5w3sp2bs4cfrifdx2z15cfpb4r536179mx1a12xbmj1yrxl1";
     };
   };
 
@@ -6108,12 +6055,12 @@ let
   };
 
   FileSlurp = buildPerlPackage {
-    name = "File-Slurp-9999.19";
+    name = "File-Slurp-9999.22";
     # WARNING: check on next update if deprecation warning is gone
     patches = [ ../development/perl-modules/File-Slurp/silence-deprecation.patch ];
     src = fetchurl {
-      url = mirror://cpan/authors/id/U/UR/URI/File-Slurp-9999.19.tar.gz;
-      sha256 = "0hrn4nipwx40d6ji8ssgr5nw986z9iqq8cn0kdpbszh9jplynaff";
+      url = mirror://cpan/authors/id/C/CA/CAPOEIRAB/File-Slurp-9999.22.tar.gz;
+      sha256 = "0sgi53jin36sqvvj8fsqxddb8vprrv99inbs2bmgjdpqhs0a0vmf";
     };
     meta = {
       description = "Simple and Efficient Reading/Writing/Modifying of Complete Files";
@@ -6299,10 +6246,10 @@ let
   };
 
   ForksSuper = buildPerlPackage {
-    name = "Forks-Super-0.96";
+    name = "Forks-Super-0.97";
     src = fetchurl {
-      url = mirror://cpan/authors/id/M/MO/MOB/Forks-Super-0.96.tar.gz;
-      sha256 = "0vzxfxdgxjk83cwg9p5dzvfydrah53xcxkickznrrd5rhp1rasqx";
+      url = mirror://cpan/authors/id/M/MO/MOB/Forks-Super-0.97.tar.gz;
+      sha256 = "0kias11b4zchxy5x9ns2wwjzvzxlzsbap8sq587z9micw5bl7nrk";
     };
     doCheck = false;
     meta = {
@@ -6487,10 +6434,10 @@ let
   };
 
   Glib = buildPerlPackage rec {
-    name = "Glib-1.327";
+    name = "Glib-1.328";
     src = fetchurl {
       url = "mirror://cpan/authors/id/X/XA/XAOC/${name}.tar.gz";
-      sha256 = "0n7hjhbh5xhagvb0qjwzg21j22ks0csah0chgk98g4wnfllxjl0k";
+      sha256 = "1mb40h76kk1wfcl0dqd1r8wfsn4ik29jln3mcsjhmadasynw5725";
     };
     buildInputs = [ pkgs.glib ];
     meta = {
@@ -7515,6 +7462,21 @@ let
     };
   };
 
+  Imager = buildPerlPackage rec {
+    name = "Imager-1.006";
+    src = fetchurl {
+      url = "mirror://cpan/authors/id/T/TO/TONYC/${name}.tar.gz";
+      sha256 = "c1e434a4de6250e3b229aa74aa653e56c38f981864f71a975366c50559c9d52b";
+    };
+    buildInputs = [ ExtUtilsPkgConfig pkgs.freetype pkgs.fontconfig pkgs.libjpeg pkgs.libpng ];
+    makeMakerFlags = "--incpath ${pkgs.libjpeg.dev}/include --libpath ${pkgs.libjpeg.out}/lib --incpath ${pkgs.libpng.dev}/include --libpath ${pkgs.libpng.out}/lib";
+    meta = {
+      homepage = http://imager.perl.org/;
+      description = "Perl extension for Generating 24 bit Images";
+      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
+    };
+  };
+
   ImageInfo = buildPerlPackage rec {
     name = "Image-Info-1.41";
     src = fetchurl {
@@ -7679,15 +7641,16 @@ let
     };
   };
 
-  IOHandleUtil = buildPerlPackage rec {
-     name = "IO-Handle-Util-0.01";
+  IOHandleUtil = buildPerlModule rec {
+     name = "IO-Handle-Util-0.02";
      src = fetchurl {
-       url = mirror://cpan/authors/id/N/NU/NUFFIN/IO-Handle-Util-0.01.tar.gz;
-       sha256 = "1g7746gh3y9a9df3xb3l504czgwrrzr7lp87j7jwm2mklarrig6k";
+       url = mirror://cpan/authors/id/E/ET/ETHER/IO-Handle-Util-0.02.tar.gz;
+       sha256 = "1vncvsx53iiw1yy3drlk44hzx2pk5cial0h74djf9i6s2flndfcd";
      };
      propagatedBuildInputs = [ IOString SubExporter asa ];
      meta = {
      };
+    buildInputs = [ ModuleBuildTiny TestSimple13 ];
   };
 
   IOInteractive = buildPerlPackage {
@@ -7719,11 +7682,11 @@ let
   };
 
   IOPager = buildPerlPackage rec {
-    version = "0.39";
+    version = "0.40";
     name = "IO-Pager-${version}";
     src = fetchurl {
       url = "mirror://cpan/authors/id/J/JP/JPIERCE/IO-Pager-${version}.tgz";
-      sha256 = "0ksldcw0hydfy9k70i6q6fm1wgbc54kx0lbwlkrszsbd7q72dlfg";
+      sha256 = "1vzdypsr7vkj8nnda9ccrksci6pqj5awwmi89l7x3mbpq36gad87";
     };
     propagatedBuildInputs = [ pkgs.more FileWhich ]; # `more` used in tests
   };
@@ -8450,13 +8413,12 @@ let
     };
   };
 
-  LinuxDesktopFiles = buildPerlPackage rec {
+  LinuxDesktopFiles = buildPerlModule rec {
     name = "Linux-DesktopFiles-0.25";
     src = fetchurl {
       url = "mirror://cpan/authors/id/T/TR/TRIZEN/${name}.tar.gz";
       sha256 = "60377a74fba90fa465200ee1c7430dbdde69d454d85f9ee101c039803a07e5f5";
     };
-    buildInputs = [ ModuleBuild ];
     meta = {
       homepage = https://github.com/trizen/Linux-DesktopFiles;
       description = "Fast parsing of the Linux desktop files";
@@ -8920,10 +8882,10 @@ let
   };
 
   LWP = buildPerlPackage rec {
-    name = "libwww-perl-6.35";
+    name = "libwww-perl-6.36";
     src = fetchurl {
-      url = mirror://cpan/authors/id/E/ET/ETHER/libwww-perl-6.35.tar.gz;
-      sha256 = "dda2578d7b32152c4afce834761a61d117de286c705a9f7972c7ac6032ca5953";
+      url = mirror://cpan/authors/id/E/ET/ETHER/libwww-perl-6.36.tar.gz;
+      sha256 = "75c034ab4b37f4b9506dc644300697505582cf9545bcf2e2079e7263f675290a";
     };
     propagatedBuildInputs = [ FileListing HTMLParser HTTPCookies HTTPDaemon HTTPNegotiate NetHTTP TryTiny WWWRobotRules ];
     # support cross-compilation by avoiding using `has_module` which does not work in miniperl (it requires B native module)
@@ -9116,10 +9078,10 @@ let
   };
 
   MailDKIM = buildPerlPackage rec {
-    name = "Mail-DKIM-0.53";
+    name = "Mail-DKIM-0.54";
     src = fetchurl {
-      url = mirror://cpan/authors/id/M/MB/MBRADSHAW/Mail-DKIM-0.53.tar.gz;
-      sha256 = "1aqmffkbsqcckllf6hxbdm1xcybw6674h18np2aaas8z42g0ji3w";
+      url = mirror://cpan/authors/id/M/MB/MBRADSHAW/Mail-DKIM-0.54.tar.gz;
+      sha256 = "1jix3jrqx9q2n684ar4igh5zma15j9gv91h9m2rbv8bs1z47hbxp";
     };
     propagatedBuildInputs = [ CryptOpenSSLRSA MailTools NetDNSResolverMock YAMLLibYAML ];
     doCheck = false; # tries to access the domain name system
@@ -9244,10 +9206,10 @@ let
   };
 
   MathBigInt = buildPerlPackage rec {
-    name = "Math-BigInt-1.999813";
+    name = "Math-BigInt-1.999814";
     src = fetchurl {
       url = "mirror://cpan/authors/id/P/PJ/PJACKLAM/${name}.tar.gz";
-      sha256 = "67a10a10a806bd7add463acc1557554381052426cbcb04b1ffbeccfb6775be3d";
+      sha256 = "19fbabee89e4d3a5c4775cc07006b7488ebb4f70ea79d915f1a5f0130e0d3e22";
     };
     meta = {
       description = "Arbitrary size integer/float math package";
@@ -9256,10 +9218,10 @@ let
   };
 
   MathBigIntGMP = buildPerlPackage rec {
-    name = "Math-BigInt-GMP-1.6005";
+    name = "Math-BigInt-GMP-1.6006";
     src = fetchurl {
       url    = "mirror://cpan/authors/id/P/PJ/PJACKLAM/${name}.tar.gz";
-      sha256 = "0a5qwsjrp46lkmaxpw408lv14ygivk9i3cbbcrjim1qwsk1jlmjc";
+      sha256 = "10dg3h5jgc30pb2800x8brz2ijicrpash0rwjahp82xnvysi1hhf";
     };
     buildInputs = [ pkgs.gmp ];
     doCheck = false;
@@ -9592,11 +9554,11 @@ let
   };
 
   ModernPerl = buildPerlModule {
-    name = "Modern-Perl-1.20180901";
+    name = "Modern-Perl-1.20180928";
 
     src = fetchurl {
-      url = mirror://cpan/authors/id/C/CH/CHROMATIC/Modern-Perl-1.20180901.tar.gz;
-      sha256 = "5c289bbe59cfc90abb9b8c6b9903b7625ca9ea26239d397d87f7b57517cd61a1";
+      url = mirror://cpan/authors/id/C/CH/CHROMATIC/Modern-Perl-1.20180928.tar.gz;
+      sha256 = "377b4f16b27ca3b38fdb148468111e3463eff148beb7a00826353268f240f577";
     };
     meta = {
       homepage = https://github.com/chromatic/Modern-Perl;
@@ -9740,10 +9702,10 @@ let
   };
 
   ModuleExtractUse = buildPerlModule rec {
-     name = "Module-ExtractUse-0.342";
+     name = "Module-ExtractUse-0.343";
      src = fetchurl {
-       url = mirror://cpan/authors/id/D/DO/DOMM/Module-ExtractUse-0.342.tar.gz;
-       sha256 = "06z6iz4zc1rdm3w3zkddgv832rghlpvb4r494vdz65pphr65saax";
+       url = mirror://cpan/authors/id/D/DO/DOMM/Module-ExtractUse-0.343.tar.gz;
+       sha256 = "00hcggwnqk953s4zbvkcabd5mfidg60hawlqsw6146in91dlclj8";
      };
      propagatedBuildInputs = [ ParseRecDescent PodStrip ];
      buildInputs = [ TestDeep TestNoWarnings ];
@@ -10010,10 +9972,10 @@ let
   };
 
   Mojolicious = buildPerlPackage rec {
-    name = "Mojolicious-8.02";
+    name = "Mojolicious-8.03";
     src = fetchurl {
       url = "mirror://cpan/authors/id/S/SR/SRI/${name}.tar.gz";
-      sha256 = "0m36zlh58bvww15k9ybi6khrrr6ga308y38p49hfq204k7cy02zp";
+      sha256 = "0jx1zra1c8qlljbihqv9snlr0jz77w7my1hg9qk13kns8by21cpy";
     };
     meta = {
       homepage = https://mojolicious.org;
@@ -10029,7 +9991,7 @@ let
       url = "mirror://cpan/authors/id/S/SR/SRI/${name}.tar.gz";
       sha256 = "14ypg679dk9yvgq67mp7lzs131cxhbgcmrpx5f4ddqcrs1bzq5rb";
     };
-    propagatedBuildInputs = [ Mojolicious IPCShareLite BSDResource Sereal ];
+    propagatedBuildInputs = [ BSDResource IPCShareLite Mojolicious Sereal ];
     meta = {
       homepage = https://github.com/mojolicious/mojo-status;
       description = "Mojolicious server status plugin";
@@ -11277,10 +11239,10 @@ let
   };
 
   NetIDNEncode = buildPerlModule {
-    name = "Net-IDN-Encode-2.401";
+    name = "Net-IDN-Encode-2.500";
     src = fetchurl {
-      url = mirror://cpan/authors/id/C/CF/CFAERBER/Net-IDN-Encode-2.401.tar.gz;
-      sha256 = "1b5hnlnaxnp9jzdk55dcfh4jviv9mv83y4plsr3hi7lkh06hwdyd";
+      url = mirror://cpan/authors/id/C/CF/CFAERBER/Net-IDN-Encode-2.500.tar.gz;
+      sha256 = "1aiy7adirk3wpwlczd8sldi9k1dray0jrg1lbcrcw97zwcrkciam";
     };
     buildInputs = [ TestNoWarnings ];
     meta = {
@@ -11338,10 +11300,10 @@ let
   };
 
   NetPing = buildPerlPackage {
-    name = "Net-Ping-2.70";
+    name = "Net-Ping-2.71";
     src = fetchurl {
-      url = mirror://cpan/authors/id/R/RU/RURBAN/Net-Ping-2.70.tar.gz;
-      sha256 = "41400089736f528cfa1196083905d4bbd313c4653a03fab8578cebd5b5b6aa5a";
+      url = mirror://cpan/authors/id/R/RU/RURBAN/Net-Ping-2.71.tar.gz;
+      sha256 = "0819d0aa87b173e98ecb3ccfd92272ce53c7fc9e86f962f64602a6fa477f7d4f";
     };
     meta = {
       description = "Check a remote host for reachability";
@@ -11367,7 +11329,7 @@ let
       url = "mirror://cpan/authors/id/I/IV/IVAN/${name}.tar.gz";
       sha256 = "88a9b2df69e769e5855a408b19f61915b82e8fe070ab5cf4d525dd3b8bbe31c1";
     };
-    propagatedBuildInputs = [ pkgs.openssl Carp IO NetSSH StringShellQuote ];
+    propagatedBuildInputs = [ pkgs.openssl ];
     patchPhase = ''
       sed -i 's|$scp = "scp";|$scp = "${pkgs.openssh}/bin/scp";|' SCP.pm
     '';
@@ -11460,7 +11422,7 @@ let
       url = "mirror://cpan/authors/id/I/IV/IVAN/${name}.tar.gz";
       sha256 = "7c71c7c3cbe953234dfe25bcc1ad7edb0e1f5a0578601f5523bc6070262a3817";
     };
-    propagatedBuildInputs = [ pkgs.openssl IO ];
+    propagatedBuildInputs = [ pkgs.openssl ];
     patchPhase = ''
       sed -i 's|$ssh = "ssh";|$ssh = "${pkgs.openssh}/bin/ssh";|' SSH.pm
     '';
@@ -11632,10 +11594,10 @@ let
   };
 
   ObjectSignature = buildPerlPackage {
-    name = "Object-Signature-1.07";
+    name = "Object-Signature-1.08";
     src = fetchurl {
-      url = mirror://cpan/authors/id/A/AD/ADAMK/Object-Signature-1.07.tar.gz;
-      sha256 = "0c8l7195bjvx0v6zmkgdnxvwg7yj2zq8hi7xd25a3iikd12dc4f6";
+      url = mirror://cpan/authors/id/E/ET/ETHER/Object-Signature-1.08.tar.gz;
+      sha256 = "12k90c19ly93ib1p6sm3k7sbnr2h5dbywkdmnff2ngm99p4m68c4";
     };
     meta = {
       description = "Generate cryptographic signatures for objects";
@@ -11821,10 +11783,10 @@ let
   };
 
   ParallelForkManager = buildPerlPackage rec {
-    name = "Parallel-ForkManager-1.20";
+    name = "Parallel-ForkManager-2.02";
     src = fetchurl {
       url = "mirror://cpan/authors/id/Y/YA/YANICK/${name}.tar.gz";
-      sha256 = "7cc4c1c3b0e676b61ffa90f82f4128e8057327449ca86a9beb2f39217023f289";
+      sha256 = "c1b2970a8bb666c3de7caac4a8f4dbcc043ab819bbc337692ec7bf27adae4404";
     };
     buildInputs = [ TestWarn ];
     meta = {
@@ -11832,6 +11794,7 @@ let
       description = "A simple parallel processing fork manager";
       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
     };
+    propagatedBuildInputs = [ Moo ];
   };
 
   ParallelPrefork = buildPerlPackage {
@@ -12283,10 +12246,10 @@ let
   };
 
   PkgConfig = buildPerlPackage rec {
-    name = "PkgConfig-0.22026";
+    name = "PkgConfig-0.23026";
     src = fetchurl {
       url = "mirror://cpan/authors/id/P/PL/PLICEASE/${name}.tar.gz";
-      sha256 = "d01849bf88f3d56f4efe304cfe56f806867a45b716e3963dcacce17b829433ce";
+      sha256 = "56c8ad9015af3799b99a21b8790997723406acf479f35d13fe9bf632db2d5c26";
     };
     meta = {
       description = "Pure-Perl Core-Only replacement for pkg-config";
@@ -13189,20 +13152,11 @@ let
     };
   };
 
-  RegexpCopy = buildPerlPackage rec {
-    name = "Regexp-Copy-0.06";
-    src = fetchurl {
-      url = "mirror://cpan/authors/id/J/JD/JDUNCAN/${name}.tar.gz";
-      sha256 = "09c8xb43p1s6ala6g4274az51mf33phyjkp66dpvgkgbi1xfnawp";
-    };
-    meta.broken = true;
-  };
-
   RegexpGrammars = buildPerlModule rec {
-    name = "Regexp-Grammars-1.048";
+    name = "Regexp-Grammars-1.049";
     src = fetchurl {
       url = "mirror://cpan/authors/id/D/DC/DCONWAY/${name}.tar.gz";
-      sha256 = "d7718d9bb0d4259eabf326838e3f841b440c4e959faf9615d9ad9c345f4a3d6f";
+      sha256 = "2e642a7051b9ea5dccd05d53e49684ca28e99c43b811bbec37d160d3f81edf68";
     };
     meta = {
       description = "Add grammatical parsing features to Perl 5.10 regexes";
@@ -13442,7 +13396,7 @@ let
       url = "mirror://cpan/authors/id/Y/YV/YVES/${name}.tar.gz";
       sha256 = "17syqbq17qw6ajg3w88q9ljdm4c2b7zadq9pwshxxgyijg8dlfh4";
     };
-    buildInputs = [ TestDeep TestDifferences TestWarn TestLongString ];
+    buildInputs = [ TestDeep TestDifferences TestLongString TestWarn ];
     preBuild = ''ls'';
     meta = {
       homepage = https://github.com/Sereal/Sereal;
@@ -13458,8 +13412,7 @@ let
       url = "mirror://cpan/authors/id/Y/YV/YVES/${name}.tar.gz";
       sha256 = "02hbk5dwq7fpnyb3vp7xxhb41ra48xhghl13p9pjq9lzsqlb6l19";
     };
-    buildInputs = [ TestDeep TestDifferences TestWarn TestLongString ];
-    propagatedBuildInputs = [ SerealDecoder ];
+    buildInputs = [ SerealDecoder TestDeep TestDifferences TestLongString TestWarn ];
     meta = {
       homepage = https://github.com/Sereal/Sereal;
       description = "Fast, compact, powerful binary deserialization";
@@ -13474,8 +13427,8 @@ let
       url = "mirror://cpan/authors/id/Y/YV/YVES/${name}.tar.gz";
       sha256 = "0lnczrf311pl9b2x75r0ffsszv5aspfb8x6jdvgr3rgqp7nbm1wr";
     };
-    buildInputs = [ TestDeep TestDifferences TestWarn TestLongString ];
-    propagatedBuildInputs = [ SerealEncoder SerealDecoder ];
+    buildInputs = [ TestLongString TestWarn ];
+    propagatedBuildInputs = [ SerealDecoder SerealEncoder ];
     meta = {
       homepage = https://github.com/Sereal/Sereal;
       description = "Fast, compact, powerful binary deserialization";
@@ -13624,10 +13577,10 @@ let
   };
 
   Socket6 = buildPerlPackage rec {
-    name = "Socket6-0.28";
+    name = "Socket6-0.29";
     src = fetchurl {
       url = "mirror://cpan/authors/id/U/UM/UMEMOTO/${name}.tar.gz";
-      sha256 = "bfd49ab99f3197c99285fed4683c4edc06277c1e4453f593e694d7bff0974586";
+      sha256 = "468915fa3a04dcf6574fc957eff495915e24569434970c91ee8e4e1459fc9114";
     };
     setOutputFlags = false;
     buildInputs = [ pkgs.which ];
@@ -14143,40 +14096,6 @@ let
     buildInputs = [ TestToolbox ];
   };
 
-  libfile-stripnondeterminism = buildPerlPackage rec {
-    name = "libstrip-nondeterminism-${version}";
-    version = "0.016";
-
-    src = fetchurl {
-      url = "http://http.debian.net/debian/pool/main/s/strip-nondeterminism/strip-nondeterminism_${version}.orig.tar.gz";
-      sha256 = "1y9lfhxgwyysybing72n3hng2db5njpk2dbb80vskdz75r7ffqjp";
-    };
-
-    buildInputs = [ ArchiveZip pkgs.file ];
-    meta.broken = true;
-  };
-
-
-  strip-nondeterminism = buildPerlPackage rec {
-    name = "strip-nondeterminism-${version}";
-    version = "0.016";
-
-    src = fetchurl {
-      url = "http://http.debian.net/debian/pool/main/s/strip-nondeterminism/strip-nondeterminism_${version}.orig.tar.gz";
-      sha256 = "1y9lfhxgwyysybing72n3hng2db5njpk2dbb80vskdz75r7ffqjp";
-    };
-
-    buildInputs = [ ArchiveZip libfile-stripnondeterminism pkgs.file ];
-
-    meta = with stdenv.lib; {
-      description = "A Perl module for stripping bits of non-deterministic information";
-      license = licenses.gpl3;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ pSub ];
-      broken = true;
-    };
-  };
-
   SubExporter = buildPerlPackage {
     name = "Sub-Exporter-0.987";
     src = fetchurl {
@@ -14648,10 +14567,10 @@ let
   };
 
   TemplateToolkit = buildPerlPackage rec {
-    name = "Template-Toolkit-2.27";
+    name = "Template-Toolkit-2.28";
     src = fetchurl {
-      url = mirror://cpan/authors/id/A/AB/ABW/Template-Toolkit-2.27.tar.gz;
-      sha256 = "1p66y9mwj7nkc1bcwgp2xjw78l4x5bzhj0xghp2k80ad4q1s848k";
+      url = mirror://cpan/authors/id/A/AT/ATOOMIC/Template-Toolkit-2.28.tar.gz;
+      sha256 = "1msxg3j1hx5wsc7vr81x5gs9gdbn4y0x6cvyj3pq4dgi1603dbvi";
     };
     propagatedBuildInputs = [ AppConfig ];
     meta = {
@@ -14849,10 +14768,10 @@ let
   };
 
   TermVT102Boundless = buildPerlPackage {
-    name = "Term-VT102-Boundless-0.04";
+    name = "Term-VT102-Boundless-0.05";
     src = fetchurl {
-      url = mirror://cpan/authors/id/N/NU/NUFFIN/Term-VT102-Boundless-0.04.tar.gz;
-      sha256 = "5bb88b5aecb44ebf56d3ac7240be80cd26def9dcf1ebeb4e77d9983dfc7a8f19";
+      url = mirror://cpan/authors/id/F/FB/FBARRIOS/Term-VT102-Boundless-0.05.tar.gz;
+      sha256 = "e1ded85ae3d76b59c03b8697f4a6cb01ae31bd62a9354f5bb7d18f9e927b485f";
     };
     propagatedBuildInputs = [ TermVT102 ];
     meta = {
@@ -15860,10 +15779,10 @@ let
   };
 
   TestScript = buildPerlPackage rec {
-    name = "Test-Script-1.23";
+    name = "Test-Script-1.25";
     src = fetchurl {
       url = "mirror://cpan/authors/id/P/PL/PLICEASE/${name}.tar.gz";
-      sha256 = "1ca4mwcghgpdrpcg6xc0iwp3ga9c94qni9zf4hhqq8lpjwdyg89k";
+      sha256 = "199s78hh77zwwqba6pa1ngzjnzrdj2ka6qv5w0i286aafh93705n";
     };
 
     buildInputs = [ Test2Suite ];
@@ -16260,10 +16179,10 @@ let
   };
 
   TextCSV_XS = buildPerlPackage rec {
-    name = "Text-CSV_XS-1.36";
+    name = "Text-CSV_XS-1.37";
     src = fetchurl {
       url = "mirror://cpan/authors/id/H/HM/HMBRAND/${name}.tgz";
-      sha256 = "c321b09ad98a332138f25f55afb83befd7c045134085c7cb280fc325e688942c";
+      sha256 = "20e16da9c38b0938f308c01d954f49d2c6922bac0d2d979bf2ad483fe7476ba2";
     };
     meta = {
       description = "Comma-Separated Values manipulation routines";
@@ -16357,22 +16276,6 @@ let
     buildInputs = [ ListMoreUtils TestDifferences TestException ];
   };
 
-  TestMagpie = buildPerlPackage {
-    name = "Test-Magpie-0.11";
-    src = fetchurl {
-      url = mirror://cpan/authors/id/S/ST/STEVENL/Test-Magpie-0.11.tar.gz;
-      sha256 = "1c4iy35yg3fa9mrc4phmpz46fkihl6yic6a13fpcxyd3xafd5zhm";
-    };
-    propagatedBuildInputs = [ MooseXTypesStructured SetObject UNIVERSALref aliased ];
-    meta = {
-      description = "Spy on objects to achieve test doubles (mock testing)";
-      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
-      maintainers = with maintainers; [ ];
-      platforms   = stdenv.lib.platforms.unix;
-    };
-    buildInputs = [ TestFatal Throwable ];
-  };
-
   TestMinimumVersion = buildPerlPackage rec {
     name = "Test-MinimumVersion-0.101082";
     src = fetchurl {
@@ -16556,10 +16459,10 @@ let
   };
 
   TestTrap = buildPerlModule rec {
-    name = "Test-Trap-0.3.3";
+    name = "Test-Trap-0.3.4";
     src = fetchurl {
-      url = mirror://cpan/authors/id/E/EB/EBHANSSEN/Test-Trap-v0.3.3.tar.gz;
-      sha256 = "1676gqjyk0zig3yyqv053y5j1pajp2af08ffmgx94n414whbhm5c";
+      url = mirror://cpan/authors/id/E/EB/EBHANSSEN/Test-Trap-v0.3.4.tar.gz;
+      sha256 = "1qjs2080kcc66s4d7499br5lw2qmhr9gxky4xsl6vjdn6dpna10b";
     };
     propagatedBuildInputs = [ DataDump ];
     meta = {
@@ -17063,20 +16966,6 @@ let
     };
   };
 
-  UNIVERSALref = buildPerlPackage rec {
-     name = "UNIVERSAL-ref-0.14";
-     src = fetchurl {
-       url = mirror://cpan/authors/id/J/JJ/JJORE/UNIVERSAL-ref-0.14.tar.gz;
-       sha256 = "1ar8dfj90nn52cb8c6yyj4bi6ya8hk2f2sl0a5q7pmchj321bn1m";
-     };
-     propagatedBuildInputs = [ BUtils ];
-     meta = {
-       description = "Turns ref() into a multimethod";
-       license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
-       broken = true; # 'OP {aka struct op}' has no member named 'op_sibling'
-     };
-  };
-
   UNIVERSALrequire = buildPerlPackage rec {
     name = "UNIVERSAL-require-0.18";
     src = fetchurl {
@@ -17124,22 +17013,6 @@ let
     };
   };
 
-  UnicodeICUCollator = buildPerlPackage {
-    name = "Unicode-ICU-Collator-0.002";
-    src = fetchurl {
-      url = mirror://cpan/authors/id/T/TO/TONYC/Unicode-ICU-Collator-0.002.tar.gz;
-      sha256 = "0gimwydam0mdgm6qjzzxny4gw8zda9kc2843kcl2xrpq7z7ww3f9";
-    };
-    meta = {
-      description = "Wrapper around ICU collation services";
-      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
-      maintainers = with maintainers; [ ];
-      platforms   = stdenv.lib.platforms.unix;
-      broken = true; # tests fail http://hydra.nixos.org/build/25141764/nixlog/1/raw
-    };
-    buildInputs = [ pkgs.icu ];
-  };
-
   UnicodeLineBreak = buildPerlPackage rec {
     name = "Unicode-LineBreak-2018.003";
     src = fetchurl {
@@ -17408,10 +17281,10 @@ let
   };
 
   WWWMechanize = buildPerlPackage {
-    name = "WWW-Mechanize-1.88";
+    name = "WWW-Mechanize-1.89";
     src = fetchurl {
-      url = mirror://cpan/authors/id/O/OA/OALDERS/WWW-Mechanize-1.88.tar.gz;
-      sha256 = "0yd8a1zsfpbv5wr79x3iqmik9gvcd10iam9dfrdan4dri9vpxn9n";
+      url = mirror://cpan/authors/id/O/OA/OALDERS/WWW-Mechanize-1.89.tar.gz;
+      sha256 = "1mxx362vqiniw8vi6k3j7v9b1s7012irhfcblcz1p6jz9cjqi7mh";
     };
     propagatedBuildInputs = [ HTMLForm HTMLTree LWP ];
     doCheck = false;
@@ -17562,10 +17435,10 @@ let
   };
 
   X11XCB = buildPerlPackage rec {
-    name = "X11-XCB-0.17";
+    name = "X11-XCB-0.18";
     src = fetchurl {
       url = "mirror://cpan/authors/id/M/MS/MSTPLBG/${name}.tar.gz";
-      sha256 = "12qyf98s5hbybmh0mblpz50c00i68srq73w5rw31m2dhclj8n96q";
+      sha256 = "1cjpghw7cnackw20lbd7yzm222kz5bnrwz52f8ay24d1f4pwrnxf";
     };
     AUTOMATED_TESTING = false;
     buildInputs = [ pkgs.xorg.libxcb pkgs.xorg.xcbproto pkgs.xorg.xcbutil pkgs.xorg.xcbutilwm ExtUtilsDepends ExtUtilsPkgConfig TestDeep TestException XSObjectMagic ];
@@ -17736,10 +17609,10 @@ let
   };
 
   XMLXPath = buildPerlPackage rec {
-    name = "XML-XPath-1.42";
+    name = "XML-XPath-1.44";
     src = fetchurl {
       url = "mirror://cpan/authors/id/M/MA/MANWAR/${name}.tar.gz";
-      sha256 = "9e6ac67c2cead5f918a060b8b9ccdbdcaa6d610be8517bba42a96cd56748b512";
+      sha256 = "1cc9110705165dc09dd09974dd7c0b6709c9351d6b6b1cef5a711055f891dd0f";
     };
     buildInputs = [ PathTiny ];
     propagatedBuildInputs = [ XMLParser ];
diff --git a/pkgs/top-level/php-packages.nix b/pkgs/top-level/php-packages.nix
index 63c0e36eb370..273592428e03 100644
--- a/pkgs/top-level/php-packages.nix
+++ b/pkgs/top-level/php-packages.nix
@@ -6,27 +6,25 @@ let
       inherit php;
       inherit (pkgs) stdenv autoreconfHook fetchurl;
     };
-  isPhpOlder55 = pkgs.lib.versionOlder php.version "5.5";
-  isPhp7 = pkgs.lib.versionAtLeast php.version "7.0";
 
-  apcu = if isPhp7 then apcu51 else apcu40;
-
-  apcu40 = assert !isPhp7; buildPecl {
-    name = "apcu-4.0.11";
-    sha256 = "002d1gklkf0z170wkbhmm2z1p9p5ghhq3q1r9k54fq1sq4p30ks5";
-    buildInputs = [ pkgs.pcre ];
-  };
-
-  apcu51 = assert isPhp7; buildPecl {
+  apcu = buildPecl {
     name = "apcu-5.1.11";
     sha256 = "0nz9m3fbxgyc2ij63yqmxm06a1f51g8rkxk85f85ziqdin66q2f1";
     buildInputs = [ pkgs.pcre ];
     doCheck = true;
     checkTarget = "test";
     checkFlagsArray = ["REPORT_EXIT_STATUS=1" "NO_INTERACTION=1"];
+    makeFlags = [ "phpincludedir=$(dev)/include" ];
+    outputs = [ "out" "dev" ];
+  };
+
+  apcu_bc = buildPecl {
+    name = "apcu_bc-1.0.4";
+    sha256 = "1raww7alwayg9nk0akly1mdrjypxlwg8safnmaczl773cwpw5cbw";
+    buildInputs = [ apcu pkgs.pcre ];
   };
 
-  ast = assert isPhp7; buildPecl {
+  ast = buildPecl {
     name = "ast-0.1.5";
 
     sha256 = "0vv2w5fkkw9n7qdmi5aq50416zxmvyzjym8kb6j1v8kd4xcsjjgw";
@@ -73,7 +71,7 @@ let
     ];
   };
 
-  php_excel = assert isPhp7; buildPecl rec {
+  php_excel = buildPecl rec {
     name = "php_excel-${version}";
     version = "1.0.2";
     phpVersion = "php7";
@@ -100,7 +98,7 @@ let
     sha256 = "0a55l4f0bgbf3f6sh34njd14niwagg829gfkvb8n5fs69xqab67d";
   };
 
-  mailparse = assert isPhp7; buildPecl {
+  mailparse = buildPecl {
     name = "mailparse-3.0.2";
 
     sha256 = "0fw447ralqihsjnn0fm2hkaj8343cvb90v0d1wfclgz49256y6nq";
@@ -114,35 +112,7 @@ let
     buildInputs = [ pkgs.pcre ];
   };
 
-  # No support for PHP 7 yet
-  memcache = assert !isPhp7; buildPecl {
-    name = "memcache-3.0.8";
-
-    sha256 = "04c35rj0cvq5ygn2jgmyvqcb0k8d03v4k642b6i37zgv7x15pbic";
-
-    configureFlags = [ "--with-zlib-dir=${pkgs.zlib.dev}" ];
-
-    makeFlags = [ "CFLAGS=-fgnu89-inline" ];
-  };
-
-  memcached = if isPhp7 then memcachedPhp7 else memcached22;
-
-  memcached22 = assert !isPhp7; buildPecl {
-    name = "memcached-2.2.0";
-
-    sha256 = "0n4z2mp4rvrbmxq079zdsrhjxjkmhz6mzi7mlcipz02cdl7n1f8p";
-
-    configureFlags = [
-      "--with-zlib-dir=${pkgs.zlib.dev}"
-      "--with-libmemcached-dir=${pkgs.libmemcached}"
-    ];
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = with pkgs; [ cyrus_sasl zlib ];
-  };
-
-  # Not released yet
-  memcachedPhp7 = assert isPhp7; buildPecl rec {
+  memcached = buildPecl rec {
     name = "memcached-php7";
 
     src = fetchgit {
@@ -173,31 +143,7 @@ let
     sha256 = "0d4p1gpl8gkzdiv860qzxfz250ryf0wmjgyc8qcaaqgkdyh5jy5p";
   };
 
-  # No support for PHP 7 yet (and probably never will be)
-  spidermonkey = assert !isPhp7; buildPecl rec {
-    name = "spidermonkey-1.0.0";
-
-    sha256 = "1ywrsp90w6rlgq3v2vmvp2zvvykkgqqasab7h9bf3vgvgv3qasbg";
-
-    configureFlags = [
-      "--with-spidermonkey=${pkgs.spidermonkey_1_8_5}"
-    ];
-
-    buildInputs = [ pkgs.spidermonkey_1_8_5 ];
-  };
-
-  xdebug = if isPhp7 then xdebug26 else xdebug23;
-
-  xdebug23 = assert !isPhp7; buildPecl {
-    name = "xdebug-2.3.1";
-
-    sha256 = "0k567i6w7cw14m13s7ip0946pvy5ii16cjwjcinnviw9c24na0xm";
-
-    doCheck = true;
-    checkTarget = "test";
-  };
-
-  xdebug26 = assert isPhp7; buildPecl {
+  xdebug = buildPecl {
     name = "xdebug-2.6.1";
 
     sha256 = "0xxxy6n4lv7ghi9liqx133yskg07lw316vhcds43n1sjq3b93rns";
@@ -206,21 +152,7 @@ let
     checkTarget = "test";
   };
 
-  yaml = if isPhp7 then yaml20 else yaml13;
-
-  yaml13 = assert !isPhp7; buildPecl {
-    name = "yaml-1.3.1";
-
-    sha256 = "1fbmgsgnd6l0d4vbjaca0x9mrfgl99yix5yf0q0pfcqzfdg4bj8q";
-
-    configureFlags = [
-      "--with-yaml=${pkgs.libyaml}"
-    ];
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-  };
-
-  yaml20 = assert isPhp7; buildPecl {
+  yaml = buildPecl {
     name = "yaml-2.0.2";
 
     sha256 = "0f80zy79kyy4hn6iigpgfkwppwldjfj5g7s4gddklv3vskdb1by3";
@@ -232,13 +164,6 @@ let
     nativeBuildInputs = [ pkgs.pkgconfig ];
   };
 
-  # Since PHP 5.5 OPcache is integrated in the core and has to be enabled via --enable-opcache during compilation.
-  zendopcache = assert isPhpOlder55; buildPecl {
-    name = "zendopcache-7.0.3";
-
-    sha256 = "0qpfbkfy4wlnsfq4vc4q5wvaia83l89ky33s08gqrcfp3p1adn88";
-  };
-
   zmq = buildPecl {
     name = "zmq-1.1.3";
 
@@ -251,69 +176,18 @@ let
     nativeBuildInputs = [ pkgs.pkgconfig ];
   };
 
-  # No support for PHP 7 and probably never will be
-  xcache = assert !isPhp7; buildPecl rec {
-    name = "xcache-${version}";
-
-    version = "3.2.0";
-
-    src = pkgs.fetchurl {
-      url = "http://xcache.lighttpd.net/pub/Releases/${version}/${name}.tar.bz2";
-      sha256 = "1gbcpw64da9ynjxv70jybwf9y88idm01kb16j87vfagpsp5s64kx";
-    };
-
-    doCheck = true;
-    checkTarget = "test";
-
-    configureFlags = [
-      "--enable-xcache"
-      "--enable-xcache-coverager"
-      "--enable-xcache-optimizer"
-      "--enable-xcache-assembler"
-      "--enable-xcache-encoder"
-      "--enable-xcache-decoder"
-    ];
-
-    buildInputs = [ pkgs.m4 ];
-  };
-
-  #pthreads requires a build of PHP with ZTS (Zend Thread Safety) enabled
-  #--enable-maintainer-zts or --enable-zts on Windows
-  pthreads = if isPhp7 then pthreads31 else pthreads20;
-
-  pthreads20 = assert (pkgs.config.php.zts or false) && (!isPhp7); buildPecl {
-    name = "pthreads-2.0.10";
-    sha256 = "1xlcb1b1g10jd0xhm3c01a06yqpb5qln47pd1k522138324qvpwb";
-  };
-
-  pthreads31 = assert (pkgs.config.php.zts or false) && isPhp7; buildPecl {
+  pthreads = assert (pkgs.config.php.zts or false); buildPecl {
     name = "pthreads-3.1.5";
     sha256 = "1ziap0py3zrc7qj9lw4nzq6wx1viyj8v9y1babchizzan014x6p5";
+    meta.broken = true;
   };
 
-  # No support for PHP 7 yet
-  geoip = assert !isPhp7; buildPecl {
-    name = "geoip-1.1.0";
-    sha256 = "1fcqpsvwba84gqqmwyb5x5xhkazprwkpsnn4sv2gfbsd4svxxil2";
-
-    configureFlags = [ "--with-geoip=${pkgs.geoip}" ];
-
-    buildInputs = [ pkgs.geoip ];
-  };
-
-  redis = if isPhp7 then redis31 else redis22;
-
-  redis22 = assert !isPhp7; buildPecl {
-    name = "redis-2.2.7";
-    sha256 = "00n9dpk9ak0bl35sbcd3msr78sijrxdlb727nhg7f2g7swf37rcm";
-  };
-
-  redis31 = assert isPhp7; buildPecl {
+  redis = buildPecl {
     name = "redis-3.1.4";
     sha256 = "0rgjdrqfif8pfn3ipk1v4gyjkkdcdrdk479qbpda89w25vaxzsxd";
   };
 
-  v8 = assert isPhp7; buildPecl rec {
+  v8 = buildPecl rec {
     version = "0.1.9";
     name = "v8-${version}";
 
@@ -323,7 +197,7 @@ let
     configureFlags = [ "--with-v8=${pkgs.v8_6_x}" ];
   };
 
-  v8js = assert isPhp7; buildPecl rec {
+  v8js = buildPecl rec {
     version = "1.4.1";
     name = "v8js-${version}";
 
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index c413ae1b47e5..be0cfdb6ce3c 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -196,7 +196,7 @@ in {
 
   astropy = callPackage ../development/python-modules/astropy { };
 
-  astroquery = callPackage ../development/python-modules/astroquery { }; 
+  astroquery = callPackage ../development/python-modules/astroquery { };
 
   atom = callPackage ../development/python-modules/atom { };
 
@@ -398,6 +398,8 @@ in {
     inherit python;
   });
 
+  hopcroftkarp = callPackage ../development/python-modules/hopcroftkarp { };
+
   httpsig = callPackage ../development/python-modules/httpsig { };
 
   i3ipc = callPackage ../development/python-modules/i3ipc { };
@@ -412,6 +414,8 @@ in {
     mpi = pkgs.openmpi;
   };
 
+  libmr = callPackage ../development/python-modules/libmr { };
+
   lmtpd = callPackage ../development/python-modules/lmtpd { };
 
   logster = callPackage ../development/python-modules/logster { };
@@ -420,16 +424,24 @@ in {
 
   markerlib = callPackage ../development/python-modules/markerlib { };
 
+  matchpy = callPackage ../development/python-modules/matchpy { };
+
   monty = callPackage ../development/python-modules/monty { };
 
+  mininet-python = (toPythonModule (pkgs.mininet.override{ inherit python; })).py;
+
   mpi4py = callPackage ../development/python-modules/mpi4py {
     mpi = pkgs.openmpi;
   };
 
+  multiset = callPackage ../development/python-modules/multiset { };
+
   mwclient = callPackage ../development/python-modules/mwclient { };
 
   mwoauth = callPackage ../development/python-modules/mwoauth { };
 
+  nbval = callPackage ../development/python-modules/nbval { };
+
   nest-asyncio = callPackage ../development/python-modules/nest-asyncio { };
 
   neuron = pkgs.neuron.override {
@@ -476,6 +488,8 @@ in {
 
   pdfx = callPackage ../development/python-modules/pdfx { };
 
+  perf = callPackage ../development/python-modules/perf { };
+
   phonopy = callPackage ../development/python-modules/phonopy { };
 
   pims = callPackage ../development/python-modules/pims { };
@@ -581,6 +595,8 @@ in {
 
   pyparser = callPackage ../development/python-modules/pyparser { };
 
+  pyres = callPackage ../development/python-modules/pyres { };
+
   pyqt4 = callPackage ../development/python-modules/pyqt/4.x.nix {
     pythonPackages = self;
   };
@@ -605,8 +621,14 @@ in {
     slurm = pkgs.slurm;
   };
 
+  pyssim = callPackage ../development/python-modules/pyssim { };
+
   pystache = callPackage ../development/python-modules/pystache { };
 
+  pytesseract = callPackage ../development/python-modules/pytesseract { };
+
+  pytest-mypy = callPackage ../development/python-modules/pytest-mypy { };
+
   pytest-tornado = callPackage ../development/python-modules/pytest-tornado { };
 
   python-binance = callPackage ../development/python-modules/python-binance { };
@@ -617,6 +639,8 @@ in {
 
   python-ldap-test = callPackage ../development/python-modules/python-ldap-test { };
 
+  python-mnist = callPackage ../development/python-modules/python-mnist { };
+
   python-igraph = callPackage ../development/python-modules/python-igraph {
     pkgconfig = pkgs.pkgconfig;
     igraph = pkgs.igraph;
@@ -648,6 +672,8 @@ in {
 
   relatorio = callPackage ../development/python-modules/relatorio { };
 
+  remotecv = callPackage ../development/python-modules/remotecv { };
+
   pyzufall = callPackage ../development/python-modules/pyzufall { };
 
   rhpl = disabledIf isPy3k (callPackage ../development/python-modules/rhpl {});
@@ -716,6 +742,8 @@ in {
 
   vidstab = callPackage ../development/python-modules/vidstab { };
 
+  webapp2 = callPackage ../development/python-modules/webapp2 { };
+
   pyunbound = callPackage ../tools/networking/unbound/python.nix { };
 
   WazeRouteCalculator = callPackage ../development/python-modules/WazeRouteCalculator { };
@@ -736,6 +764,8 @@ in {
 
   adal = callPackage ../development/python-modules/adal { };
 
+  affine = callPackage ../development/python-modules/affine { };
+
   aioconsole = callPackage ../development/python-modules/aioconsole { };
 
   aiodns = callPackage ../development/python-modules/aiodns { };
@@ -987,6 +1017,8 @@ in {
 
   colour = callPackage ../development/python-modules/colour {};
 
+  configshell = callPackage ../development/python-modules/configshell { };
+
   constantly = callPackage ../development/python-modules/constantly { };
 
   cornice = callPackage ../development/python-modules/cornice { };
@@ -1043,6 +1075,8 @@ in {
 
   pyechonest = callPackage ../development/python-modules/pyechonest { };
 
+  pyepsg = callPackage ../development/python-modules/pyepsg { };
+
   pyezminc = callPackage ../development/python-modules/pyezminc { };
 
   billiard = callPackage ../development/python-modules/billiard { };
@@ -1120,10 +1154,14 @@ in {
 
   cairocffi = callPackage ../development/python-modules/cairocffi {};
 
+  cairosvg1 = callPackage ../development/python-modules/cairosvg/1_x.nix {};
+
   cairosvg = callPackage ../development/python-modules/cairosvg {};
 
   carrot = callPackage ../development/python-modules/carrot {};
 
+  cartopy = callPackage ../development/python-modules/cartopy {};
+
   case = callPackage ../development/python-modules/case {};
 
   cassandra-driver = callPackage ../development/python-modules/cassandra-driver { };
@@ -1283,6 +1321,11 @@ in {
     pythonPackages = self;
   });
 
+  opencv4 = toPythonModule (pkgs.opencv4.override {
+    enablePython = true;
+    pythonPackages = self;
+  });
+
   openidc-client = callPackage ../development/python-modules/openidc-client {};
 
   idna = callPackage ../development/python-modules/idna { };
@@ -1339,12 +1382,12 @@ in {
 
   pyhepmc = callPackage ../development/python-modules/pyhepmc { };
 
-  pytest = self.pytest_37;
+  pytest = self.pytest_39;
 
-  pytest_37 = callPackage ../development/python-modules/pytest {
+  inherit (callPackage ../development/python-modules/pytest {
     # hypothesis tests require pytest that causes dependency cycle
     hypothesis = self.hypothesis.override { doCheck = false; };
-  };
+  }) pytest_39 pytest_37;
 
   pytest-httpbin = callPackage ../development/python-modules/pytest-httpbin { };
 
@@ -1796,10 +1839,15 @@ in {
 
   jupyter = callPackage ../development/python-modules/jupyter { };
 
-  jupyter_console = callPackage ../development/python-modules/jupyter_console { };
+  jupyter_console = if pythonOlder "3.5" then
+       callPackage ../development/python-modules/jupyter_console/5.nix { }
+     else
+       callPackage ../development/python-modules/jupyter_console { };
 
   jupyterlab_launcher = callPackage ../development/python-modules/jupyterlab_launcher { };
 
+  jupyterlab_server = callPackage ../development/python-modules/jupyterlab_server { };
+
   jupyterlab = callPackage ../development/python-modules/jupyterlab {};
 
   PyLTI = callPackage ../development/python-modules/pylti { };
@@ -2055,6 +2103,8 @@ in {
 
   setuptools-git = callPackage ../development/python-modules/setuptools-git { };
 
+  sievelib = callPackage ../development/python-modules/sievelib { };
+
   watchdog = callPackage ../development/python-modules/watchdog { };
 
   zope_deprecation = callPackage ../development/python-modules/zope_deprecation { };
@@ -2398,6 +2448,8 @@ in {
 
   genshi = callPackage ../development/python-modules/genshi { };
 
+  gentools = callPackage ../development/python-modules/gentools { };
+
   gevent = callPackage ../development/python-modules/gevent { };
 
   geventhttpclient = callPackage ../development/python-modules/geventhttpclient { };
@@ -2440,10 +2492,76 @@ in {
 
   google_auth = callPackage ../development/python-modules/google_auth { };
 
+  google_cloud_asset = callPackage ../development/python-modules/google_cloud_asset { };
+
+  google_cloud_automl = callPackage ../development/python-modules/google_cloud_automl { };
+
   google_cloud_core = callPackage ../development/python-modules/google_cloud_core { };
 
+  google_cloud_bigquery = callPackage ../development/python-modules/google_cloud_bigquery { };
+
+  google_cloud_bigquery_datatransfer = callPackage ../development/python-modules/google_cloud_bigquery_datatransfer { };
+
+  google_cloud_bigtable = callPackage ../development/python-modules/google_cloud_bigtable { };
+
+  google_cloud_container = callPackage ../development/python-modules/google_cloud_container { };
+
+  google_cloud_dataproc = callPackage ../development/python-modules/google_cloud_dataproc { };
+
+  google_cloud_datastore = callPackage ../development/python-modules/google_cloud_datastore { };
+
+  google_cloud_dlp = callPackage ../development/python-modules/google_cloud_dlp { };
+
+  google_cloud_dns = callPackage ../development/python-modules/google_cloud_dns { };
+
+  google_cloud_error_reporting = callPackage ../development/python-modules/google_cloud_error_reporting { };
+
+  google_cloud_firestore = callPackage ../development/python-modules/google_cloud_firestore { };
+
+  google_cloud_iot = callPackage ../development/python-modules/google_cloud_iot { };
+
+  google_cloud_kms = callPackage ../development/python-modules/google_cloud_kms { };
+
+  google_cloud_language = callPackage ../development/python-modules/google_cloud_language { };
+
+  google_cloud_logging = callPackage ../development/python-modules/google_cloud_logging { };
+
+  google_cloud_monitoring = callPackage ../development/python-modules/google_cloud_monitoring { };
+
+  google_cloud_pubsub = callPackage ../development/python-modules/google_cloud_pubsub { };
+
+  google_cloud_redis = callPackage ../development/python-modules/google_cloud_redis { };
+
+  google_cloud_resource_manager = callPackage ../development/python-modules/google_cloud_resource_manager { };
+
+  google_cloud_runtimeconfig = callPackage ../development/python-modules/google_cloud_runtimeconfig { };
+
+  google_cloud_securitycenter = callPackage ../development/python-modules/google_cloud_securitycenter { };
+
+  google_cloud_spanner = callPackage ../development/python-modules/google_cloud_spanner { };
+
+  google_cloud_storage = callPackage ../development/python-modules/google_cloud_storage { };
+
   google_cloud_speech = callPackage ../development/python-modules/google_cloud_speech { };
 
+  google_cloud_tasks = callPackage ../development/python-modules/google_cloud_tasks { };
+
+  google_cloud_testutils = callPackage ../development/python-modules/google_cloud_testutils { };
+
+  google_cloud_texttospeech = callPackage ../development/python-modules/google_cloud_texttospeech { };
+
+  google_cloud_trace = callPackage ../development/python-modules/google_cloud_trace { };
+
+  google_cloud_translate = callPackage ../development/python-modules/google_cloud_translate { };
+
+  google_cloud_videointelligence = callPackage ../development/python-modules/google_cloud_videointelligence { };
+
+  google_cloud_vision = callPackage ../development/python-modules/google_cloud_vision { };
+
+  google_cloud_websecurityscanner = callPackage ../development/python-modules/google_cloud_websecurityscanner { };
+
+  google_resumable_media = callPackage ../development/python-modules/google_resumable_media { };
+
   gpgme = toPythonModule (pkgs.gpgme.override { pythonSupport=true; });
 
   gphoto2 = callPackage ../development/python-modules/gphoto2 {
@@ -2464,6 +2582,10 @@ in {
 
   grpcio-tools = callPackage ../development/python-modules/grpcio-tools { };
 
+  grpcio-gcp = callPackage ../development/python-modules/grpcio-gcp { };
+
+  grpc_google_iam_v1 = callPackage ../development/python-modules/grpc_google_iam_v1 { };
+
   gspread = callPackage ../development/python-modules/gspread { };
 
   gyp = callPackage ../development/python-modules/gyp { };
@@ -2536,16 +2658,17 @@ in {
 
   ipy = callPackage ../development/python-modules/IPy { };
 
-  ipykernel = callPackage ../development/python-modules/ipykernel { };
+  ipykernel = if pythonOlder "3.4" then
+      callPackage ../development/python-modules/ipykernel/4.nix { }
+    else
+      callPackage ../development/python-modules/ipykernel { };
 
   ipyparallel = callPackage ../development/python-modules/ipyparallel { };
 
-  # Newer versions of IPython no longer support Python 2.7.
-  ipython = if isPy27 then self.ipython_5 else self.ipython_6;
-
-  ipython_5 = callPackage ../development/python-modules/ipython/5.nix { };
-
-  ipython_6 = callPackage ../development/python-modules/ipython { };
+  ipython = if pythonOlder "3.5" then
+      callPackage ../development/python-modules/ipython/5.nix { }
+    else
+      callPackage ../development/python-modules/ipython { };
 
   ipython_genutils = callPackage ../development/python-modules/ipython_genutils { };
 
@@ -2658,6 +2781,8 @@ in {
 
   fs = callPackage ../development/python-modules/fs { };
 
+  fs-s3fs = callPackage ../development/python-modules/fs-s3fs { };
+
   libcloud = callPackage ../development/python-modules/libcloud { };
 
   libgpuarray = callPackage ../development/python-modules/libgpuarray {
@@ -2966,8 +3091,12 @@ in {
 
   nose = callPackage ../development/python-modules/nose { };
 
+  nose-cov = callPackage ../development/python-modules/nose-cov { };
+
   nose-exclude = callPackage ../development/python-modules/nose-exclude { };
 
+  nose-focus = callPackage ../development/python-modules/nose-focus { };
+
   nose2 = callPackage ../development/python-modules/nose2 { };
 
   nose-cover3 = callPackage ../development/python-modules/nose-cover3 { };
@@ -2978,6 +3107,10 @@ in {
 
   nose-cprof = callPackage ../development/python-modules/nose-cprof { };
 
+  nose-of-yeti = callPackage ../development/python-modules/nose-of-yeti { };
+
+  nose-pattern-exclude = callPackage ../development/python-modules/nose-pattern-exclude { };
+
   nose_warnings_filters = callPackage ../development/python-modules/nose_warnings_filters { };
 
   notebook = callPackage ../development/python-modules/notebook { };
@@ -3089,89 +3222,13 @@ in {
 
   ldappool = callPackage ../development/python-modules/ldappool { };
 
-  lz4 = buildPythonPackage rec {
-    name = "lz4-0.8.2";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/b5/f0/e1de2bb7feb54011f3c4dcf35b7cca3536e19526764db051b50ea26b58e7/lz4-0.8.2.tar.gz";
-      sha256 = "1irad4sq4hdr30fr53smvv3zzk4rddcf9b4jx19w8s9xsxhr1x3b";
-    };
-
-    buildInputs= with self; [ nose ];
-
-    meta = with stdenv.lib; {
-      description = "Compression library";
-      homepage = https://github.com/python-lz4/python-lz4;
-      license = licenses.bsd3;
-    };
-  };
-
- retrying = buildPythonPackage rec {
-    name = "retrying-${version}";
-    version = "1.3.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/retrying/retrying-1.3.3.tar.gz";
-      sha256 = "0fwp86xv0rvkncjdvy2mwcvbglw4w9k0fva25i7zx8kd19b3kh08";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-
-    # doesn't ship tests in tarball
-    doCheck = false;
-
-    meta = with stdenv.lib; {
-      homepage = https://github.com/rholder/retrying;
-    };
-  };
-
-  fasteners = buildPythonPackage rec {
-    name = "fasteners-${version}";
-    version = "0.14.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/fasteners/${name}.tar.gz";
-      sha256 = "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22";
-    };
-
-    propagatedBuildInputs = with self; [ six monotonic testtools ];
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover
-    '';
-    # Tests are written for Python 3.x only (concurrent.futures)
-    doCheck = isPy3k;
-
-
-    meta = with stdenv.lib; {
-      description = "Fasteners";
-      homepage = https://github.com/harlowja/fasteners;
-    };
-  };
-
-  aioeventlet = buildPythonPackage rec {
-    name = "aioeventlet-${version}";
-    version = "0.4";
+  lz4 = callPackage ../development/python-modules/lz4 { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/a/aioeventlet/aioeventlet-0.4.tar.gz";
-      sha256 = "19krvycaiximchhv1hcfhz81249m3w3jrbp2h4apn1yf4yrc4y7y";
-    };
+  retrying = callPackage ../development/python-modules/retrying { };
 
-    propagatedBuildInputs = with self; [ eventlet trollius asyncio ];
-    buildInputs = with self; [ mock ];
+  fasteners = callPackage ../development/python-modules/fasteners { };
 
-    # 2 tests error out
-    doCheck = false;
-    checkPhase = ''
-      ${python.interpreter} runtests.py
-    '';
-
-    meta = with stdenv.lib; {
-      description = "aioeventlet implements the asyncio API (PEP 3156) on top of eventlet. It makes";
-      homepage = http://aioeventlet.readthedocs.org/;
-    };
-  };
+  aioeventlet = callPackage ../development/python-modules/aioeventlet { };
 
   olefile = callPackage ../development/python-modules/olefile { };
 
@@ -3179,102 +3236,27 @@ in {
 
   mecab-python3 = callPackage ../development/python-modules/mecab-python3 { };
 
-  mox3 = buildPythonPackage rec {
-    name = "mox3-${version}";
-    version = "0.23.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mox3/${name}.tar.gz";
-      sha256 = "0q26sg0jasday52a7y0cch13l0ssjvr4yqnvswqxsinj1lv5ld88";
-    };
-
-    patchPhase = ''
-      sed -i 's@python@${python.interpreter}@' .testr.conf
-    '';
-
-    #  FAIL: mox3.tests.test_mox.RegexTest.testReprWithFlags
-    #  ValueError: cannot use LOCALE flag with a str pattern
-    doCheck = !isPy36;
-
-    buildInputs = with self; [ subunit testrepository testtools six ];
-    propagatedBuildInputs = with self; [ pbr fixtures ];
-  };
+  mox3 = callPackage ../development/python-modules/mox3 { };
 
   doc8 = callPackage ../development/python-modules/doc8 { };
 
   wrapt = callPackage ../development/python-modules/wrapt { };
 
-  pagerduty = buildPythonPackage rec {
-    name = "pagerduty-${version}";
-    version = "0.2.1";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-        url = "mirror://pypi/p/pagerduty/pagerduty-${version}.tar.gz";
-        sha256 = "e8c237239d3ffb061069aa04fc5b3d8ae4fb0af16a9713fe0977f02261d323e9";
-    };
-  };
+  pagerduty = callPackage ../development/python-modules/pagerduty { };
 
   pandas = callPackage ../development/python-modules/pandas { };
 
   pandas_0_17_1 = callPackage ../development/python-modules/pandas/0.17.1.nix { };
 
-  xlrd = buildPythonPackage rec {
-    name = "xlrd-${version}";
-
-    version = "0.9.4";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xlrd/xlrd-${version}.tar.gz";
-      sha256 = "8e8d3359f39541a6ff937f4030db54864836a06e42988c452db5b6b86d29ea72";
-    };
-
-    buildInputs = with self; [ nose ];
-    checkPhase = ''
-      nosetests -v
-    '';
-
-  };
+  xlrd = callPackage ../development/python-modules/xlrd { };
 
   bottleneck = callPackage ../development/python-modules/bottleneck { };
 
   paho-mqtt = callPackage ../development/python-modules/paho-mqtt { };
 
-  pamqp = buildPythonPackage rec {
-    version = "1.6.1";
-    name = "pamqp-${version}";
+  pamqp = callPackage ../development/python-modules/pamqp { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pamqp/${name}.tar.gz";
-      sha256 = "1vmyvynqzx5zvbipaxff4fnzy3h3dvl3zicyr15yb816j93jl2ca";
-    };
-
-    buildInputs = with self; [ mock nose pep8 pylint mccabe ];
-
-    meta = {
-      description = "RabbitMQ Focused AMQP low-level library";
-      homepage = https://pypi.python.org/pypi/pamqp;
-      license = licenses.bsd3;
-    };
-  };
-
-  parsedatetime = buildPythonPackage rec {
-    name = "parsedatetime-${version}";
-    version = "2.3";
-
-    meta = {
-      description = "Parse human-readable date/time text";
-      homepage = "https://github.com/bear/parsedatetime";
-      license = licenses.asl20;
-    };
-
-    buildInputs = with self; [ pytest pytestrunner ];
-    propagatedBuildInputs = with self; [ future ];
-
-    src = pkgs.fetchurl {
-        url = "mirror://pypi/p/parsedatetime/${name}.tar.gz";
-        sha256 = "1vkrmd398s11h1zn3zaqqsiqhj9lwy1ikcg6irx2lrgjzjg3rjll";
-    };
-  };
+  parsedatetime = callPackage ../development/python-modules/parsedatetime { };
 
   paramiko = callPackage ../development/python-modules/paramiko { };
 
@@ -3282,140 +3264,23 @@ in {
 
   paramz = callPackage ../development/python-modules/paramz { };
 
-  parsel = buildPythonPackage rec {
-    name = "parsel-${version}";
-    version = "1.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/parsel/${name}.tar.gz";
-      sha256 = "0a34d1c0bj1fzb5dk5744m2ag6v3b8glk4xp0amqxdan9ldbcd97";
-    };
-
-    buildInputs = with self; [ pytest pytestrunner ];
-    propagatedBuildInputs = with self; [ six w3lib lxml cssselect ];
-
-    checkPhase = ''
-      py.test
-    '';
-
-    meta = {
-      homepage = "https://github.com/scrapy/parsel";
-      description = "Parsel is a library to extract data from HTML and XML using XPath and CSS selectors";
-      license = licenses.bsd3;
-    };
-  };
+  parsel = callPackage ../development/python-modules/parsel { };
 
   parso = callPackage ../development/python-modules/parso { };
 
   partd = callPackage ../development/python-modules/partd { };
 
-  patch = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    version = "1.16";
-    pname = "patch";
-
-    src = pkgs.fetchzip {
-      url = "mirror://pypi/p/${pname}/${name}.zip";
-      sha256 = "1nj55hvyvzax4lxq7vkyfbw91pianzr3hp7ka7j12pgjxccac50g";
-      stripRoot = false;
-    };
-
-    # No tests included in archive
-    doCheck = false;
-
-    meta = {
-      description = "A library to parse and apply unified diffs";
-      homepage = https://github.com/techtonik/python-patch/;
-      license = licenses.mit;
-      platforms = platforms.all;
-      maintainers = [ maintainers.igsha ];
-    };
-  };
-
-  pathos = buildPythonPackage rec {
-    name = "pathos-${version}";
-    version = "0.2.0";
+  patch = callPackage ../development/python-modules/patch { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pathos/${name}.tgz";
-      sha256 = "e35418af733bf434da83746d46acca94375d6e306b3df330b2a1808db026a188";
-    };
-
-    propagatedBuildInputs = with self; [ dill pox ppft multiprocess ];
-
-    # Require network
-    doCheck = false;
-
-    meta = {
-      description = "Parallel graph management and execution in heterogeneous computing";
-      homepage = http://www.cacr.caltech.edu/~mmckerns/pathos.htm;
-      license = licenses.bsd3;
-    };
-  };
+  pathos = callPackage ../development/python-modules/pathos { };
 
   patsy = callPackage ../development/python-modules/patsy { };
 
-  paste = buildPythonPackage rec {
-    name = "paste-${version}";
-    version = "2.0.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/Paste/Paste-${version}.tar.gz";
-      sha256 = "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3";
-    };
-
-    checkInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ six ];
-
-    # Certain tests require network
-    checkPhase = ''
-      NOSE_EXCLUDE=test_ok,test_form,test_error,test_stderr,test_paste_website nosetests
-    '';
-
-    meta = {
-      description = "Tools for using a Web Server Gateway Interface stack";
-      homepage = http://pythonpaste.org/;
-    };
-  };
-
-
-  PasteDeploy = buildPythonPackage rec {
-    version = "1.5.2";
-    name = "paste-deploy-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PasteDeploy/PasteDeploy-${version}.tar.gz";
-      sha256 = "d5858f89a255e6294e63ed46b73613c56e3b9a2d82a42f1df4d06c8421a9e3cb";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    meta = {
-      description = "Load, configure, and compose WSGI applications and servers";
-      homepage = http://pythonpaste.org/deploy/;
-      platforms = platforms.all;
-    };
-  };
+  paste = callPackage ../development/python-modules/paste { };
 
-   pasteScript = buildPythonPackage rec {
-    version = "1.7.5";
-    name = "PasteScript-${version}";
+  PasteDeploy = callPackage ../development/python-modules/pastedeploy { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PasteScript/${name}.tar.gz";
-      sha256 = "2b685be69d6ac8bc0fe6f558f119660259db26a15e16a4943c515fbee8093539";
-    };
-
-    doCheck = false;
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ six paste PasteDeploy cheetah argparse ];
-
-    meta = {
-      description = "A pluggable command-line frontend, including commands to setup package file layouts";
-      homepage = http://pythonpaste.org/script/;
-      platforms = platforms.all;
-    };
-  };
+  pasteScript = callPackage ../development/python-modules/pastescript { };
 
   patator = callPackage ../development/python-modules/patator { };
 
@@ -3433,143 +3298,27 @@ in {
     inherit (pkgs) glibcLocales git;
   };
 
-  pep8 = buildPythonPackage rec {
-    name = "pep8-${version}";
-    version = "1.7.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pep8/${name}.tar.gz";
-      sha256 = "a113d5f5ad7a7abacef9df5ec3f2af23a20a28005921577b15dd584d099d5900";
-    };
-
-    meta = {
-      homepage = "http://pep8.readthedocs.org/";
-      description = "Python style guide checker";
-      license = licenses.mit;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
+  pep8 = callPackage ../development/python-modules/pep8 { };
 
   pep257 = callPackage ../development/python-modules/pep257 { };
 
-  percol = buildPythonPackage rec {
-    name = "percol-${version}";
-    version = "0.0.8";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/percol/${name}.tar.gz";
-      sha256 = "169s5mhw1s60qbsd6pkf9bb2x6wfgx8hn8nw9d4qgc68qnnpp2cj";
-    };
+  percol = callPackage ../development/python-modules/percol { };
 
-    propagatedBuildInputs = with self; [ ];
-
-    meta = {
-      homepage = https://github.com/mooz/percol;
-      description = "Adds flavor of interactive filtering to the traditional pipe concept of shell";
-      license = licenses.mit;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
-
-  pexif = buildPythonPackage rec {
-    name = "pexif-${version}";
-    version = "0.15";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pexif/pexif-0.15.tar.gz";
-      sha256 = "45a3be037c7ba8b64bbfc48f3586402cc17de55bb9d7357ef2bc99954a18da3f";
-    };
-
-    meta = {
-      description = "A module for editing JPEG EXIF data";
-      homepage = http://www.benno.id.au/code/pexif/;
-      license = licenses.mit;
-    };
-  };
+  pexif = callPackage ../development/python-modules/pexif { };
 
   pexpect = callPackage ../development/python-modules/pexpect { };
 
-  pdfkit = buildPythonPackage rec {
-    name = "pdfkit-${version}";
-    version = "0.5.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pdfkit/${name}.zip";
-      sha256 = "1p1m6gp51ql3wzjs2iwds8sc3hg1i48yysii9inrky6qc3s6q5vf";
-    };
+  pdfkit = callPackage ../development/python-modules/pdfkit { };
 
-    buildInputs = with self; [ ];
-    # tests are not distributed
-    doCheck = false;
+  periodictable = callPackage ../development/python-modules/periodictable { };
 
-    meta = {
-      homepage = https://pypi.python.org/pypi/pdfkit;
-      description = "Wkhtmltopdf python wrapper to convert html to pdf using the webkit rendering engine and qt";
-      license = licenses.mit;
-    };
-  };
-
-    periodictable = callPackage ../development/python-modules/periodictable { };
-
-  pg8000 = buildPythonPackage rec {
-    name = "pg8000-1.10.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pg8000/${name}.tar.gz";
-      sha256 = "188658db63c2ca931ae1bf0167b34efaac0ecc743b707f0118cc4b87e90ce488";
-    };
-
-    propagatedBuildInputs = with self; [ pytz ];
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.linux;
-    };
-  };
+  pg8000 = callPackage ../development/python-modules/pg8000 { };
 
   pgspecial = callPackage ../development/python-modules/pgspecial { };
 
-  pickleshare = buildPythonPackage rec {
-    version = "0.7.4";
-    name = "pickleshare-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pickleshare/${name}.tar.gz";
-      sha256 = "84a9257227dfdd6fe1b4be1319096c20eb85ff1e82c7932f36efccfe1b09737b";
-    };
-
-    propagatedBuildInputs = with self; [pathpy] ++ optional (pythonOlder "3.4") pathlib2;
-
-    # No proper test suite
-    doCheck = false;
-
-    meta = {
-      description = "Tiny 'shelve'-like database with concurrency support";
-      homepage = https://github.com/vivainio/pickleshare;
-      license = licenses.mit;
-    };
-  };
-
-  piep = buildPythonPackage rec {
-    version = "0.8.0";
-    name = "piep-${version}";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/piep/piep-${version}.tar.gz";
-      sha256 = "1wgkg1kc28jpya5k4zvbc9jmpa60b3d5c3gwxfbp15hw6smyqirj";
-    };
-
-    propagatedBuildInputs = with self; [pygments];
+  pickleshare = callPackage ../development/python-modules/pickleshare { };
 
-    meta = {
-      description = "Bringing the power of python to stream editing";
-      homepage = https://github.com/timbertson/piep;
-      maintainers = with maintainers; [ timbertson ];
-      license = licenses.gpl3;
-    };
-  };
+  piep = callPackage ../development/python-modules/piep { };
 
   piexif = callPackage ../development/python-modules/piexif { };
 
@@ -3580,26 +3329,7 @@ in {
     glibcLocales = pkgs.glibcLocales;
   };
 
-  pika = buildPythonPackage rec {
-    name = "pika-${version}";
-    version = "0.10.0";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/source/p/pika/${name}.tar.gz";
-      sha256 = "0nb4h08di432lv7dy2v9kpwgk0w92f24sqc2hw2s9vwr5b8v8xvj";
-    };
-
-    # Tests require twisted which is only availalble for python-2.x
-    doCheck = !isPy3k;
-
-    buildInputs = with self; [ nose mock pyyaml unittest2 pyev ] ++ optionals (!isPy3k) [ twisted tornado ];
-
-    meta = {
-      description = "Pure-Python implementation of the AMQP 0-9-1 protocol";
-      homepage = https://pika.readthedocs.org;
-      license = licenses.bsd3;
-    };
-  };
+  pika = callPackage ../development/python-modules/pika { };
 
   pika-pool = callPackage ../development/python-modules/pika-pool { };
 
@@ -3619,70 +3349,13 @@ in {
 
   pymetar = callPackage ../development/python-modules/pymetar { };
 
-  pysftp = buildPythonPackage rec {
-    name = "pysftp-${version}";
-    version = "0.2.9";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysftp/${name}.tar.gz";
-      sha256 = "0jl5qix5cxzrv4lb8rfpjkpcghbkacnxkb006ikn7mkl5s05mxgv";
-    };
-
-    propagatedBuildInputs = with self; [ paramiko ];
-
-    meta = {
-      homepage = https://bitbucket.org/dundeemt/pysftp;
-      description = "A friendly face on SFTP";
-      license = licenses.mit;
-      longDescription = ''
-        A simple interface to SFTP. The module offers high level abstractions
-        and task based routines to handle your SFTP needs. Checkout the Cook
-        Book, in the docs, to see what pysftp can do for you.
-      '';
-    };
-  };
+  pysftp = callPackage ../development/python-modules/pysftp { };
 
   pysoundfile = callPackage ../development/python-modules/pysoundfile { };
 
-  python3pika = buildPythonPackage {
-    name = "python3-pika-0.9.14";
-    disabled = !isPy3k;
-
-    # Unit tests adds dependencies on pyev, tornado and twisted (and twisted is disabled for Python 3)
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = mirror://pypi/p/python3-pika/python3-pika-0.9.14.tar.gz;
-      sha256 = "1c3hifwvn04kvlja88iawf0awyz726jynwnpcb6gn7376b4nfch7";
-    };
-    buildInputs = with self; [ nose mock pyyaml ];
-
-    propagatedBuildInputs = with self; [ unittest2 ];
-  };
-
-
-  python-jenkins = buildPythonPackage rec {
-    name = "python-jenkins-${version}";
-    version = "0.4.14";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-jenkins/${name}.tar.gz";
-      sha256 = "1n8ikvd9jf4dlki7nqlwjlsn8wpsx4x7wg4h3d6bkvyvhwwf8yqf";
-    };
-    patchPhase = ''
-      sed -i 's@python@${python.interpreter}@' .testr.conf
-    '';
+  python3pika = callPackage ../development/python-modules/python3pika { };
 
-    buildInputs = with self; [ mock ];
-    propagatedBuildInputs = with self; [ pbr pyyaml six multi_key_dict testtools
-     testscenarios testrepository kerberos ];
-
-    meta = {
-      description = "Python bindings for the remote Jenkins API";
-      homepage = https://pypi.python.org/pypi/python-jenkins;
-      license = licenses.bsd3;
-    };
-  };
+  python-jenkins = callPackage ../development/python-modules/python-jenkins { };
 
   pystringtemplate = callPackage ../development/python-modules/stringtemplate { };
 
@@ -3699,59 +3372,15 @@ in {
 
   polib = callPackage ../development/python-modules/polib {};
 
-  posix_ipc = buildPythonPackage rec {
-    name = "posix_ipc-${version}";
-    version = "1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/posix_ipc/${name}.tar.gz";
-      sha256 = "1jzg66708pi5n9w07fbz6rlxx30cjds9hp2yawjjfryafh1hg4ww";
-    };
-
-    meta = {
-      description = "POSIX IPC primitives (semaphores, shared memory and message queues)";
-      license = licenses.bsd3;
-      homepage = http://semanchuk.com/philip/posix_ipc/;
-    };
-  };
+  posix_ipc = callPackage ../development/python-modules/posix_ipc { };
 
   portend = callPackage ../development/python-modules/portend { };
 
   powerline = callPackage ../development/python-modules/powerline { };
 
-  pox = buildPythonPackage rec {
-    name = "pox-${version}";
-    version = "0.2.2";
+  pox = callPackage ../development/python-modules/pox { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pox/${name}.tgz";
-      sha256 = "22e97ac6d2918c754e65a9581dbe02e9d00ae4a54ca48d05118f87c1ea92aa19";
-    };
-
-    meta = {
-      description = "Utilities for filesystem exploration and automated builds";
-      license = licenses.bsd3;
-      homepage = http://www.cacr.caltech.edu/~mmckerns/pox.htm;
-    };
-  };
-
-  ppft = buildPythonPackage rec {
-    name = "ppft-${version}";
-    version = "1.6.4.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/ppft/${name}.tgz";
-      sha256 = "6f99c861822884cb00badbd5f364ee32b90a157084a6768040793988c6b92bff";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-
-    meta = {
-      description = "Distributed and parallel python";
-      homepage = https://github.com/uqfoundation;
-      license = licenses.bsd3;
-    };
-  };
+  ppft = callPackage ../development/python-modules/ppft { };
 
   praw = callPackage ../development/python-modules/praw { };
 
@@ -3759,31 +3388,11 @@ in {
 
   premailer = callPackage ../development/python-modules/premailer { };
 
-  prettytable = buildPythonPackage rec {
-    name = "prettytable-0.7.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PrettyTable/${name}.tar.bz2";
-      sha256 = "599bc5b4b9602e28294cf795733c889c26dd934aa7e0ee9cff9b905d4fbad188";
-    };
-
-    buildInputs = [ pkgs.glibcLocales ];
-
-    preCheck = ''
-      export LANG="en_US.UTF-8"
-    '';
-
-    meta = {
-      description = "Simple Python library for easily displaying tabular data in a visually appealing ASCII table format";
-      homepage = http://code.google.com/p/prettytable/;
-    };
-  };
-
-  prompt_toolkit = self.prompt_toolkit_1;
+  prettytable = callPackage ../development/python-modules/prettytable { };
 
-  prompt_toolkit_1 = callPackage ../development/python-modules/prompt_toolkit/1.nix { };
-
-  prompt_toolkit_2 = callPackage ../development/python-modules/prompt_toolkit { };
+  prompt_toolkit = let
+    filename = if isPy3k then ../development/python-modules/prompt_toolkit else ../development/python-modules/prompt_toolkit/1.nix;
+  in callPackage filename { };
 
   protobuf = callPackage ../development/python-modules/protobuf {
     disabled = isPyPy;
@@ -3798,190 +3407,38 @@ in {
   psycopg2 = callPackage ../development/python-modules/psycopg2 {};
 
   ptpython = callPackage ../development/python-modules/ptpython {
-    prompt_toolkit = self.prompt_toolkit_2;
+    prompt_toolkit = self.prompt_toolkit;
   };
 
   publicsuffix = callPackage ../development/python-modules/publicsuffix {};
 
   py = callPackage ../development/python-modules/py { };
 
-  pyacoustid = buildPythonPackage rec {
-    name = "pyacoustid-1.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyacoustid/${name}.tar.gz";
-      sha256 = "0117039cb116af245e6866e8e8bf3c9c8b2853ad087142bd0c2dfc0acc09d452";
-    };
-
-    propagatedBuildInputs = with self; [ requests audioread ];
-
-    patches = [ ../development/python-modules/pyacoustid-py3.patch ];
-
-    postPatch = ''
-      sed -i \
-          -e '/^FPCALC_COMMAND *=/s|=.*|= "${pkgs.chromaprint}/bin/fpcalc"|' \
-          acoustid.py
-    '';
-
-    meta = {
-      description = "Bindings for Chromaprint acoustic fingerprinting";
-      homepage = "https://github.com/sampsyo/pyacoustid";
-      license = licenses.mit;
-    };
-  };
-
-
-  pyalgotrade = buildPythonPackage {
-    name = "pyalgotrade-0.16";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyAlgoTrade/PyAlgoTrade-0.16.tar.gz";
-      sha256 = "a253617254194b91cfebae7bfd184cb109d4e48a8c70051b9560000a2c0f94b3";
-    };
-
-    propagatedBuildInputs = with self; [ numpy scipy pytz ];
-
-    meta = {
-      description = "Python Algorithmic Trading";
-      homepage = http://gbeced.github.io/pyalgotrade/;
-      license = licenses.asl20;
-    };
-  };
+  pyacoustid = callPackage ../development/python-modules/pyacoustid { };
 
+  pyalgotrade = callPackage ../development/python-modules/pyalgotrade { };
 
   pyasn1 = callPackage ../development/python-modules/pyasn1 { };
 
   pyasn1-modules = callPackage ../development/python-modules/pyasn1-modules { };
 
-  pyaudio = buildPythonPackage rec {
-    name = "python-pyaudio-${version}";
-    version = "0.2.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyAudio/PyAudio-${version}.tar.gz";
-      sha256 = "bfd694272b3d1efc51726d0c27650b3c3ba1345f7f8fdada7e86c9751ce0f2a1";
-    };
-
-    disabled = isPyPy;
-
-    buildInputs = with self; [ pkgs.portaudio ];
-
-    meta = {
-      description = "Python bindings for PortAudio";
-      homepage = "http://people.csail.mit.edu/hubert/pyaudio/";
-      license = licenses.mit;
-    };
-  };
+  pyaudio = callPackage ../development/python-modules/pyaudio { };
 
   pysam = callPackage ../development/python-modules/pysam { };
 
-  pysaml2 = buildPythonPackage rec {
-    name = "pysaml2-${version}";
-    version = "3.0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysaml2/${name}.tar.gz";
-      sha256 = "0y2iw1dddcvi13xjh3l52z1mvnrbc41ik9k4nn7lwj8x5kimnk9n";
-    };
-
-    patches = [
-      (pkgs.fetchpatch {
-        name = "CVE-2016-10127.patch";
-        url = "https://sources.debian.net/data/main/p/python-pysaml2/3.0.0-5/debian/patches/fix-xxe-in-xml-parsing.patch";
-        sha256 = "184lkwdayjqiahzsn4yp15parqpmphjsb1z7zwd636jvarxqgs2q";
-      })
-    ];
-
-    propagatedBuildInputs = with self; [
-      repoze_who paste cryptography pycrypto pyopenssl ipaddress six cffi idna
-      enum34 pytz setuptools zope_interface dateutil requests pyasn1 webob decorator pycparser
-      defusedxml
-    ];
-    buildInputs = with self; [
-      Mako pytest memcached pymongo mongodict pkgs.xmlsec
-    ];
-
-    preConfigure = ''
-      sed -i 's/pymongo==3.0.1/pymongo/' setup.py
-    '';
-
-    # 16 failed, 427 passed, 17 error in 88.85 seconds
-    doCheck = false;
-
-    meta = with stdenv.lib; {
-      homepage = "https://github.com/rohe/pysaml2";
-    };
-  };
+  pysaml2 = callPackage ../development/python-modules/pysaml2 { };
 
   python-pushover = callPackage ../development/python-modules/pushover {};
 
   pystemd = callPackage ../development/python-modules/pystemd { systemd = pkgs.systemd; };
 
-  mongodict = buildPythonPackage rec {
-    name = "mongodict-${version}";
-    version = "0.3.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mongodict/${name}.tar.gz";
-      sha256 = "0nv5amfs337m0gbxpjb0585s20rndqfc3mfrzq1iwgnds5gxcrlw";
-    };
-
-    propagatedBuildInputs = with self; [
-      pymongo
-    ];
-
-    meta = with stdenv.lib; {
-      description = "MongoDB-backed Python dict-like interface";
-      homepage = "https://github.com/turicas/mongodict/";
-    };
-  };
-
-
-  repoze_who = buildPythonPackage rec {
-    name = "repoze.who-${version}";
-    version = "2.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/repoze.who/${name}.tar.gz";
-      sha256 = "12wsviar45nwn35w2y4i8b929dq2219vmwz8013wx7bpgkn2j9ij";
-    };
+  mongodict = callPackage ../development/python-modules/mongodict { };
 
-    propagatedBuildInputs = with self; [
-      zope_interface webob
-    ];
-    buildInputs = with self; [
-
-    ];
-
-    meta = with stdenv.lib; {
-      description = "WSGI Authentication Middleware / API";
-      homepage = "http://www.repoze.org";
-    };
-  };
+  repoze_who = callPackage ../development/python-modules/repoze_who { };
 
   vobject = callPackage ../development/python-modules/vobject { };
 
-  pycarddav = buildPythonPackage rec {
-    version = "0.7.0";
-    name = "pycarddav-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyCardDAV/pyCardDAV-${version}.tar.gz";
-      sha256 = "0avkrcpisfvhz103v7vmq2jd83hvmpqrb4mlbx6ikkk1wcvclsx8";
-    };
-
-    disabled = isPy3k || isPyPy;
-
-    propagatedBuildInputs = with self; [ vobject lxml requests urwid pyxdg ];
-
-    meta = {
-      description = "Command-line interface carddav client";
-      homepage = http://lostpackets.de/pycarddav;
-      license = licenses.mit;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  pycarddav = callPackage ../development/python-modules/pycarddav { };
 
   pygit2 = callPackage ../development/python-modules/pygit2 { };
 
@@ -3989,336 +3446,45 @@ in {
 
   pybfd = callPackage ../development/python-modules/pybfd { };
 
-  pyblock = stdenv.mkDerivation rec {
-    name = "pyblock-${version}";
-    version = "0.53";
-    md5_path = "f6d33a8362dee358517d0a9e2ebdd044";
-
-    src = pkgs.fetchurl rec {
-      url = "http://src.fedoraproject.org/repo/pkgs/python-pyblock/"
-          + "${name}.tar.bz2/${md5_path}/${name}.tar.bz2";
-      sha256 = "f6cef88969300a6564498557eeea1d8da58acceae238077852ff261a2cb1d815";
-    };
+  pyblock = callPackage ../development/python-modules/pyblock { };
 
-    postPatch = ''
-      sed -i -e 's|/usr/include/python|${python}/include/python|' \
-             -e 's/-Werror *//' -e 's|/usr/|'"$out"'/|' Makefile
-    '';
+  pybcrypt = callPackage ../development/python-modules/pybcrypt { };
 
-    buildInputs = with self; [ python pkgs.lvm2 pkgs.dmraid ];
+  pyblosxom = callPackage ../development/python-modules/pyblosxom { };
 
-    makeFlags = [
-      "USESELINUX=0"
-      "SITELIB=$(out)/${python.sitePackages}"
-    ];
-
-    meta = {
-      description = "Interface for working with block devices";
-      license = licenses.gpl2Plus;
-      broken = isPy3k; # doesn't build on python 3, 2018-04-11
-    };
-  };
-
-  pybcrypt = buildPythonPackage rec {
-    pname = "pybcrypt";
-    version = "0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/py-bcrypt/py-bcrypt-${version}.tar.gz";
-      sha256 = "5fa13bce551468350d66c4883694850570f3da28d6866bb638ba44fe5eabda78";
-    };
-
-    meta = {
-      description = "bcrypt password hashing and key derivation";
-      homepage = https://code.google.com/p/py-bcrypt2;
-      license = "BSD";
-    };
-  };
-
-  pyblosxom = buildPythonPackage rec {
-    name = "pyblosxom-${version}";
-    disabled = isPy3k;
-    version = "1.5.3";
-    # FAIL:test_generate_entry and test_time
-    # both tests fail due to time issue that doesn't seem to matter in practice
-    doCheck = false;
-    src = pkgs.fetchurl {
-      url = "https://github.com/pyblosxom/pyblosxom/archive/v${version}.tar.gz";
-      sha256 = "0de9a7418f4e6d1c45acecf1e77f61c8f96f036ce034493ac67124626fd0d885";
-    };
-
-    propagatedBuildInputs = with self; [ pygments markdown ];
-
-    meta = {
-      homepage = "http://pyblosxom.github.io";
-      description = "File-based blogging engine";
-      license = licenses.mit;
-    };
-  };
-
-
-  pycapnp = buildPythonPackage rec {
-    name = "pycapnp-0.5.1";
-    disabled = isPyPy || isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pycapnp/${name}.tar.gz";
-      sha256 = "1kp97il34419gcrhn866n6a10lvh8qr13bnllnnh9473n4cq0cvk";
-    };
-
-    buildInputs = with pkgs; [ capnproto self.cython ];
-
-    # import setuptools as soon as possible, to minimize monkeypatching mayhem.
-    postConfigure = ''
-      sed -i '3iimport setuptools' setup.py
-    '';
-
-    meta = {
-      maintainers = with maintainers; [ cstrahan ];
-      license = licenses.bsd2;
-      platforms = platforms.all;
-      homepage = "http://jparyani.github.io/pycapnp/index.html";
-      broken = true; # 2018-04-11
-    };
-  };
+  pycapnp = callPackage ../development/python-modules/pycapnp { };
 
   pycaption = callPackage ../development/python-modules/pycaption { };
 
-  pycdio = buildPythonPackage rec {
-    name = "pycdio-2.0.0";
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pycdio/${name}.tar.gz";
-      sha256 = "1a1h0lmfl56a2a9xqhacnjclv81nv3906vdylalybxrk4bhrm3hj";
-    };
-
-    prePatch = "sed -i -e '/DRIVER_BSDI/d' pycdio.py";
-
-    preConfigure = ''
-      patchShebangs .
-    '';
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = [ self.setuptools self.nose pkgs.swig pkgs.libcdio ]
-      ++ stdenv.lib.optional stdenv.isDarwin pkgs.libiconv;
-
-    # Run tests using nosetests but first need to install the binaries
-    # to the root source directory where they can be found.
-    checkPhase = ''
-      ./setup.py install_lib -d .
-      nosetests
-    '';
-
-    meta = {
-      homepage = http://www.gnu.org/software/libcdio/;
-      description = "Wrapper around libcdio (CD Input and Control library)";
-      maintainers = with maintainers; [ rycee ];
-      license = licenses.gpl3Plus;
-    };
-  };
+  pycdio = callPackage ../development/python-modules/pycdio { };
 
   pycosat = callPackage ../development/python-modules/pycosat { };
 
-  pycryptopp = buildPythonPackage (rec {
-    name = "pycryptopp-0.6.0.1206569328141510525648634803928199668821045408958";
-    disabled = isPy3k || isPyPy;  # see https://bitbucket.org/pypy/pypy/issue/1190/
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pycryptopp/${name}.tar.gz";
-      sha256 = "0n90h1yg7bfvlbhnc54xb6dbqm286ykaksyg04kxlhyjgf8mhq8i";
-    };
-
-    # Prefer crypto++ library from the Nix store over the one that's included
-    # in the pycryptopp distribution.
-    preConfigure = "export PYCRYPTOPP_DISABLE_EMBEDDED_CRYPTOPP=1";
-
-    buildInputs = with self; [ setuptoolsDarcs darcsver pkgs.cryptopp ];
-
-    meta = {
-      homepage = http://allmydata.org/trac/pycryptopp;
-
-      description = "Python wrappers for the Crypto++ library";
-
-      license = licenses.gpl2Plus;
-
-      maintainers = [ ];
-      platforms = platforms.linux;
-    };
-  });
+  pycryptopp = callPackage ../development/python-modules/pycryptopp { };
 
   pycups = callPackage ../development/python-modules/pycups { };
 
   pycurl = callPackage ../development/python-modules/pycurl { };
 
-  pycurl2 = buildPythonPackage (rec {
-    name = "pycurl2-7.20.0";
-    disabled = isPy3k;
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/Lispython/pycurl.git";
-      rev = "0f00109950b883d680bd85dc6e8a9c731a7d0d13";
-      sha256 = "1qmw3cm93kxj94s71a8db9lwv2cxmr2wjv7kp1r8zildwdzhaw7j";
-    };
-
-    # error: (6, "Couldn't resolve host 'h.wrttn.me'")
-    doCheck = false;
-
-    buildInputs = with self; [ pkgs.curl simplejson unittest2 nose ];
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/pycurl2;
-      description = "A fork from original PycURL library that no maintained from 7.19.0";
-      platforms = platforms.linux;
-    };
-  });
-
-  pydispatcher = buildPythonPackage (rec {
-    version = "2.0.5";
-    name = "pydispatcher-${version}";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyDispatcher/PyDispatcher-${version}.tar.gz";
-      sha256 = "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m";
-    };
+  pycurl2 = callPackage ../development/python-modules/pycurl2 { };
 
-    buildInputs = with self; [ pytest ];
-
-    checkPhase = ''
-      py.test
-    '';
-
-    meta = {
-      homepage = http://pydispatcher.sourceforge.net/;
-      description = "Signal-registration and routing infrastructure for use in multiple contexts";
-      license = licenses.bsd3;
-    };
-   });
+  pydispatcher = callPackage ../development/python-modules/pydispatcher { };
 
   pydot = callPackage ../development/python-modules/pydot { };
 
-  pydot_ng = buildPythonPackage rec {
-    name = "pydot_ng-1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pydot-ng/${name}.tar.gz";
-      sha256 = "0h8k8wlzvnb40v4js7afgfyhp3wasmb1kg4gr6z7ck63iv8fq864";
-    };
-
-    buildInputs = [ self.pytest self.unittest2 ];
-    propagatedBuildInputs = [ pkgs.graphviz self.pyparsing ];
-
-    checkPhase = ''
-      mkdir test/my_tests
-      py.test test
-    '';
+  pydot_ng = callPackage ../development/python-modules/pydot_ng { };
 
-    meta = {
-      homepage = "https://pypi.python.org/pypi/pydot-ng";
-      description = "Python 3-compatible update of pydot, a Python interface to Graphviz's Dot";
-      license = licenses.mit;
-      maintainers = [ maintainers.bcdarwin ];
-    };
-  };
+  pyelftools = callPackage ../development/python-modules/pyelftools { };
 
-  pyelftools = buildPythonPackage rec {
-    pname = "pyelftools";
-    version = "0.24";
-    name = "${pname}-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/${pname}/${name}.tar.gz";
-      sha256 = "17259kf6hwwsmizr5myp9jv3k9g5i3dvmnl8m646pfd5hpb9gpg9";
-    };
-
-    checkPhase = ''
-      ${python.interpreter} test/all_tests.py
-    '';
-    # Tests cannot pass against system-wide readelf
-    # https://github.com/eliben/pyelftools/issues/65
-    doCheck = false;
-
-    meta = {
-      description = "A library for analyzing ELF files and DWARF debugging information";
-      homepage = https://github.com/eliben/pyelftools;
-      license = licenses.publicDomain;
-      platforms = platforms.all;
-      maintainers = [ maintainers.igsha ];
-    };
-  };
-
-  pyenchant = buildPythonPackage rec {
-    name = "pyenchant-1.6.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyenchant/pyenchant-1.6.6.tar.gz";
-      sha256 = "25c9d2667d512f8fc4410465fdd2e868377ca07eb3d56e2b6e534a86281d64d3";
-    };
-
-    propagatedBuildInputs = [ pkgs.enchant ];
-
-    patchPhase = let
-      path_hack_script = "s|LoadLibrary(e_path)|LoadLibrary('${pkgs.enchant}/lib/' + e_path)|";
-    in ''
-      sed -i "${path_hack_script}" enchant/_enchant.py
-
-      # They hardcode a bad path for Darwin in their library search code
-      substituteInPlace enchant/_enchant.py --replace '/opt/local/lib/' ""
-    '';
-
-    # dictionaries needed for tests
-    doCheck = false;
-
-    meta = {
-      description = "pyenchant: Python bindings for the Enchant spellchecker";
-      homepage = https://pythonhosted.org/pyenchant/;
-      license = licenses.lgpl21;
-    };
-  };
+  pyenchant = callPackage ../development/python-modules/pyenchant { };
 
   pyev = callPackage ../development/python-modules/pyev { };
 
-  pyexcelerator = buildPythonPackage rec {
-    name = "pyexcelerator-${version}";
-    version = "0.6.4.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyexcelerator/${name}.tar.bz2";
-      sha256 = "18rcnc9f71lj06h8nppnv6idzb7xfmh2rp1zfqayskcg686lilrb";
-    };
-
-    disabled = isPy3k;
-
-    # No tests are included in archive
-    doCheck = false;
-
-    meta = {
-      description = "library for generating Excel 97/2000/XP/2003 and OpenOffice Calc compatible spreadsheets.";
-      homepage = "https://sourceforge.net/projects/pyexcelerator";
-      license = licenses.bsdOriginal;
-      maintainers = with maintainers; [ womfoo ];
-    };
-  };
+  pyexcelerator = callPackage ../development/python-modules/pyexcelerator { };
 
   pyext = callPackage ../development/python-modules/pyext { };
 
-  pyfantom = buildPythonPackage rec {
-     name = "pyfantom-${version}";
-     version = "unstable-2013-12-18";
-
-     src = pkgs.fetchgit {
-       url = "http://git.ni.fr.eu.org/pyfantom.git";
-       sha256 = "1m53n8bxslq5zmvcf7i1xzsgq5bdsf1z529br5ypmj5bg0s86j4q";
-     };
-
-     # No tests included
-     doCheck = false;
-
-     meta = {
-       homepage = http://pyfantom.ni.fr.eu.org/;
-       description = "Wrapper for the LEGO Mindstorms Fantom Driver";
-       license = licenses.gpl2;
-     };
-   };
+  pyfantom = callPackage ../development/python-modules/pyfantom { };
 
   pyfftw = callPackage ../development/python-modules/pyfftw { };
 
@@ -4363,273 +3529,27 @@ in {
 
   pyspread = callPackage ../development/python-modules/pyspread { };
 
-  pyx = buildPythonPackage rec {
-    name = "pyx-${version}";
-    version = "0.14.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyX/PyX-${version}.tar.gz";
-      sha256 = "05d1b7fc813379d2c12fcb5bd0195cab522b5aabafac88f72913f1d47becd912";
-    };
-
-    disabled = !isPy3k;
-
-    # No tests in archive
-    doCheck = false;
-
-    meta = {
-      description = "Python package for the generation of PostScript, PDF, and SVG files";
-      homepage = http://pyx.sourceforge.net/;
-      license = with licenses; [ gpl2 ];
-    };
-  };
-
-  mmpython = buildPythonPackage rec {
-    version = "0.4.10";
-    name = "mmpython-${version}";
-
-    src = pkgs.fetchurl {
-      url = http://sourceforge.net/projects/mmpython/files/latest/download;
-      sha256 = "1b7qfad3shgakj37gcj1b9h78j1hxlz6wp9k7h76pb4sq4bfyihy";
-      name = "${name}.tar.gz";
-    };
-
-    disabled = isPyPy || isPy3k;
-
-    meta = {
-      description = "Media Meta Data retrieval framework";
-      homepage = https://sourceforge.net/projects/mmpython/;
-      license = licenses.gpl2;
-      maintainers = with maintainers; [ ];
-    };
-  };
-
-  kaa-base = buildPythonPackage rec {
-    version = "0.99.2dev-384-2b73caca";
-    name = "kaa-base-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/k/kaa-base/kaa-base-0.99.2dev-384-2b73caca.tar.gz";
-      sha256 = "0k3zzz84wzz9q1fl3vvqr2ys96z9pcf4viq9q6s2a63zaysmcfd2";
-    };
-
-    doCheck = false;
-
-    disabled = isPyPy || isPy3k;
-
-    # Same as in buildPythonPackage except that it does not pass --old-and-unmanageable
-    installPhase = ''
-      runHook preInstall
-
-      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
-
-      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
-
-      ${python}/bin/${python.executable} setup.py install \
-        --install-lib=$out/lib/${python.libPrefix}/site-packages \
-        --prefix="$out"
-
-      eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
-      if [ -e "$eapth" ]; then
-          mv "$eapth" $(dirname "$eapth")/${name}.pth
-      fi
-
-      rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
-
-      runHook postInstall
-    '';
-
-    meta = {
-      description = "Generic application framework, providing the foundation for other modules";
-      homepage = https://github.com/freevo/kaa-base;
-      license = licenses.lgpl21;
-      maintainers = with maintainers; [ ];
-    };
-  };
-
-  kaa-metadata = buildPythonPackage rec {
-    version = "0.7.8dev-r4569-20111003";
-    name = "kaa-metadata-${version}";
-
-    doCheck = false;
-
-    buildInputs = [ pkgs.libdvdread ];
-
-    disabled = isPyPy || isPy3k;
-
-    # Same as in buildPythonPackage except that it does not pass --old-and-unmanageable
-    installPhase = ''
-      runHook preInstall
-
-      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
-
-      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
-
-      ${python}/bin/${python.executable} setup.py install \
-        --install-lib=$out/lib/${python.libPrefix}/site-packages \
-        --prefix="$out"
-
-      eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
-      if [ -e "$eapth" ]; then
-          mv "$eapth" $(dirname "$eapth")/${name}.pth
-      fi
+  pyupdate = callPackage ../development/python-modules/pyupdate {};
 
-      rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
+  pyx = callPackage ../development/python-modules/pyx { };
 
-      runHook postInstall
-    '';
+  mmpython = callPackage ../development/python-modules/mmpython { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/k/kaa-metadata/kaa-metadata-0.7.8dev-r4569-20111003.tar.gz";
-      sha256 = "0bkbzfgxvmby8lvzkqjp86anxvv3vjd9nksv2g4l7shsk1n7y27a";
-    };
+  kaa-base = callPackage ../development/python-modules/kaa-base { };
 
-    propagatedBuildInputs = with self; [ kaa-base ];
+  kaa-metadata = callPackage ../development/python-modules/kaa-metadata { };
 
-    meta = {
-      description = "Python library for parsing media metadata, which can extract metadata (e.g., such as id3 tags) from a wide range of media files";
-      homepage = https://github.com/freevo/kaa-metadata;
-      license = licenses.gpl2;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  PyICU = callPackage ../development/python-modules/pyicu { };
 
-  owslib = callPackage ../development/python-modules/owslib { };
+  pyinputevent = callPackage ../development/python-modules/pyinputevent { };
 
-  PyICU = buildPythonPackage rec {
-    name = "PyICU-2.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyICU/${name}.tar.gz";
-      sha256 = "0wq9y5fi1ighgf5aws9nr87vi1w44p7q1k83rx2y3qj5d2xyhspa";
-    };
-
-    patches = [
-      (pkgs.fetchpatch {
-        url = https://sources.debian.org/data/main/p/pyicu/2.2-1/debian/patches/icu_test.patch;
-        sha256 = "1iavdkyqixm9i753svl17barla93b7jzgkw09dn3hnggamx7zwx9";
-      })
-    ];
+  pyinotify = callPackage ../development/python-modules/pyinotify { };
 
-    buildInputs = [ pkgs.icu60 self.pytest ];
-
-    propagatedBuildInputs = [ self.six ];
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/PyICU/;
-      description = "Python extension wrapping the ICU C++ API";
-      license = licenses.mit;
-      platforms = platforms.linux; # Maybe other non-darwin Unix
-      maintainers = [ maintainers.rycee ];
-    };
-  };
-
-  pyinputevent = buildPythonPackage rec {
-    name = "pyinputevent-2016-10-18";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "ntzrmtthihu777";
-      repo = "pyinputevent";
-      rev = "d2075fa5db5d8a402735fe788bb33cf9fe272a5b";
-      sha256 = "0rkis0xp8f9jc00x7jb9kbvhdla24z1vl30djqa6wy6fx0cr6sib";
-    };
-
-    meta = {
-      homepage = "https://github.com/ntzrmtthihu777/pyinputevent";
-      description = "Python interface to the Input Subsystem's input_event and uinput";
-      license = licenses.bsd3;
-      platforms = platforms.linux;
-    };
-  };
-
-  pyinotify = buildPythonPackage rec {
-    name = "pyinotify-${version}";
-    version = "0.9.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/${name}/${name}.tar.gz";
-      sha256 = "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw";
-    };
-
-    # No tests distributed
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/seb-m/pyinotify/wiki;
-      description = "Monitor filesystems events on Linux platforms with inotify";
-      license = licenses.mit;
-      platforms = platforms.linux;
-    };
-  };
-
-  pyinsane2 = buildPythonPackage rec {
-    name = "pyinsane2-${version}";
-    version = "2.0.10";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyinsane2/${name}.tar.gz";
-      sha256 = "00d1wqb3w9bn1rxb2dwmdqbar2lr96izq855l5vzprc17dkgip3j";
-    };
-
-    postPatch = ''
-      # pyinsane2 forks itself, so we need to re-inject the PYTHONPATH.
-      sed -i -e '/os.putenv.*PYINSANE_DAEMON/ {
-        a \        os.putenv("PYTHONPATH", ":".join(sys.path))
-      }' pyinsane2/sane/abstract_proc.py
-
-      sed -i -e 's,"libsane.so.1","${pkgs.sane-backends}/lib/libsane.so",' \
-        pyinsane2/sane/rawapi.py
-    '';
-
-    # Tests require a scanner to be physically connected, so let's just do a
-    # quick check whether initialization works.
-    checkPhase = ''
-      python -c 'import pyinsane2; pyinsane2.init()'
-    '';
-
-    # This is needed by setup.py regardless of whether tests are enabled.
-    buildInputs = [ self.nose ];
-
-    propagatedBuildInputs = [ self.pillow ];
-
-    meta = {
-      homepage = "https://github.com/jflesch/pyinsane";
-      description = "Access and use image scanners";
-      license = licenses.gpl3Plus;
-      platforms = platforms.linux;
-    };
-  };
+  pyinsane2 = callPackage ../development/python-modules/pyinsane2 { };
 
   pyjwt = callPackage ../development/python-modules/pyjwt { };
 
-  pykickstart = buildPythonPackage rec {
-    name = "pykickstart-${version}";
-    version = "1.99.39";
-    md5_path = "d249f60aa89b1b4facd63f776925116d";
-
-    src = pkgs.fetchurl rec {
-      url = "http://src.fedoraproject.org/repo/pkgs/pykickstart/"
-          + "${name}.tar.gz/${md5_path}/${name}.tar.gz";
-      sha256 = "e0d0f98ac4c5607e6a48d5c1fba2d50cc804de1081043f9da68cbfc69cad957a";
-    };
-
-    postPatch = ''
-      sed -i -e "s/for tst in tstList/for tst in sorted(tstList, \
-                 key=lambda m: m.__name__)/" tests/baseclass.py
-    '';
-
-    propagatedBuildInputs = with self; [ urlgrabber ];
-
-    checkPhase = ''
-      ${python.interpreter} tests/baseclass.py -vv
-    '';
-
-    meta = {
-      homepage = "http://fedoraproject.org/wiki/Pykickstart";
-      description = "Read and write Fedora kickstart files";
-      license = licenses.gpl2Plus;
-    };
-  };
+  pykickstart = callPackage ../development/python-modules/pykickstart { };
 
   pyobjc = if stdenv.isDarwin
     then callPackage ../development/python-modules/pyobjc {}
@@ -4641,227 +3561,33 @@ in {
 
   pyparsing = callPackage ../development/python-modules/pyparsing { };
 
-  pyparted = buildPythonPackage rec {
-    name = "pyparted-${version}";
-    version = "3.10.7";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/rhinstaller/pyparted/archive/v${version}.tar.gz";
-      sha256 = "0c9ljrdggwawd8wdzqqqzrna9prrlpj6xs59b0vkxzip0jkf652r";
-    };
-
-    postPatch = ''
-      sed -i -e 's|mke2fs|${pkgs.e2fsprogs}/bin/mke2fs|' tests/baseclass.py
-      sed -i -e '
-        s|e\.path\.startswith("/tmp/temp-device-")|"temp-device-" in e.path|
-      ' tests/test__ped_ped.py
-    '' + optionalString stdenv.isi686 ''
-      # remove some integers in this test case which overflow on 32bit systems
-      sed -i -r -e '/class *UnitGetSizeTestCase/,/^$/{/[0-9]{11}/d}' \
-        tests/test__ped_ped.py
-    '';
-
-    preConfigure = ''
-      PATH="${pkgs.parted}/sbin:$PATH"
-    '';
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-
-    propagatedBuildInputs = with self; [ pkgs.parted ];
-
-    checkPhase = ''
-      patchShebangs Makefile
-      make test PYTHON=${python.executable}
-    '';
-
-    meta = {
-      homepage = "https://fedorahosted.org/pyparted/";
-      description = "Python interface for libparted";
-      license = licenses.gpl2Plus;
-      platforms = platforms.linux;
-    };
-  };
-
-
-  pyptlib = buildPythonPackage (rec {
-    name = "pyptlib-${version}";
-    disabled = isPyPy || isPy3k;
-    version = "0.0.6";
+  pyparted = callPackage ../development/python-modules/pyparted { };
 
-    doCheck = false;  # No such file or directory errors on 32bit
+  pyptlib = callPackage ../development/python-modules/pyptlib { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyptlib/pyptlib-${version}.tar.gz";
-      sha256 = "01y6vbwncqb0hxlnin6whd9wrrm5my4qzjhk76fnix78v7ip515r";
-    };
-    meta = {
-      description = "A python implementation of the Pluggable Transports for Circumvention specification for Tor";
-      license = licenses.bsd2;
-    };
-  });
-
-  pyqtgraph = buildPythonPackage rec {
-    name = "pyqtgraph-${version}";
-    version = "0.9.10";
-
-    doCheck = false;  # "PyQtGraph requires either PyQt4 or PySide; neither package could be imported."
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyqtgraph/${name}.tar.gz";
-      sha256 = "188pcxf3sxxjf0aipjn820lx2rf9f42zzp0sibmcl90955a3ipf1";
-    };
-
-    propagatedBuildInputs = with self; [ scipy numpy pyqt4 pyopengl ];
-
-    meta = {
-      description = "Scientific Graphics and GUI Library for Python";
-      homepage = http://www.pyqtgraph.org/;
-      license = licenses.mit;
-      platforms = platforms.unix;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
+  pyqtgraph = callPackage ../development/python-modules/pyqtgraph { };
 
   PyStemmer = callPackage ../development/python-modules/pystemmer {};
 
-  serpent = callPackage ../development/python-modules/serpent { };
+  # Missing expression?
+  # Pyro = callPackage ../development/python-modules/pyro { };
 
-  selectors34 = callPackage ../development/python-modules/selectors34 { };
+  pyrsistent = callPackage ../development/python-modules/pyrsistent { };
 
-  Pyro4 = callPackage ../development/python-modules/pyro4 { };
+  PyRSS2Gen = callPackage ../development/python-modules/pyrss2gen { };
 
-  pyrsistent = buildPythonPackage (rec {
-    name = "pyrsistent-0.11.12";
+  pysmi = callPackage ../development/python-modules/pysmi { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyrsistent/${name}.tar.gz";
-      sha256 = "0jgyhkkq36wn36rymn4jiyqh2vdslmradq4a2mjkxfbk2cz6wpi5";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-    buildInputs = with self; [ pytest hypothesis ];
+  pysnmp = callPackage ../development/python-modules/pysnmp { };
 
-    checkPhase = ''
-      py.test
-    '';
-
-    meta = {
-      homepage = https://github.com/tobgu/pyrsistent/;
-      description = "Persistent/Functional/Immutable data structures";
-      license = licenses.mit;
-      maintainers = with maintainers; [ desiderius ];
-    };
-  });
-
-  PyRSS2Gen = buildPythonPackage (rec {
-    pname = "PyRSS2Gen";
-    version = "1.1";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r";
-    };
-
-    # No tests in archive
-    doCheck = false;
-
-    meta = {
-      homepage = http://www.dalkescientific.om/Python/PyRSS2Gen.html;
-      description = "Library for generating RSS 2.0 feeds";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  });
-
-  pysmi = buildPythonPackage rec {
-    version = "0.0.7";
-    name = "pysmi-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysmi/${name}.tar.gz";
-      sha256 = "05h1lv2a687b9qjc399w6728ildx7majbn338a0c4k3gw6wnv7wr";
-    };
-
-    # Tests require pysnmp, which in turn requires pysmi => infinite recursion
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ ply ];
-
-    meta = {
-      homepage = http://pysmi.sf.net;
-      description = "SNMP SMI/MIB Parser";
-      license = licenses.bsd2;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
-
-  pysnmp = buildPythonPackage rec {
-    version = "4.3.2";
-    name = "pysnmp-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysnmp/${name}.tar.gz";
-      sha256 = "0xw925f3p02vdpb3f0ls60qj59w44aiyfs3s0nhdr9vsy4fxhavw";
-    };
-
-    # NameError: name 'mibBuilder' is not defined
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ pyasn1 pycrypto pysmi ];
-
-    meta = {
-      homepage = http://pysnmp.sf.net;
-      description = "A pure-Python SNMPv1/v2c/v3 library";
-      license = licenses.bsd2;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
-
-  pysocks = buildPythonPackage rec {
-    name = "pysocks-${version}";
-    version = "1.6.6";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/P/PySocks/PySocks-${version}.tar.gz";
-      sha256 = "0h9zwr8z9j6l313ns335irjrkk6qnk4qzvwmjqygrp7mbwi9lh82";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "SOCKS module for Python";
-      license     = licenses.bsd3;
-      maintainers = with maintainers; [ thoughtpolice ];
-    };
-  };
+  pysocks = callPackage ../development/python-modules/pysocks { };
 
   python_fedora = callPackage ../development/python-modules/python_fedora {};
 
   python-simple-hipchat = callPackage ../development/python-modules/python-simple-hipchat {};
   python_simple_hipchat = self.python-simple-hipchat;
 
-  python_keyczar = buildPythonPackage rec {
-    name = "python-keyczar-0.71c";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/p/python-keyczar/${name}.tar.gz";
-      sha256 = "18mhiwqq6vp65ykmi8x3i5l3gvrvrrr8z2kv11z1rpixmyr7sw1p";
-    };
-
-    meta = {
-      description = "Toolkit for safe and simple cryptography";
-      homepage    = https://pypi.python.org/pypi/python-keyczar;
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
-    };
-
-    buildInputs = with self; [ pyasn1 pycrypto ];
-  };
+  python_keyczar = callPackage ../development/python-modules/python_keyczar { };
 
   python-language-server = callPackage ../development/python-modules/python-language-server {};
 
@@ -4879,47 +3605,9 @@ in {
 
   pynmea2 = callPackage ../development/python-modules/pynmea2 {};
 
-  pynzb = buildPythonPackage (rec {
-    name = "pynzb-0.1.0";
+  pynzb = callPackage ../development/python-modules/pynzb { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pynzb/${name}.tar.gz";
-      sha256 = "0735b3889a1174bbb65418ee503629d3f5e4a63f04b16f46ffba18253ec3ef17";
-    };
-
-    # Can't get them working
-    doCheck = false;
-    checkPhase = ''
-      ${python.interpreter} -m unittest -s pynzb -t .
-    '';
-
-    meta = {
-      homepage = https://github.com/ericflo/pynzb;
-      description = "Unified API for parsing NZB files";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  });
-
-  process-tests = buildPythonPackage rec {
-    pname = "process-tests";
-    name = "${pname}-${version}";
-    version = "1.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/${pname}/${name}.tar.gz";
-      sha256 = "65c9d7a0260f31c15b4a22a851757e61f7072d0557db5f8a976112fbe81ff7e9";
-    };
-
-    # No tests
-    doCheck = false;
-
-    meta = {
-      description = "Tools for testing processes";
-      license = licenses.bsd2;
-      homepage = https://github.com/ionelmc/python-process-tests;
-    };
-  };
+  process-tests = callPackage ../development/python-modules/process-tests { };
 
   progressbar = callPackage ../development/python-modules/progressbar {};
 
@@ -4935,22 +3623,7 @@ in {
 
   ldap3 = callPackage ../development/python-modules/ldap3 {};
 
-  ptest = buildPythonPackage rec {
-    name = pname + "-" + version;
-    pname = "ptest";
-    version =  "1.5.3";
-    src = pkgs.fetchFromGitHub {
-      owner = "KarlGong";
-      repo = pname;
-      rev = version + "-release";
-      sha256 = "1r50lm6n59jzdwpp53n0c0hp3aj1jxn304bk5gh830226gsaf2hn";
-    };
-    meta = {
-      description = "Test classes and test cases using decorators, execute test cases by command line, and get clear reports";
-      homepage = https://pypi.python.org/pypi/ptest;
-      license = licenses.asl20;
-    };
-  };
+  ptest = callPackage ../development/python-modules/ptest { };
 
   ptyprocess = callPackage ../development/python-modules/ptyprocess { };
 
@@ -4958,422 +3631,51 @@ in {
 
   pylibgen = callPackage ../development/python-modules/pylibgen { };
 
-  pyliblo = buildPythonPackage rec {
-    name = "pyliblo-${version}";
-    version = "0.9.2";
-
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "http://das.nasophon.de/download/${name}.tar.gz";
-      sha256 = "382ee7360aa00aeebf1b955eef65f8491366657a626254574c647521b36e0eb0";
-    };
-
-    propagatedBuildInputs = with self ; [ pkgs.liblo ];
-
-    meta = {
-      homepage = http://das.nasophon.de/pyliblo/;
-      description = "Python wrapper for the liblo OSC library";
-      license = licenses.lgpl21;
-    };
-  };
+  pyliblo = callPackage ../development/python-modules/pyliblo { };
 
   pypcap = callPackage ../development/python-modules/pypcap {};
 
-  pyplatec = buildPythonPackage rec {
-    name = "PyPlatec-${version}";
-    version = "1.4.0";
+  pyplatec = callPackage ../development/python-modules/pyplatec { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyPlatec/${name}.tar.gz";
-      sha256 = "0kqx33flcrrlipccmqs78d14pj5749bp85b6k5fgaq2c7yzz02jg";
-    };
+  purepng = callPackage ../development/python-modules/purepng { };
 
-    meta = {
-      description = "Library to simulate plate tectonics with Python bindings";
-      homepage    = https://github.com/Mindwerks/plate-tectonics;
-      license     = licenses.lgpl3;
-    };
-  };
+  pymaging = callPackage ../development/python-modules/pymaging { };
 
-  purepng = buildPythonPackage rec {
-    name = "purepng-${version}";
-    version = "0.2.0";
+  pymaging_png = callPackage ../development/python-modules/pymaging_png { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/purepng/${name}.tar.gz";
-      sha256 = "1kcl7a6d7d59360fbz2jwfk6ha6pmqgn396962p4s62j893d2r0d";
-    };
-
-    meta = {
-      description = "Pure Python library for PNG image encoding/decoding";
-      homepage    = https://github.com/scondo/purepng;
-      license     = licenses.mit;
-    };
-  };
+  pyPdf = callPackage ../development/python-modules/pypdf { };
 
-  pymaging = buildPythonPackage rec {
-    name = "pymaging-unstable-2016-11-16";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "ojii";
-      repo = "pymaging";
-      rev = "596a08fce5664e58d6e8c96847393fbe987783f2";
-      sha256 = "18g3n7kfrark30l4vzykh0gdbnfv5wb1zvvjbs17sj6yampypn38";
-    };
-
-    meta = {
-      description = "Pure Python imaging library with Python 2.6, 2.7, 3.1+ support";
-      homepage    = http://pymaging.rtfd.org;
-      license     = licenses.mit;
-      maintainers = with maintainers; [ mic92 ];
-    };
-  };
-
-  pymaging_png = buildPythonPackage rec {
-    name = "pymaging-png-unstable-2016-11-16";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "ojii";
-      repo = "pymaging-png";
-      rev = "83d85c44e4b2342818e6c068065e031a9f81bb9f";
-      sha256 = "1mknxvsq0lr1ffm8amzm3w2prn043c6ghqgpxlkw83r988p5fn57";
-    };
-
-    propagatedBuildInputs = with self; [ pymaging ];
-
-    meta = {
-      description = "Pure Python imaging library with Python 2.6, 2.7, 3.1+ support";
-      homepage    = https://github.com/ojii/pymaging-png/;
-      license     = licenses.mit;
-      maintainers = with maintainers; [ mic92 ];
-    };
-  };
-
-  pyPdf = buildPythonPackage rec {
-    name = "pyPdf-1.13";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyPdf/${name}.tar.gz";
-      sha256 = "3aede4c3c9c6ad07c98f059f90db0b09ed383f7c791c46100f649e1cabda0e3b";
-    };
-
-    buildInputs = with self; [ ];
-
-    # Not supported. Package is no longer maintained.
-    disabled = isPy3k;
-
-    meta = {
-      description = "Pure-Python PDF toolkit";
-      homepage = "http://pybrary.net/pyPdf/";
-      license = licenses.bsd3;
-    };
-  };
+  pypdf2 = callPackage ../development/python-modules/pypdf2 { };
 
-  pypdf2 = buildPythonPackage rec {
-    name = "PyPDF2-${version}";
-    version = "1.26.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyPDF2/${name}.tar.gz";
-      sha256 = "11a3aqljg4sawjijkvzhs3irpw0y67zivqpbjpm065ha5wpr13z2";
-    };
-
-    LC_ALL = "en_US.UTF-8";
-    buildInputs = [ pkgs.glibcLocales ];
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover -s Tests
-    '';
-
-    # Tests broken on Python 3.x
-    doCheck = !(isPy3k);
-
-    meta = {
-      description = "A Pure-Python library built as a PDF toolkit";
-      homepage = "http://mstamy2.github.com/PyPDF2/";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ desiderius vrthra ];
-    };
-  };
-
-  pyopengl = buildPythonPackage rec {
-    name = "pyopengl-${version}";
-    version = "3.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/PyOpenGL/PyOpenGL-${version}.tar.gz";
-      sha256 = "9b47c5c3a094fa518ca88aeed35ae75834d53e4285512c61879f67a48c94ddaf";
-    };
-    propagatedBuildInputs = [ pkgs.libGLU_combined pkgs.freeglut self.pillow ];
-    patchPhase = let
-      ext = stdenv.hostPlatform.extensions.sharedLibrary; in ''
-      substituteInPlace OpenGL/platform/glx.py \
-        --replace "'GL'" "'${pkgs.libGL}/lib/libGL${ext}'" \
-        --replace "'GLU'" "'${pkgs.libGLU}/lib/libGLU${ext}'" \
-        --replace "'glut'" "'${pkgs.freeglut}/lib/libglut${ext}'"
-      substituteInPlace OpenGL/platform/darwin.py \
-        --replace "'OpenGL'" "'${pkgs.libGL}/lib/libGL${ext}'" \
-        --replace "'GLUT'" "'${pkgs.freeglut}/lib/libglut${ext}'"
-    '';
-    meta = {
-      homepage = http://pyopengl.sourceforge.net/;
-      description = "PyOpenGL, the Python OpenGL bindings";
-      longDescription = ''
-        PyOpenGL is the cross platform Python binding to OpenGL and
-        related APIs.  The binding is created using the standard (in
-        Python 2.5) ctypes library, and is provided under an extremely
-        liberal BSD-style Open-Source license.
-      '';
-      license = "BSD-style";
-      platforms = platforms.mesaPlatforms;
-    };
-
-    # Need to fix test runner
-    # Tests have many dependencies
-    # Extension types could not be found.
-    # Should run test suite from $out/${python.sitePackages}
-    doCheck = false;
-  };
+  pyopengl = callPackage ../development/python-modules/pyopengl { };
 
   pyopenssl = callPackage ../development/python-modules/pyopenssl { };
 
-  pyquery = buildPythonPackage rec {
-    name = "pyquery-${version}";
-    version = "1.2.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyquery/${name}.zip";
-      sha256 = "00p6f1dfma65192hc72dxd506491lsq3g5wgxqafi1xpg2w1xia6";
-    };
-
-    propagatedBuildInputs = with self; [ cssselect lxml webob ];
-    # circular dependency on webtest
-    doCheck = false;
-  };
+  pyquery = callPackage ../development/python-modules/pyquery { };
 
-  pyreport = buildPythonPackage (rec {
-    name = "pyreport-0.3.4c";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyreport/${name}.tar.gz";
-      sha256 = "1584607596b7b310bf0b6ce79f424bd44238a017fd870aede11cd6732dbe0d4d";
-    };
-
-    # error: invalid command 'test'
-    doCheck = false;
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/pyreport;
-      license = "BSD";
-      description = "Pyreport makes notes out of a python script";
-    };
-  });
+  pyreport = callPackage ../development/python-modules/pyreport { };
 
   pyreadability = callPackage ../development/python-modules/pyreadability { };
 
-  pyscss = buildPythonPackage rec {
-    name = "pyScss-${version}";
-    version = "1.3.5";
-
-    src = pkgs.fetchFromGitHub {
-      sha256 = "0lfsan74vcw6dypb196gmbprvlbran8p7w6czy8hyl2b1l728mhz";
-      rev = "v1.3.5";
-      repo = "pyScss";
-      owner = "Kronuz";
-    };
-
-    checkInputs = with self; [ pytest ];
-
-    propagatedBuildInputs = with self; [ six ]
-      ++ (optionals (pythonOlder "3.4") [ enum34 pathlib ])
-      ++ (optionals (pythonOlder "2.7") [ ordereddict ]);
-
-    checkPhase = ''
-      py.test
-    '';
-
-    meta = {
-      description = "A Scss compiler for Python";
-      homepage = http://pyscss.readthedocs.org/en/latest/;
-      license = licenses.mit;
-    };
-  };
+  pyscss = callPackage ../development/python-modules/pyscss { };
 
   pyserial = callPackage ../development/python-modules/pyserial {};
 
   pymongo = callPackage ../development/python-modules/pymongo {};
 
-  pymongo_2_9_1 = buildPythonPackage rec {
-    name = "pymongo-2.9.1";
-    version = "2.9.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pymongo/${name}.tar.gz";
-      sha256 = "1nrr1fxyrlxd69bgxl7bvaj2j4z7v3zaciij5sbhxg0vqiz6ny50";
-    };
-
-    # Tests call a running mongodb instance
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/mongodb/mongo-python-driver;
-      license = licenses.asl20;
-      description = "Python driver for MongoDB ";
-    };
-  };
+  pymongo_2_9_1 = callPackage ../development/python-modules/pymongo/2_9_1.nix { };
 
   pyperclip = callPackage ../development/python-modules/pyperclip { };
 
-  pysqlite = buildPythonPackage rec {
-    name = "pysqlite-2.8.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysqlite/${name}.tar.gz";
-      sha256 = "17d3335863e8cf8392eea71add33dab3f96d060666fe68ab7382469d307f4490";
-    };
-
-    # Need to use the builtin sqlite3 on Python 3
-    disabled = isPy3k;
-
-    # Since the `.egg' file is zipped, the `NEEDED' of the `.so' files
-    # it contains is not taken into account.  Thus, we must explicitly make
-    # it a propagated input.
-    propagatedBuildInputs = with self; [ pkgs.sqlite ];
-
-    patchPhase = ''
-      substituteInPlace "setup.cfg"                                     \
-              --replace "/usr/local/include" "${pkgs.sqlite.dev}/include"   \
-              --replace "/usr/local/lib" "${pkgs.sqlite.out}/lib"
-      ${stdenv.lib.optionalString (!stdenv.isDarwin) ''export LDSHARED="$CC -pthread -shared"''}
-    '';
+  pysqlite = callPackage ../development/python-modules/pysqlite { };
 
-    meta = {
-      homepage = http://pysqlite.org/;
-      description = "Python bindings for the SQLite embedded relational database engine";
-      longDescription = ''
-        pysqlite is a DB-API 2.0-compliant database interface for SQLite.
-
-        SQLite is a relational database management system contained in
-        a relatively small C library.  It is a public domain project
-        created by D. Richard Hipp.  Unlike the usual client-server
-        paradigm, the SQLite engine is not a standalone process with
-        which the program communicates, but is linked in and thus
-        becomes an integral part of the program.  The library
-        implements most of SQL-92 standard, including transactions,
-        triggers and most of complex queries.
-
-        pysqlite makes this powerful embedded SQL engine available to
-        Python programmers.  It stays compatible with the Python
-        database API specification 2.0 as much as possible, but also
-        exposes most of SQLite's native API, so that it is for example
-        possible to create user-defined SQL functions and aggregates
-        in Python.
-      '';
-      license = licenses.bsd3;
-      maintainers = [ ];
-    };
-  };
-
-
-  pysvn = buildPythonPackage rec {
-    name = "pysvn-1.8.0";
-    format = "other";
-
-    src = pkgs.fetchurl {
-      url = "http://pysvn.barrys-emacs.org/source_kits/${name}.tar.gz";
-      sha256 = "0srjr2qgxfs69p65d9vvdib2lc142x10w8afbbdrqs7dhi46yn9r";
-    };
-
-    buildInputs = with self; [ pkgs.subversion pkgs.apr pkgs.aprutil pkgs.expat pkgs.neon pkgs.openssl ]
-      ++ (if stdenv.isLinux then [pkgs.e2fsprogs] else []);
-
-    # There seems to be no way to pass that path to configure.
-    NIX_CFLAGS_COMPILE="-I${pkgs.aprutil.dev}/include/apr-1";
-
-    preConfigure = ''
-      cd Source
-      ${python.interpreter} setup.py backport
-      ${python.interpreter} setup.py configure \
-        --apr-inc-dir=${pkgs.apr.dev}/include \
-        --apu-inc-dir=${pkgs.aprutil.dev}/include \
-        --apr-lib-dir=${pkgs.apr.out}/lib \
-        --svn-lib-dir=${pkgs.subversion.out}/lib \
-        --svn-bin-dir=${pkgs.subversion.out}/bin \
-        --svn-root-dir=${pkgs.subversion.dev}
-    '' + (if !stdenv.isDarwin then "" else ''
-      sed -i -e 's|libpython2.7.dylib|lib/libpython2.7.dylib|' Makefile
-    '');
-
-    checkPhase = "make -C ../Tests";
-
-    disabled = isPy3k;
-
-    installPhase = ''
-      dest=$(toPythonPath $out)/pysvn
-      mkdir -p $dest
-      cp pysvn/__init__.py $dest/
-      cp pysvn/_pysvn*.so $dest/
-      mkdir -p $out/share/doc
-      mv -v ../Docs $out/share/doc/pysvn-1.7.2
-      rm -v $out/share/doc/pysvn-1.7.2/generate_cpp_docs_from_html_docs.py
-    '';
-
-    meta = {
-      description = "Python bindings for Subversion";
-      homepage = "http://pysvn.tigris.org/";
-    };
-  };
+  pysvn = callPackage ../development/python-modules/pysvn { };
 
   python-ptrace = callPackage ../development/python-modules/python-ptrace { };
 
-  python-wifi = buildPythonPackage rec {
-    name = "python-wifi-${version}";
-    version = "0.6.1";
-    disabled = !isPy27;
+  python-wifi = callPackage ../development/python-modules/python-wifi { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-wifi/${name}.tar.bz2";
-      sha256 = "149c3dznb63d82143cz5hqdim0mqjysz6p3yk0zv271vq3xnmzvv";
-    };
-
-    meta = {
-      inherit version;
-      description = "Read & write wireless card capabilities using the Linux Wireless Extensions";
-      homepage = http://pythonwifi.tuxfamily.org/;
-      # From the README: "pythonwifi is licensed under LGPLv2+, however, the
-      # examples (e.g. iwconfig.py and iwlist.py) are licensed under GPLv2+."
-      license = with licenses; [ lgpl2Plus gpl2Plus ];
-    };
-  };
-
-  python-etcd = buildPythonPackage rec {
-    name = "python-etcd-${version}";
-    version = "0.4.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-etcd/${name}.tar.gz";
-      sha256 = "cf53262b3890d185fe637eed15fe39c8d7a8261864ddcd7037b22c961456d7fc";
-    };
-
-    buildInputs = with self; [ nose mock pyopenssl ];
-
-    propagatedBuildInputs = with self; [ urllib3 dnspython ];
-
-    postPatch = ''
-      sed -i '19s/dns/"dnspython"/' setup.py
-    '';
-
-    # Some issues with etcd not in path even though most tests passed
-    doCheck = false;
-
-    meta = {
-      description = "A python client for Etcd";
-      homepage = https://github.com/jplana/python-etcd;
-      license = licenses.mit;
-    };
-  };
+  python-etcd = callPackage ../development/python-modules/python-etcd { };
 
   pythonnet = callPackage ../development/python-modules/pythonnet {
     # `mono >= 4.6` required to prevent crashes encountered with earlier versions.
@@ -5384,66 +3686,9 @@ in {
 
   pytzdata = callPackage ../development/python-modules/pytzdata { };
 
-  pyutil = buildPythonPackage (rec {
-    name = "pyutil-2.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyutil/${name}.tar.gz";
-      sha256 = "1fsg9yz5mi2sb0h6c1vvcqchx56i89nbvdb5gfgv1ia3b2w5ra8c";
-    };
-
-    buildInputs = with self; [ setuptoolsDarcs setuptoolsTrial ] ++ (if doCheck then [ simplejson ] else []);
-    propagatedBuildInputs = with self; [ zbase32 argparse twisted ];
-    # Tests fail because they try to write new code into the twisted
-    # package, apparently some kind of plugin.
-    doCheck = false;
-
-    prePatch = optionalString isPyPy ''
-      grep -rl 'utf-8-with-signature-unix' ./ | xargs sed -i -e "s|utf-8-with-signature-unix|utf-8|g"
-    '';
-
-    meta = {
-      description = "Pyutil, a collection of mature utilities for Python programmers";
-
-      longDescription = ''
-        These are a few data structures, classes and functions which
-        we've needed over many years of Python programming and which
-        seem to be of general use to other Python programmers. Many of
-        the modules that have existed in pyutil over the years have
-        subsequently been obsoleted by new features added to the
-        Python language or its standard library, thus showing that
-        we're not alone in wanting tools like these.
-      '';
-
-      homepage = http://allmydata.org/trac/pyutil;
-
-      license = licenses.gpl2Plus;
-    };
-  });
-
-
-  pywebkitgtk = buildPythonPackage rec {
-    name = "pywebkitgtk-${version}";
-    version = "1.1.8";
-    format = "other";
-
-    src = pkgs.fetchurl {
-      url = "http://pywebkitgtk.googlecode.com/files/${name}.tar.bz2";
-      sha256 = "1svlwyl61rvbqbcbalkg6pbf38yjyv7qkq9sx4x35yk69lscaac2";
-    };
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = [
-      pkgs.gtk2 self.pygtk pkgs.libxml2
-      pkgs.libxslt pkgs.libsoup pkgs.webkitgtk24x-gtk2 pkgs.icu
-    ];
+  pyutil = callPackage ../development/python-modules/pyutil { };
 
-    meta = {
-      homepage = "https://code.google.com/p/pywebkitgtk/";
-      description = "Python bindings for the WebKit GTK+ port";
-      license = licenses.lgpl2Plus;
-    };
-  };
+  pywebkitgtk = callPackage ../development/python-modules/pywebkitgtk { };
 
   pywinrm = callPackage ../development/python-modules/pywinrm { };
 
@@ -5453,83 +3698,17 @@ in {
 
   pyyaml = callPackage ../development/python-modules/pyyaml { };
 
-  rabbitpy = buildPythonPackage rec {
-    version = "0.26.2";
-    name = "rabbitpy-${version}";
+  rabbitpy = callPackage ../development/python-modules/rabbitpy { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rabbitpy/${name}.tar.gz";
-      sha256 = "0pgijv7mgxc4sm7p9s716dhl600l8isisxzyg4hz7ng1sk09p1w3";
-    };
-
-    buildInputs = with self; [ mock nose ];
-
-    propagatedBuildInputs = with self; [ pamqp ];
-
-    meta = {
-      description = "A pure python, thread-safe, minimalistic and pythonic RabbitMQ client library";
-      homepage = https://pypi.python.org/pypi/rabbitpy;
-      license = licenses.bsd3;
-    };
-  };
+  rasterio = callPackage ../development/python-modules/rasterio { };
 
   radicale_infcloud = callPackage ../development/python-modules/radicale_infcloud {};
 
-  recaptcha_client = buildPythonPackage rec {
-    name = "recaptcha-client-1.0.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/recaptcha-client/${name}.tar.gz";
-      sha256 = "28c6853c1d13d365b7dc71a6b05e5ffb56471f70a850de318af50d3d7c0dea2f";
-    };
-
-    disabled = isPy35 || isPy36;
-
-    meta = {
-      description = "A CAPTCHA for Python using the reCAPTCHA service";
-      homepage = http://recaptcha.net/;
-    };
-  };
-
-  rbtools = buildPythonPackage rec {
-    name = "rbtools-0.7.2";
-
-    src = pkgs.fetchurl {
-      url = "http://downloads.reviewboard.org/releases/RBTools/0.7/RBTools-0.7.2.tar.gz";
-      sha256 = "1ng8l8cx81cz23ls7fq9wz4ijs0zbbaqh4kj0mj6plzcqcf8na4i";
-    };
-
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ six ];
-
-    checkPhase = "nosetests";
-
-    disabled = isPy3k;
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  rencode = buildPythonPackage rec {
-    name = "rencode-${version}";
-    version = "git20150810";
-    disabled = isPy33;
-
-    src = pkgs.fetchgit {
-      url = https://github.com/aresch/rencode;
-      rev = "b45e04abdca0dea36e383a8199783269f186c99e";
-      sha256 = "b4bd82852d4220e8a9493d3cfaecbc57b1325708a2d48c0f8acf262edb10dc40";
-    };
+  recaptcha_client = callPackage ../development/python-modules/recaptcha_client { };
 
-    buildInputs = with self; [ cython ];
+  rbtools = callPackage ../development/python-modules/rbtools { };
 
-    meta = {
-      homepage = https://github.com/aresch/rencode;
-      description = "Fast (basic) object serialization similar to bencode";
-      license = licenses.gpl3;
-    };
-  };
+  rencode = callPackage ../development/python-modules/rencode { };
 
   reportlab = callPackage ../development/python-modules/reportlab { };
 
@@ -5549,72 +3728,15 @@ in {
   requests-toolbelt = callPackage ../development/python-modules/requests-toolbelt { };
   requests_toolbelt = self.requests-toolbelt; # Old attr, 2017-09-26
 
-  retry_decorator = buildPythonPackage rec {
-    name = "retry_decorator-1.0.0";
-    src = pkgs.fetchurl {
-      url = mirror://pypi/r/retry_decorator/retry_decorator-1.0.0.tar.gz;
-      sha256 = "086zahyb6yn7ggpc58909c5r5h3jz321i1694l1c28bbpaxnlk88";
-    };
-    meta = {
-      homepage = https://github.com/pnpnpn/retry-decorator;
-      license = licenses.mit;
-    };
-  };
+  retry_decorator = callPackage ../development/python-modules/retry_decorator { };
 
   quandl = callPackage ../development/python-modules/quandl { };
   # alias for an older package which did not support Python 3
   Quandl = callPackage ../development/python-modules/quandl { };
 
-  qscintilla = disabledIf (isPy3k || isPyPy)
-    (buildPythonPackage rec {
-      # TODO: Qt5 support
-      name = "qscintilla-${version}";
-      version = pkgs.qscintilla.version;
-      format = "other";
-
-      src = pkgs.qscintilla.src;
-
-      buildInputs = with self; [ pkgs.xorg.lndir pyqt4.qt pyqt4 ];
-
-      preConfigure = ''
-        mkdir -p $out
-        lndir ${self.pyqt4} $out
-        rm -rf "$out/nix-support"
-        cd Python
-        ${python.executable} ./configure-old.py \
-            --destdir $out/lib/${python.libPrefix}/site-packages/PyQt4 \
-            --apidir $out/api/${python.libPrefix} \
-            -n ${pkgs.qscintilla}/include \
-            -o ${pkgs.qscintilla}/lib \
-            --sipdir $out/share/sip
-      '';
-
-      meta = with stdenv.lib; {
-        description = "A Python binding to QScintilla, Qt based text editing control";
-        license = licenses.lgpl21Plus;
-        maintainers = with maintainers; [ danbst ];
-        platforms = platforms.unix;
-      };
-    });
-
+  qscintilla = callPackage ../development/python-modules/qscintilla { };
 
-  qserve = buildPythonPackage rec {
-    name = "qserve-0.2.8";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/q/qserve/${name}.zip";
-      sha256 = "0b04b2d4d11b464ff1efd42a9ea9f8136187d59f4076f57c9ba95361d41cd7ed";
-    };
-
-    buildInputs = with self; [ ];
-
-    meta = {
-      description = "Job queue server";
-      homepage = "https://github.com/pediapress/qserve";
-      license = licenses.bsd3;
-    };
-  };
+  qserve = callPackage ../development/python-modules/qserve { };
 
   qtawesome = callPackage ../development/python-modules/qtawesome { };
 
@@ -5624,36 +3746,7 @@ in {
 
   quantities = callPackage ../development/python-modules/quantities { };
 
-  qutip = buildPythonPackage rec {
-    name = "qutip-2.2.0";
-
-    src = pkgs.fetchurl {
-      url = "https://qutip.googlecode.com/files/QuTiP-2.2.0.tar.gz";
-      sha256 = "a26a639d74b2754b3a1e329d91300e587e8c399d8a81d8f18a4a74c6d6f02ba3";
-    };
-
-    propagatedBuildInputs = with self; [ numpy scipy matplotlib pyqt4
-      cython ];
-
-    buildInputs = [ pkgs.gcc pkgs.qt4 pkgs.blas self.nose ];
-
-    meta = {
-      description = "QuTiP - Quantum Toolbox in Python";
-      longDescription = ''
-        QuTiP is open-source software for simulating the dynamics of
-        open quantum systems. The QuTiP library depends on the
-        excellent Numpy and Scipy numerical packages. In addition,
-        graphical output is provided by Matplotlib. QuTiP aims to
-        provide user-friendly and efficient numerical simulations of a
-        wide variety of Hamiltonians, including those with arbitrary
-        time-dependence, commonly found in a wide range of physics
-        applications such as quantum optics, trapped ions,
-        superconducting circuits, and quantum nanomechanical
-        resonators.
-      '';
-      homepage = http://qutip.org/;
-    };
-  };
+  qutip = callPackage ../development/python-modules/qutip { };
 
   rcssmin = callPackage ../development/python-modules/rcssmin { };
 
@@ -5665,51 +3758,11 @@ in {
 
   reikna = callPackage ../development/python-modules/reikna { };
 
-  repocheck = buildPythonPackage rec {
-    name = "repocheck-2015-08-05";
-
-    src = pkgs.fetchFromGitHub {
-      sha256 = "1jc4v5zy7z7xlfmbfzvyzkyz893f5x2k6kvb3ni3rn2df7jqhc81";
-      rev = "ee48d0e88d3f5814d24a8d1f22d5d83732824688";
-      repo = "repocheck";
-      owner = "kynikos";
-    };
-
-    meta = {
-      inherit (src.meta) homepage;
-      description = "Check the status of code repositories under a root directory";
-      license = licenses.gpl3Plus;
-    };
-  };
+  repocheck = callPackage ../development/python-modules/repocheck { };
 
   restview = callPackage ../development/python-modules/restview { };
 
-  readme = buildPythonPackage rec {
-    name = "readme-${version}";
-    version = "0.6.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/readme/readme-${version}.tar.gz";
-      sha256 = "08j2w67nilczn1i5r7h22vag9673i6vnfhyq2rv27r1bdmi5a30m";
-    };
-
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [
-      six docutils pygments bleach html5lib
-    ];
-
-    checkPhase = ''
-      py.test
-    '';
-
-    # Tests fail, possibly broken.
-    doCheck = false;
-
-    meta = with stdenv.lib; {
-      description = "Readme";
-      homepage = "https://github.com/pypa/readme";
-    };
-  };
+  readme = callPackage ../development/python-modules/readme { };
 
   readme_renderer = callPackage ../development/python-modules/readme_renderer { };
 
@@ -5721,91 +3774,21 @@ in {
 
   pysolr = callPackage ../development/python-modules/pysolr { };
 
-  django-haystack = callPackage ../development/python-modules/django-haystack { };
-
-  geoalchemy2 = buildPythonPackage rec {
-    name = "GeoAlchemy2-${version}";
-    version = "0.3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/G/GeoAlchemy2/${name}.tar.gz";
-      sha256 = "0p2h1kgl5b0jz8wadx485vjh1mmm5s67p71yxh9lhp1441hkfswf";
-    };
+  geoalchemy2 = callPackage ../development/python-modules/geoalchemy2 { };
 
-    propagatedBuildInputs = with self ; [ sqlalchemy shapely ];
+  geopy = callPackage ../development/python-modules/geopy { };
 
-    meta = {
-      homepage =  http://geoalchemy.org/;
-      license = licenses.mit;
-      description = "Toolkit for working with spatial databases";
-    };
-  };
-
-  geopy = buildPythonPackage rec {
-    name = "geopy-${version}";
-    version = "1.11.0";
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/geopy/geopy-${version}.tar.gz";
-      sha256 = "04j1lxcsfyv03h0n0q7p2ig7a4n13x4x20fzxn8bkazpx6lyal22";
-    };
-
-    doCheck = false;  # too much
-
-    buildInputs = with self; [ mock tox pylint ];
-    meta = with stdenv.lib; {
-      homepage = "https://github.com/geopy/geopy";
-    };
-  };
+  django-haystack = callPackage ../development/python-modules/django-haystack { };
 
   django-multiselectfield = callPackage ../development/python-modules/django-multiselectfield { };
 
   rdflib = callPackage ../development/python-modules/rdflib { };
 
-  isodate = buildPythonPackage rec {
-    name = "isodate-${version}";
-    version = "0.5.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/isodate/${name}.tar.gz";
-      sha256 = "42105c41d037246dc1987e36d96f3752ffd5c0c24834dd12e4fdbe1e79544e31";
-    };
-
-    # Judging from SyntaxError
-    doCheck = !(isPy3k);
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover -s src/isodate/tests
-    '';
-
-    meta = {
-      description = "ISO 8601 date/time parser";
-      homepage = http://cheeseshop.python.org/pypi/isodate;
-    };
-  };
+  isodate = callPackage ../development/python-modules/isodate { };
 
-  resampy = buildPythonPackage rec {
-    pname = "resampy";
-    version = "0.1.4";
-    name = "${pname}-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz";
-      sha256 = "cf4f149d8699af70a1b4b0769fa16fab21835d936ea7ff25e98446aa49e743d4";
-    };
-
-    checkInputs = with self; [ pytest pytestcov ];
-    # No tests included
-    doCheck = false;
-    propagatedBuildInputs = with self; [ numpy scipy cython six ];
+  owslib = callPackage ../development/python-modules/owslib { };
 
-    meta = {
-      homepage = https://github.com/bmcfee/resampy;
-      description = "Efficient signal resampling";
-      license = licenses.isc;
-    };
-  };
+  resampy = callPackage ../development/python-modules/resampy { };
 
   restructuredtext_lint = callPackage ../development/python-modules/restructuredtext_lint { };
 
@@ -5813,68 +3796,21 @@ in {
 
   robotframework = callPackage ../development/python-modules/robotframework { };
 
-  robotframework-selenium2library = buildPythonPackage rec {
-    version = "1.6.0";
-    name = "robotframework-selenium2library-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/robotframework-selenium2library/${name}.tar.gz";
-      sha256 = "1asdwrpb4s7q08bx641yrh3yicgba14n3hxmsqs58mqf86ignwly";
-    };
-
-    # error: invalid command 'test'
-    #doCheck = false;
-
-    propagatedBuildInputs = with self; [ robotframework selenium docutils decorator ];
-
-    meta = {
-      description = "";
-      homepage = http://robotframework.org/;
-      license = licenses.asl20;
-    };
-  };
+  robotframework-requests = callPackage ../development/python-modules/robotframework-requests { };
 
+  robotframework-ride = callPackage ../development/python-modules/robotframework-ride { };
 
-  robotframework-tools = buildPythonPackage rec {
-    version = "0.1a115";
-    name = "robotframework-tools-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/robotframework-tools/${name}.tar.gz";
-      sha256 = "04gkn1zpf3rsvbqdxrrjqqi8sa0md9gqwh6n5w2m03fdwjg4lc7q";
-    };
-
-    propagatedBuildInputs = with self; [ robotframework moretools pathpy six setuptools ];
+  robotframework-selenium2library = callPackage ../development/python-modules/robotframework-selenium2library { };
 
-    meta = {
-      description = "Python Tools for Robot Framework and Test Libraries";
-      homepage = https://bitbucket.org/userzimmermann/robotframework-tools;
-      license = licenses.gpl3;
-      platforms = platforms.linux;
-    };
-  };
+  robotframework-tools = callPackage ../development/python-modules/robotframework-tools { };
 
   robotsuite = callPackage ../development/python-modules/robotsuite { };
 
-  robotframework-ride = callPackage ../development/python-modules/robotframework-ride { };
-
-  robotframework-requests = buildPythonPackage rec {
-    version = "0.4.6";
-    name = "robotframework-requests-${version}";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/ad/da/51359b11d2005ff425984205677890fafaf270a71b03df22c255501bc99d/robotframework-requests-0.4.6.tar.gz";
-      sha256 = "0416rxg7g0pfg77akljnkass0xz0id26v4saag2q2h1fgwrm7n4q";
-    };
+  serpent = callPackage ../development/python-modules/serpent { };
 
-    buildInputs = with self; [ unittest2 ];
-    propagatedBuildInputs = with self; [ robotframework lxml requests ];
+  selectors34 = callPackage ../development/python-modules/selectors34 { };
 
-    meta = {
-      description = "Robot Framework keyword library wrapper around the HTTP client library requests";
-      homepage = https://github.com/bulkan/robotframework-requests;
-    };
-  };
+  Pyro4 = callPackage ../development/python-modules/pyro4 { };
 
   root_numpy = callPackage ../development/python-modules/root_numpy { };
 
@@ -5884,25 +3820,6 @@ in {
 
   ropper = callPackage ../development/python-modules/ropper { };
 
-  routes = buildPythonPackage rec {
-    pname = "Routes";
-    version = "2.4.1";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "1zamff3m0kc4vyfniyhxpkkcqv1rrgnmh37ykxv34nna1ws47vi6";
-    };
-
-    propagatedBuildInputs = with self; [ repoze_lru six webob ];
-
-    checkInputs = with self; [ coverage webtest ];
-
-    meta = {
-      description = "A Python re-implementation of the Rails routes system for mapping URLs to application actions";
-      homepage = http://routes.groovie.org/;
-    };
-  };
-
   rpkg = callPackage ../development/python-modules/rpkg {};
 
   rply = callPackage ../development/python-modules/rply {};
@@ -5913,176 +3830,20 @@ in {
 
   rpy2 = callPackage ../development/python-modules/rpy2 {};
 
-  rpyc = buildPythonPackage rec {
-    name = "rpyc-${version}";
-    version = "3.3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rpyc/${name}.tar.gz";
-      sha256 = "43fa845314f0bf442f5f5fab15bb1d1b5fe2011a8fc603f92d8022575cef8b4b";
-    };
-
-    propagatedBuildInputs = with self; [ nose plumbum ];
-
-    meta = {
-      description = "Remote Python Call (RPyC), a transparent and symmetric RPC library";
-      homepage = http://rpyc.readthedocs.org;
-      license = licenses.mit;
-    };
-  };
-
-  rsa = buildPythonPackage rec {
-    name = "rsa-${version}";
-    version = "3.4.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rsa/${name}.tar.gz";
-      sha256 = "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5";
-    };
-
-    nativeBuildInputs = with self; [ unittest2 ];
-    propagatedBuildInputs = with self; [ pyasn1 ];
-
-    meta = {
-      homepage = https://stuvel.eu/rsa;
-      license = licenses.asl20;
-      description = "A pure-Python RSA implementation";
-    };
-  };
+  rtslib = callPackage ../development/python-modules/rtslib {};
 
   Rtree = callPackage ../development/python-modules/Rtree { inherit (pkgs) libspatialindex; };
 
-  squaremap = buildPythonPackage rec {
-    name = "squaremap-1.0.4";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/S/SquareMap/SquareMap-1.0.4.tar.gz";
-      sha256 = "feab6cb3b222993df68440e34825d8a16de2c74fdb290ae3974c86b1d5f3eef8";
-    };
-
-    meta = {
-      description = "Hierarchic visualization control for wxPython";
-      homepage = https://launchpad.net/squaremap;
-      license = licenses.bsd3;
-    };
-  };
-
-  ruamel_base = buildPythonPackage rec {
-    name = "ruamel.base-${version}";
-    version = "1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/ruamel.base/${name}.tar.gz";
-      sha256 = "1wswxrn4givsm917mfl39rafgadimf1sldpbjdjws00g1wx36hf0";
-    };
-
-    meta = {
-      description = "Common routines for ruamel packages";
-      homepage = https://bitbucket.org/ruamel/base;
-      license = licenses.mit;
-    };
-  };
-
-  ruamel_ordereddict = buildPythonPackage rec {
-    name = "ruamel.ordereddict-${version}";
-    version = "0.4.9";
-    disabled = isPy3k || isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/ruamel.ordereddict/${name}.tar.gz";
-      sha256 = "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h";
-    };
-
-    meta = {
-      description = "A version of dict that keeps keys in insertion resp. sorted order";
-      homepage = https://bitbucket.org/ruamel/ordereddict;
-      license = licenses.mit;
-    };
-  };
-
   typing = callPackage ../development/python-modules/typing { };
 
   typing-extensions = callPackage ../development/python-modules/typing-extensions { };
 
   typeguard = callPackage ../development/python-modules/typeguard { };
 
-  ruamel_yaml = callPackage ../development/python-modules/ruamel_yaml { };
-
-  runsnakerun = buildPythonPackage rec {
-    name = "runsnakerun-2.0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/R/RunSnakeRun/RunSnakeRun-2.0.4.tar.gz";
-      sha256 = "61d03a13f1dcb3c1829f5a146da1fe0cc0e27947558a51e848b6d469902815ef";
-    };
-
-    propagatedBuildInputs = with self; [ squaremap wxPython ];
-
-    meta = {
-      description = "GUI Viewer for Python profiling runs";
-      homepage = http://www.vrplumber.com/programming/runsnakerun/;
-      license = licenses.bsd3;
-    };
-  };
-
   s3transfer = callPackage ../development/python-modules/s3transfer { };
 
   seqdiag = callPackage ../development/python-modules/seqdiag { };
 
-  pysendfile = buildPythonPackage rec {
-    name = "pysendfile-${version}";
-    version = "2.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pysendfile/pysendfile-${version}.tar.gz";
-      sha256 = "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji";
-    };
-
-    checkPhase = ''
-      # this test takes too long
-      sed -i 's/test_big_file/noop/' test/test_sendfile.py
-      ${self.python.executable} test/test_sendfile.py
-    '';
-
-    meta = with stdenv.lib; {
-      homepage = "https://github.com/giampaolo/pysendfile";
-    };
-  };
-
-  qpid-python = buildPythonPackage rec {
-    name = "qpid-python-${version}";
-    version = "0.32";
-    disabled = isPy3k;  # not supported
-
-    src = pkgs.fetchurl {
-      url = "http://www.us.apache.org/dist/qpid/${version}/${name}.tar.gz";
-      sha256 = "09hdfjgk8z4s3dr8ym2r6xn97j1f9mkb2743pr6zd0bnj01vhsv4";
-    };
-
-    # needs a broker running and then ./qpid-python-test
-    doCheck = false;
-
-  };
-
-  xattr = buildPythonPackage rec {
-    name = "xattr-0.7.8";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xattr/${name}.tar.gz";
-      sha256 = "0nbqfghgy26jyp5q7wl3rj78wr8s39m5042df2jlldg3fx6j0417";
-    };
-
-    # https://github.com/xattr/xattr/issues/43
-    doCheck = false;
-
-    postBuild = ''
-      ${python.interpreter} -m compileall -f xattr
-    '';
-
-    propagatedBuildInputs = [ self.cffi ];
-  };
-
   safe = callPackage ../development/python-modules/safe { };
 
   sampledata = callPackage ../development/python-modules/sampledata { };
@@ -6103,26 +3864,6 @@ in {
 
   scp = callPackage ../development/python-modules/scp {};
 
-  scripttest = buildPythonPackage rec {
-    version = "1.3";
-    name = "scripttest-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/scripttest/scripttest-${version}.tar.gz";
-      sha256 = "951cfc25219b0cd003493a565f2e621fd791beaae9f9a3bdd7024d8626419c38";
-    };
-
-    buildInputs = with self; [ pytest ];
-
-    # Tests are not included. See https://github.com/pypa/scripttest/issues/11
-    doCheck = false;
-
-    meta = {
-      description = "A library for testing interactive command-line applications";
-      homepage = https://pypi.python.org/pypi/ScriptTest/;
-    };
-  };
-
   seaborn = callPackage ../development/python-modules/seaborn { };
 
   selenium = callPackage ../development/python-modules/selenium { };
@@ -6131,729 +3872,30 @@ in {
 
   setuptools_scm = callPackage ../development/python-modules/setuptools_scm { };
 
-  setuptoolsDarcs = buildPythonPackage rec {
-    name = "setuptools_darcs-${version}";
-    version = "1.2.11";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/setuptools_darcs/${name}.tar.gz";
-      sha256 = "1wsh0g1fn10msqk87l5jrvzs0yj5mp6q9ld3gghz6zrhl9kqzdn1";
-    };
-
-    # In order to break the dependency on darcs -> ghc, we don't add
-    # darcs as a propagated build input.
-    propagatedBuildInputs = with self; [ darcsver ];
-
-    # ugly hack to specify version that should otherwise come from darcs
-    patchPhase = ''
-      substituteInPlace setup.py --replace "name=PKG" "name=PKG, version='${version}'"
-    '';
-
-    meta = {
-      description = "Setuptools plugin for the Darcs version control system";
-      homepage = http://allmydata.org/trac/setuptools_darcs;
-      license = "BSD";
-    };
-  };
-
-  setuptoolsTrial = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    pname = "setuptools_trial";
-    version = "0.6.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/${pname}/${name}.tar.gz";
-      sha256 = "14220f8f761c48ba1e2526f087195077cf54fad7098b382ce220422f0ff59b12";
-    };
-    buildInputs = with self; [ pytest virtualenv pytestrunner pytest-virtualenv ];
-    propagatedBuildInputs = with self; [ twisted pathlib2 ];
-    postPatch = ''
-      sed -i '12,$d' tests/test_main.py
-    '';
-
-    # Couldn't get tests working
-    doCheck = false;
-
-    meta = {
-      description = "Setuptools plugin that makes unit tests execute with trial instead of pyunit.";
-      homepage = "https://github.com/rutsky/setuptools-trial";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ ryansydnor nand0p ];
-      platforms   = platforms.all;
-    };
-  };
-
   shippai = callPackage ../development/python-modules/shippai {};
 
   simanneal = callPackage ../development/python-modules/simanneal { };
 
-  simplebayes = buildPythonPackage rec {
-    name = "simplebayes-${version}";
-    version = "1.5.8";
-
-    # Use GitHub instead of pypi, because it contains tests.
-    src = pkgs.fetchFromGitHub {
-      repo = "simplebayes";
-      owner = "hickeroar";
-      # NOTE: This is actually 1.5.8 but the tag is wrong!
-      rev = "1.5.7";
-      sha256 = "0mp7rvfdmpfxnka4czw3lv5kkh6gdxh6dm4r6hcln1zzfg9lxp4h";
-    };
-
-    checkInputs = [ self.nose self.mock ];
-
-    postPatch = optionalString isPy3k ''
-      sed -i -e 's/open *(\([^)]*\))/open(\1, encoding="utf-8")/' setup.py
-    '';
-
-    checkPhase = "nosetests tests/test.py";
-
-    meta = {
-      description = "Memory-based naive bayesian text classifier";
-      homepage = "https://github.com/hickeroar/simplebayes";
-      license = licenses.mit;
-      platforms = platforms.all;
-    };
-  };
-
   simplegeneric = callPackage ../development/python-modules/simplegeneric { };
 
-  shortuuid = buildPythonPackage rec {
-    name = "shortuuid-${version}";
-    version = "0.4.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/shortuuid/${name}.tar.gz";
-      sha256 = "4606dbb19124d98109c00e2cafae2df8117aec02115623e18fb2abe3f766d293";
-    };
-
-    buildInputs = with self; [pep8];
-
-    meta = {
-      description = "A generator library for concise, unambiguous and URL-safe UUIDs";
-      homepage = https://github.com/stochastic-technologies/shortuuid/;
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ zagy ];
-    };
-  };
-
-  shouldbe = buildPythonPackage rec {
-    version = "0.1.0";
-    name = "shouldbe-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/shouldbe/${name}.tar.gz";
-      sha256 = "07pchxpv1xvjbck0xy44k3a1jrvklg0wbyccn14w0i7d135d4174";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    propagatedBuildInputs = with self; [ forbiddenfruit ];
-
-    doCheck = false;  # Segmentation fault on py 3.5
-
-    meta = {
-      description = "Python Assertion Helpers inspired by Shouldly";
-      homepage =  https://pypi.python.org/pypi/shouldbe/;
-      license = licenses.mit;
-    };
-  };
+  should-dsl = callPackage ../development/python-modules/should-dsl { };
 
   simplejson = callPackage ../development/python-modules/simplejson { };
 
-  simpleparse = buildPythonPackage rec {
-    version = "2.1.1";
-    name = "simpleparse-${version}";
-
-    disabled = isPy3k || isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/S/SimpleParse/SimpleParse-${version}.tar.gz";
-      sha256 = "1n8msk71lpl3kv086xr2sv68ppgz6228575xfnbszc6p1mwr64rg";
-    };
-
-    doCheck = false;  # weird error
-
-    meta = {
-      description = "A Parser Generator for Python";
-      homepage = https://pypi.python.org/pypi/SimpleParse;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  simplekml = callPackage ../development/python-modules/simplekml { };
 
   slimit = callPackage ../development/python-modules/slimit { };
 
-  slob = buildPythonPackage rec {
-    name = "slob-unstable-2016-11-03";
-
-    disabled = !isPy3k;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "itkach";
-      repo = "slob";
-      rev = "d1ed71e4778729ecdfc2fe27ed783689a220a6cd";
-      sha256 = "1r510s4r124s121wwdm9qgap6zivlqqxrhxljz8nx0kv0cdyypi5";
-    };
-
-    propagatedBuildInputs = [ self.PyICU ];
-
-    checkPhase = "python3 -m unittest slob";
-
-    meta = {
-      homepage = https://github.com/itkach/slob/;
-      description = "Reference implementation of the slob (sorted list of blobs) format";
-      license = licenses.gpl3;
-      platforms = platforms.all;
-      maintainers = [ maintainers.rycee ];
-    };
-  };
-
-  slowaes = buildPythonPackage rec {
-    name = "slowaes-${version}";
-    version = "0.1a1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/slowaes/${name}.tar.gz";
-      sha256 = "83658ae54cc116b96f7fdb12fdd0efac3a4e8c7c7064e3fac3f4a881aa54bf09";
-    };
+  snowballstemmer = callPackage ../development/python-modules/snowballstemmer { };
 
-    disabled = isPy3k;
+  snug = callPackage ../development/python-modules/snug { };
 
-    meta = {
-      homepage = "http://code.google.com/p/slowaes/";
-      description = "AES implemented in pure python";
-      license = with licenses; [ asl20 ];
-    };
-  };
-
-  snowballstemmer = callPackage ../development/python-modules/snowballstemmer { };
+  snuggs = callPackage ../development/python-modules/snuggs { };
 
   spake2 = callPackage ../development/python-modules/spake2 { };
 
   sphfile = callPackage ../development/python-modules/sphfile { };
 
-  sqlite3dbm = buildPythonPackage rec {
-    name = "sqlite3dbm-0.1.4";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sqlite3dbm/${name}.tar.gz";
-      sha256 = "4721607e0b817b89efdba7e79cab881a03164b94777f4cf796ad5dd59a7612c5";
-    };
-
-    meta = {
-      description = "sqlite-backed dictionary";
-      homepage = https://github.com/Yelp/sqlite3dbm;
-      license = licenses.asl20;
-    };
-  };
-
-  sqlobject = buildPythonPackage rec {
-    pname = "SQLObject";
-    version = "3.3.0";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0p2dxrxh7xrv5yys09v5z95d0z40w22aq3xc01ghdidd7hr79xy9";
-    };
-
-    checkInputs = with self; [ pytest ];
-
-    propagatedBuildInputs = with self; [
-      FormEncode
-      PasteDeploy
-      paste
-      pydispatcher
-    ];
-
-    meta = {
-      description = "Object Relational Manager for providing an object interface to your database";
-      homepage = "http://www.sqlobject.org/";
-      license = licenses.lgpl21;
-    };
-  };
-
-  sqlmap = callPackage ../development/python-modules/sqlmap { };
-  pgpdump = self.buildPythonPackage rec {
-    pname = "pgpdump";
-    version = "1.5";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0s4nh8h7qsdj2yf29bspjs1zvxd4lcd11r6g11dp7fppgf2h0iqw";
-    };
-
-    # Disabling check because of: https://github.com/toofishes/python-pgpdump/issues/18
-    doCheck = false;
-
-    meta = {
-      description = "Python library for parsing PGP packets";
-      homepage = https://github.com/toofishes/python-pgpdump;
-      license = licenses.bsd3;
-    };
-  };
-
-  spambayes = callPackage ../development/python-modules/spambayes { };
-
-  shapely = callPackage ../development/python-modules/shapely { };
-
-  sharedmem = callPackage ../development/python-modules/sharedmem { };
-
-  soco = callPackage ../development/python-modules/soco { };
-
-  sopel = buildPythonPackage rec {
-    name = "sopel-6.3.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sopel/${name}.tar.gz";
-      sha256 = "1swvw7xw8n5anb8ah8jilk4vk1y30y62fkibfd9vm9fbk45d1q48";
-    };
-
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [ praw xmltodict pytz pyenchant pygeoip ];
-
-    disabled = isPyPy || isPy27;
-
-    checkPhase = ''
-    ${python.interpreter} test/*.py                                         #*/
-    '';
-    meta = {
-      description = "Simple and extensible IRC bot";
-      homepage = "http://sopel.chat";
-      license = licenses.efl20;
-      maintainers = with maintainers; [ mog ];
-    };
-  };
-
-  sounddevice = callPackage ../development/python-modules/sounddevice { };
-
-  stevedore = callPackage ../development/python-modules/stevedore {};
-
-  text-unidecode = callPackage ../development/python-modules/text-unidecode { };
-
-  Theano = callPackage ../development/python-modules/Theano rec {
-    cudaSupport = pkgs.config.cudaSupport or false;
-    cudnnSupport = cudaSupport;
-    inherit (pkgs.linuxPackages) nvidia_x11;
-  };
-
-  TheanoWithoutCuda = self.Theano.override {
-    cudaSupport = false;
-    cudnnSupport = false;
-  };
-
-  TheanoWithCuda = self.Theano.override {
-    cudaSupport = true;
-    cudnnSupport = true;
-  };
-
-  thespian = callPackage ../development/python-modules/thespian { };
-
-  tidylib = callPackage ../development/python-modules/pytidylib { };
-
-  tilestache = self.buildPythonPackage rec {
-    name = "tilestache-${version}";
-    version = "1.50.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/T/TileStache/TileStache-${version}.tar.gz";
-      sha256 = "1z1j35pz77lhhjdn69sq5rmz62b5m444507d8zjnp0in5xqaj6rj";
-    };
-
-    disabled = !isPy27;
-
-    propagatedBuildInputs = with self;
-      [ modestmaps pillow pycairo python-mapnik simplejson werkzeug ];
-
-    meta = {
-      description = "A tile server for rendered geographic data";
-      homepage = http://tilestache.org;
-      license = licenses.bsd3;
-    };
-  };
-
-  timelib = buildPythonPackage rec {
-    name = "timelib-0.2.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/timelib/${name}.zip";
-      sha256 = "49142233bdb5971d64a41e05a1f80a408a02be0dc7d9f8c99e7bdd0613ba81cb";
-    };
-
-    buildInputs = with self; [ ];
-
-    meta = {
-      description = "Parse english textual date descriptions";
-      homepage = "https://github.com/pediapress/timelib/";
-      license = licenses.zlib;
-    };
-  };
-
-  timeout-decorator = callPackage ../development/python-modules/timeout-decorator { };
-
-  pid = buildPythonPackage rec {
-    name = "pid-${version}";
-    version = "2.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pid/${name}.tar.gz";
-      sha256 = "0cylj8p25nwkdfgy4pzai21wyzmrxdqlwwbzqag9gb5qcjfdwk05";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    # No tests included
-    doCheck = false;
-
-    meta = {
-      description = "Pidfile featuring stale detection and file-locking";
-      homepage = https://github.com/trbs/pid/;
-      license = licenses.asl20;
-    };
-  };
-
-  pip2nix = buildPythonPackage rec {
-    name = "pip2nix-${version}";
-    version = "0.3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pip2nix/${name}.tar.gz";
-      sha256 = "1s76i8r4khq8y5r6g4218jg2c6qldmw5xhzymxad51ii8hafpwq6";
-    };
-
-    propagatedBuildInputs = with self; [ click configobj contexter jinja2 pytest ];
-
-    meta.broken = true;
-  };
-
-  pychef = buildPythonPackage rec {
-    name    = "PyChef-${version}";
-    version = "0.3.0";
-
-    src = pkgs.fetchurl {
-      url    = "https://pypi.python.org/packages/f9/31/17cde137e3b8ada4d7c80fd4504264f2abed329a9a8100c3622a044c485e/PyChef-0.3.0.tar.gz";
-      sha256 = "0zdz8lw545cd3a34cpib7mdwnad83gr2mrrxyj3v74h4zhwabhmg";
-    };
-
-    propagatedBuildInputs = with self; [ six requests mock unittest2 ];
-
-    # FIXME
-    doCheck = false;
-  };
-
-  pydns =
-    let
-      py3 = buildPythonPackage rec {
-        name = "${pname}-${version}";
-        pname = "py3dns";
-        version = "3.1.1a";
-
-        src = fetchPypi {
-          inherit pname version;
-          sha256 = "0z0qmx9j1ivpgg54gqqmh42ljnzxaychc5inz2gbgv0vls765smz";
-        };
-
-        preConfigure = ''
-          sed -i \
-            -e '/import DNS/d' \
-            -e 's/DNS.__version__/"${version}"/g' \
-            setup.py
-        '';
-
-        doCheck = false;
-      };
-
-      py2 = buildPythonPackage rec {
-        name = "${pname}-${version}";
-        pname = "pydns";
-        version = "2.3.6";
-
-        src = fetchPypi {
-          inherit pname version;
-          sha256 = "0qnv7i9824nb5h9psj0rwzjyprwgfiwh5s5raa9avbqazy5hv5pi";
-        };
-
-        doCheck = false;
-      };
-    in if isPy3k then py3 else py2;
-
-  python-daemon = callPackage ../development/python-modules/python-daemon { };
-
-  sympy = callPackage ../development/python-modules/sympy { };
-
-  pilkit = buildPythonPackage rec {
-    name = "pilkit-1.1.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pilkit/${name}.tar.gz";
-      sha256 = "e00585f5466654ea2cdbf7decef9862cb00e16fd363017fa7ef6623a16b0d2c7";
-    };
-
-    preConfigure = ''
-      substituteInPlace setup.py --replace 'nose==1.2.1' 'nose'
-    '';
-
-    # tests fail, see https://github.com/matthewwithanm/pilkit/issues/9
-    doCheck = false;
-
-    buildInputs = with self; [ pillow nose_progressive nose mock blessings ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  clint = buildPythonPackage rec {
-    name = "clint-0.5.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/c/clint/${name}.tar.gz";
-      sha256 = "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5";
-    };
-
-
-    LC_ALL="en_US.UTF-8";
-
-    checkPhase = ''
-      ${python.interpreter} test_clint.py
-    '';
-
-    buildInputs = with self; [ mock blessings nose nose_progressive pkgs.glibcLocales ];
-    propagatedBuildInputs = with self; [ pillow blessings args ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  argh = buildPythonPackage rec {
-    name = "argh-0.26.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/a/argh/${name}.tar.gz";
-      sha256 = "1nqham81ihffc9xmw85dz3rg3v90rw7h0dp3dy0bh3qkp4n499q6";
-    };
-
-    checkPhase = ''
-      export LANG="en_US.UTF-8"
-      py.test
-    '';
-
-    buildInputs = with self; [ pytest py mock pkgs.glibcLocales ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  nose_progressive = buildPythonPackage rec {
-    name = "nose-progressive-1.5.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose-progressive/${name}.tar.gz";
-      sha256 = "0mfbjv3dcg23q0a130670g7xpfyvgza4wxkj991xxh8w9hs43ga4";
-    };
-
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ pillow blessings ];
-
-    # fails with obscure error
-    doCheck = !isPy3k;
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  blessings = buildPythonPackage rec {
-    name = "blessings-1.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/b/blessings/${name}.tar.gz";
-      sha256 = "01rhgn2c3xjf9h1lxij9m05iwf2ba6d0vd7nic26c2gic4q73igd";
-    };
-
-    # 4 failing tests, 2to3
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-  secretstorage = callPackage ../development/python-modules/secretstorage { };
-
-  semantic = buildPythonPackage rec {
-    name = "semantic-1.0.3";
-
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [ quantities numpy ];
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/semantic/semantic-1.0.3.tar.gz";
-      sha256 = "bbc47dad03dddb1ba5895612fdfa1e43cfb3c497534976cebacd4f3684b505b4";
-    };
-
-    # strange setuptools error (can not import semantic.test)
-    doCheck = false;
-
-    meta = with pkgs.stdenv.lib; {
-      description = "Common Natural Language Processing Tasks for Python";
-      homepage = https://github.com/crm416/semantic;
-      license = licenses.mit;
-    };
-  };
-
-  sandboxlib = buildPythonPackage rec {
-    name = "sandboxlib-${version}";
-    version = "0.31";
-
-    disabled = isPy3k;
-
-    buildInputs = [ self.pbr ];
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sandboxlib/sandboxlib-0.3.1.tar.gz";
-      sha256 = "0csj8hbpylqdkxcpqkcfs73dfvdqkyj23axi8m9drqdi4dhxb41h";
-    };
-
-    meta = {
-      description = "Sandboxing Library for Python";
-      homepage = https://pypi.python.org/pypi/sandboxlib/0.3.1;
-      license = licenses.gpl2;
-    };
-  };
-
-  scales = buildPythonPackage rec {
-    name = "scales-${version}";
-    version = "1.0.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/scales/${name}.tar.gz";
-      sha256 = "8b6930f7d4bf115192290b44c757af5e254e3fcfcb75ff9a51f5c96a404e2753";
-    };
-
-    buildInputs = with self; optionals doCheck [ nose ];
-    # No tests included
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ six ];
-
-    meta = {
-      description = "Stats for Python processes";
-      homepage = https://www.github.com/Cue/scales;
-      license = licenses.asl20;
-    };
-  };
-
-  secp256k1 = callPackage ../development/python-modules/secp256k1 {
-    inherit (pkgs) secp256k1 pkgconfig;
-  };
-
-  semantic-version = callPackage ../development/python-modules/semantic-version { };
-
-  sexpdata = buildPythonPackage rec {
-    name = "sexpdata-0.0.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sexpdata/${name}.tar.gz";
-      sha256 = "eb696bc66b35def5fb356de09481447dff4e9a3ed926823134e1d0f35eade428";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "S-expression parser for Python";
-      homepage = "https://github.com/tkf/sexpdata";
-    };
-  };
-
-  sh = callPackage ../development/python-modules/sh { };
-
-  sipsimple = buildPythonPackage rec {
-    name = "sipsimple-${version}";
-    version = "3.1.1";
-    disabled = isPy3k;
-
-    src = pkgs.fetchdarcs {
-      url = http://devel.ag-projects.com/repositories/python-sipsimple;
-      rev = "release-${version}";
-      sha256 = "0jdilm11f5aahxrzrkxrfx9sgjgkbla1r0wayc5dzd2wmjrdjyrg";
-    };
-
-    preConfigure = ''
-      chmod +x ./deps/pjsip/configure ./deps/pjsip/aconfigure
-    '';
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = with pkgs; [ alsaLib ffmpeg libv4l sqlite libvpx ];
-    propagatedBuildInputs = with self; [ cython pkgs.openssl dnspython dateutil xcaplib msrplib lxml python-otr ];
-
-    meta = {
-      description = "SIP SIMPLE implementation for Python";
-      homepage = http://sipsimpleclient.org/;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ pSub ];
-    };
-  };
-
-
-  six = callPackage ../development/python-modules/six { };
-
-  smartdc = buildPythonPackage rec {
-    name = "smartdc-0.1.12";
-
-    src = pkgs.fetchurl {
-      url = mirror://pypi/s/smartdc/smartdc-0.1.12.tar.gz;
-      sha256 = "36206f4fddecae080c66faf756712537e650936b879abb23a8c428731d2415fe";
-    };
-
-    propagatedBuildInputs = with self; [ requests http_signature ];
-
-    meta = {
-      description = "Joyent SmartDataCenter CloudAPI connector using http-signature authentication via Requests";
-      homepage = https://github.com/atl/py-smartdc;
-      license = licenses.mit;
-    };
-  };
-
-  socksipy-branch = buildPythonPackage rec {
-    name = "SocksiPy-branch-1.01";
-    src = pkgs.fetchurl {
-      url = mirror://pypi/S/SocksiPy-branch/SocksiPy-branch-1.01.tar.gz;
-      sha256 = "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p";
-    };
-    meta = {
-      homepage = http://code.google.com/p/socksipy-branch/;
-      description = "This Python module allows you to create TCP connections through a SOCKS proxy without any special effort";
-      license = licenses.bsd3;
-    };
-  };
-
-  sockjs-tornado = callPackage ../development/python-modules/sockjs-tornado { };
-
-  sorl_thumbnail = buildPythonPackage rec {
-    name = "sorl-thumbnail-11.12";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sorl-thumbnail/${name}.tar.gz";
-      sha256 = "050b9kzbx7jvs3qwfxxshhis090hk128maasy8pi5wss6nx5kyw4";
-    };
-
-    # Disabled due to an improper configuration error when tested against django. This looks like something broken in the test cases for sorl.
-    doCheck = false;
-
-    meta = {
-      homepage = http://sorl-thumbnail.readthedocs.org/en/latest/;
-      description = "Thumbnails for Django";
-      license = licenses.bsd3;
-    };
-  };
-
   supervisor = callPackage ../development/python-modules/supervisor {};
 
   subprocess32 = callPackage ../development/python-modules/subprocess32 { };
@@ -6864,6 +3906,7 @@ in {
 
   sphinx_1_2 = self.sphinx.overridePythonAttrs rec {
     name = "sphinx-1.2.3";
+    version = "1.2.3";
     src = pkgs.fetchurl {
       url = "mirror://pypi/s/sphinx/sphinx-1.2.3.tar.gz";
       sha256 = "94933b64e2fe0807da0612c574a021c0dac28c7bd3c4a23723ae5a39ea8f3d04";
@@ -6877,440 +3920,28 @@ in {
 
   hieroglyph = callPackage ../development/python-modules/hieroglyph { };
 
-  sphinx_rtd_theme = buildPythonPackage (rec {
-    name = "sphinx_rtd_theme-0.2.5b2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sphinx_rtd_theme/${name}.tar.gz";
-      sha256 = "0grf16fi4g0p3dfh11b1624ic34iqkjhf5i1g6hvsh4nlm0ll00q";
-    };
-
-    meta = {
-      description = "ReadTheDocs.org theme for Sphinx";
-      homepage = https://github.com/snide/sphinx_rtd_theme/;
-      license = licenses.bsd3;
-      platforms = platforms.unix;
-    };
-  });
-
   guzzle_sphinx_theme = callPackage ../development/python-modules/guzzle_sphinx_theme { };
 
   sphinx-testing = callPackage ../development/python-modules/sphinx-testing { };
 
   sphinxcontrib-bibtex = callPackage ../development/python-modules/sphinxcontrib-bibtex {};
 
-  sphinxcontrib-blockdiag = buildPythonPackage (rec {
-    name = "${pname}-${version}";
-    pname = "sphinxcontrib-blockdiag";
-    version = "1.5.5";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/${pname}/${name}.tar.gz";
-      sha256 = "1w7q2hhpzk159wd35hlbwkh80hnglqa475blcd9vjwpkv1kgkpvw";
-    };
-
-    buildInputs = with self; [ mock sphinx-testing ];
-    propagatedBuildInputs = with self; [ sphinx blockdiag ];
-
-    # Seems to look for files in the wrong dir
-    doCheck = false;
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover -s tests
-    '';
-
-    meta = {
-      description = "Sphinx blockdiag extension";
-      homepage = "https://github.com/blockdiag/sphinxcontrib-blockdiag";
-      maintainers = with maintainers; [ nand0p ];
-      license = licenses.bsd2;
-    };
-  });
-
-  sphinxcontrib-openapi = buildPythonPackage (rec {
-    name = "sphinxcontrib-openapi-0.3.0";
-
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sphinxcontrib-openapi/${name}.tar.gz";
-      sha256 = "0fyniq37nnmhrk4j7mzvg6vfcpb624hb9x70g6mccyw4xrnhadv6";
-    };
-
-    propagatedBuildInputs = with self; [setuptools_scm pyyaml jsonschema sphinxcontrib_httpdomain];
-  });
-
-  sphinxcontrib_httpdomain = buildPythonPackage (rec {
-    name = "sphinxcontrib-httpdomain-1.5.0";
-
-    # Check is disabled due to this issue:
-    # https://bitbucket.org/pypa/setuptools/issue/137/typeerror-unorderable-types-str-nonetype
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sphinxcontrib-httpdomain/${name}.tar.gz";
-      sha256 = "0srg8lwf4m1hyhz942fcdfxh689xphndngiidb575qmfbi89gc7a";
-    };
-
-    propagatedBuildInputs = with self; [sphinx];
-
-    meta = {
-      description = "Provides a Sphinx domain for describing RESTful HTTP APIs";
-
-      homepage = https://bitbucket.org/birkenfeld/sphinx-contrib;
-
-      license = "BSD";
-    };
-  });
-
   sphinx-navtree = callPackage ../development/python-modules/sphinx-navtree {};
 
-  sphinxcontrib_newsfeed = buildPythonPackage (rec {
-    name = "sphinxcontrib-newsfeed-${version}";
-    version = "0.1.4";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sphinxcontrib-newsfeed/${name}.tar.gz";
-      sha256 = "1d7gam3mn8v4in4p16yn3v10vps7nnaz6ilw99j4klij39dqd37p";
-    };
-
-    propagatedBuildInputs = with self; [sphinx];
-
-    meta = {
-      description = "Extension for adding a simple Blog, News or Announcements section to a Sphinx website";
-      homepage = https://bitbucket.org/prometheus/sphinxcontrib-newsfeed;
-      license = licenses.bsd2;
-    };
-  });
-
-  sphinxcontrib_plantuml = buildPythonPackage (rec {
-    name = "sphinxcontrib-plantuml-0.7";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sphinxcontrib-plantuml/${name}.tar.gz";
-      sha256 = "011yprqf41dcm1824zgk2w8vi9115286pmli6apwhlrsxc6b6cwv";
-    };
-
-    # No tests included.
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [sphinx plantuml];
-
-    meta = {
-      description = "Provides a Sphinx domain for embedding UML diagram with PlantUML";
-      homepage = https://bitbucket.org/birkenfeld/sphinx-contrib;
-      license = with licenses; [ bsd2 ];
-    };
-  });
-
-  sphinxcontrib-spelling = buildPythonPackage (rec {
-    name = "${pname}-${version}";
-    pname = "sphinxcontrib-spelling";
-    version = "2.2.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/${pname}/${name}.tar.gz";
-      sha256 = "1f0fymrk4kvhqs0vj9gay4lhacxkfrlrpj4gvg0p4wjdczplxd3z";
-    };
-    propagatedBuildInputs = with self; [ sphinx pyenchant pbr ];
-    # No tests included
-    doCheck = false;
-    meta = {
-      description = "Sphinx spelling extension";
-      homepage = https://bitbucket.org/dhellmann/sphinxcontrib-spelling;
-      maintainers = with maintainers; [ nand0p ];
-      license = licenses.bsd2;
-    };
-  });
-
   sphinx-jinja = callPackage ../development/python-modules/sphinx-jinja { };
 
-  sphinx_pypi_upload = buildPythonPackage (rec {
-    name = "Sphinx-PyPI-upload-0.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/S/Sphinx-PyPI-upload/${name}.tar.gz";
-      sha256 = "5f919a47ce7a7e6028dba809de81ae1297ac192347cf6fc54efca919d4865159";
-    };
-
-    meta = {
-      description = "Setuptools command for uploading Sphinx documentation to PyPI";
-
-      homepage = https://bitbucket.org/jezdez/sphinx-pypi-upload/;
-
-      license = "BSD";
-    };
-  });
-
   splinter = callPackage ../development/python-modules/splinter { };
 
   spotipy = callPackage ../development/python-modules/spotipy { };
 
-  Pweave = buildPythonPackage (rec {
-    name = "Pweave-0.25";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/f6/2f/e9735b04747ae5ef29d64e0b215fb0e11f1c89826097ac17342efebbbb84/Pweave-0.25.tar.gz";
-      sha256 = "1isqjz66c7vxdaqfwpkspki9p4054dsfx7pznwz28ik634hnj3qw";
-    };
-
-    buildInputs = with self; [ mock pkgs.glibcLocales ];
-
-    propagatedBuildInputs = with self; [
-      matplotlib
-    ];
-
-    # fails due to trying to run CSS as test
-    doCheck = false;
-
-    meta = {
-      description = "Scientific reports with embedded python computations with reST, LaTeX or markdown";
-      homepage = http://mpastell.com/pweave/ ;
-      license = licenses.bsd3;
-    };
-  });
-
   sqlalchemy = callPackage ../development/python-modules/sqlalchemy { };
 
-  SQLAlchemy-ImageAttach = buildPythonPackage rec {
-    pname = "SQLAlchemy-ImageAttach";
-    version = "1.0.0";
-    name = "${pname}-${version}";
-
-    src = pkgs.fetchFromGitHub {
-      repo = "sqlalchemy-imageattach";
-      owner = "dahlia";
-      rev = "${version}";
-      sha256 = "0ba97pn5dh00qvxyjbr0mr3pilxqw5kb3a6jd4wwbsfcv6nngqig";
-    };
-
-    checkInputs = with self; [ pytest Wand.imagemagick webob ];
-    propagatedBuildInputs = with self; [ sqlalchemy Wand ];
-
-    checkPhase = ''
-      cd tests
-      export MAGICK_HOME="${pkgs.imagemagick.dev}"
-      export PYTHONPATH=$PYTHONPATH:../
-      py.test
-      cd ..
-    '';
-    doCheck = !isPyPy;  # failures due to sqla version mismatch
-
-    meta = {
-      homepage = https://github.com/dahlia/sqlalchemy-imageattach;
-      description = "SQLAlchemy extension for attaching images to entity objects";
-      license = licenses.mit;
-    };
-  };
-
   sqlalchemy_migrate = callPackage ../development/python-modules/sqlalchemy-migrate { };
 
-  sqlparse = buildPythonPackage rec {
-    name = "sqlparse-${version}";
-    version = "0.2.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sqlparse/${name}.tar.gz";
-      sha256 = "08dszglfhf1c4rwqinkbp4x55v0b90rgm1fxc1l4dy965imjjinl";
-    };
-
-    buildInputs = with self; [ pytest ];
-    checkPhase = ''
-      py.test
-    '';
-
-    # Package supports 3.x, but tests are clearly 2.x only.
-    doCheck = !isPy3k;
-
-    meta = {
-      description = "Non-validating SQL parser for Python";
-      longDescription = ''
-        Provides support for parsing, splitting and formatting SQL statements.
-      '';
-      homepage = https://github.com/andialbrecht/sqlparse;
-      license = licenses.bsd3;
-    };
-  };
-
   statsmodels = callPackage ../development/python-modules/statsmodels { };
 
-  python_statsd = buildPythonPackage rec {
-    name = "python-statsd-${version}";
-    version = "1.6.0";
-    disabled = isPy3k;  # next release will be py3k compatible
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-statsd/${name}.tar.gz";
-      sha256 = "3d2fc153e0d894aa9983531ef47d20d75bd4ee9fd0e46a9d82f452dde58a0a71";
-    };
-
-    buildInputs = with self; [ mock nose coverage ];
-
-    meta = {
-      description = "A client for Etsy's node-js statsd server";
-      homepage = https://github.com/WoLpH/python-statsd;
-      license = licenses.bsd3;
-    };
-  };
-
-
-  stompclient = buildPythonPackage (rec {
-    name = "stompclient-0.3.2";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/stompclient/${name}.tar.gz";
-      sha256 = "95a4e98dd0bba348714439ea11a25ee8a74acb8953f95a683924b5bf2a527e4e";
-    };
-
-    buildInputs = with self; [ mock nose ];
-
-    # XXX: Ran 0 tests in 0.217s
-
-    meta = {
-      description = "Lightweight and extensible STOMP messaging client";
-      homepage = https://bitbucket.org/hozn/stompclient;
-      license = licenses.asl20;
-    };
-  });
-
-  subdownloader = buildPythonPackage rec {
-    version = "2.0.18";
-    name = "subdownloader-${version}";
-
-    src = pkgs.fetchurl {
-      url = "https://launchpad.net/subdownloader/trunk/2.0.18/+download/subdownloader_2.0.18.orig.tar.gz";
-      sha256 = "0manlfdpb585niw23ibb8n21mindd1bazp0pnxvmdjrp2mnw97ig";
-    };
-
-    propagatedBuildInputs = with self; [ mmpython pyqt4 ];
-
-    setup = ''
-      import os
-      import sys
-
-      try:
-          if os.environ.get("NO_SETUPTOOLS"):
-              raise ImportError()
-          from setuptools import setup, Extension
-          SETUPTOOLS = True
-      except ImportError:
-          SETUPTOOLS = False
-          # Use distutils.core as a fallback.
-          # We won t be able to build the Wheel file on Windows.
-          from distutils.core import setup, Extension
-
-      with open("README") as fp:
-          long_description = fp.read()
-
-      requirements = [ ]
-
-      install_options = {
-          "name": "subdownloader",
-          "version": "2.0.18",
-          "description": "Tool for automatic download/upload subtitles for videofiles using fast hashing",
-          "long_description": long_description,
-          "url": "http://www.subdownloader.net",
-
-          "scripts": ["run.py"],
-          "packages": ["cli", "FileManagement", "gui", "languages", "modules"],
-
-      }
-      if SETUPTOOLS:
-          install_options["install_requires"] = requirements
-
-      setup(**install_options)
-    '';
-
-    postUnpack = ''
-      echo '${setup}' > $sourceRoot/setup.py
-    '';
-
-    meta = {
-      description = "Tool for automatic download/upload subtitles for videofiles using fast hashing";
-      homepage = http://www.subdownloader.net;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ ];
-    };
-  };
-
-  subunit = buildPythonPackage rec {
-    name = pkgs.subunit.name;
-    src = pkgs.subunit.src;
-
-    propagatedBuildInputs = with self; [ testtools testscenarios ];
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = [ pkgs.check pkgs.cppunit ];
-
-    patchPhase = ''
-      sed -i 's/version=VERSION/version="${pkgs.subunit.version}"/' setup.py
-    '';
-
-    meta = pkgs.subunit.meta;
-  };
-
-  sure = buildPythonPackage rec {
-    name = "sure-${version}";
-    version = "1.2.24";
-
-    LC_ALL="en_US.UTF-8";
-
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sure/${name}.tar.gz";
-      sha256 = "1lyjq0rvkbv585dppjdq90lbkm6gyvag3wgrggjzyh7cpyh5c12w";
-    };
-
-    buildInputs = with self; [ nose pkgs.glibcLocales ];
-
-    propagatedBuildInputs = with self; [ six mock ];
-
-    meta = {
-      description = "Utility belt for automated testing";
-      homepage = https://falcao.it/sure/;
-      license = licenses.gpl3Plus;
-    };
-  };
-
   structlog = callPackage ../development/python-modules/structlog { };
 
-  svgwrite = buildPythonPackage rec {
-    name = "svgwrite-${version}";
-    version = "1.1.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/svgwrite/${name}.tar.gz";
-      sha256 = "1f018813072aa4d7e95e58f133acb3f68fa7de0a0d89ec9402cc38406a0ec5b8";
-    };
-
-    buildInputs = with self; [ setuptools ];
-    propagatedBuildInputs = with self; [ pyparsing ];
-
-    meta = {
-      description = "A Python library to create SVG drawings";
-      homepage = https://bitbucket.org/mozman/svgwrite;
-      license = licenses.mit;
-    };
-  };
-
-  freezegun = buildPythonPackage rec {
-    name = "freezegun-${version}";
-    version = "0.3.8";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/freezegun/freezegun-${version}.tar.gz";
-      sha256 = "1sf38d3ibv1jhhvr52x7dhrsiyqk1hm165dfv8w8wh0fhmgxg151";
-    };
-
-    propagatedBuildInputs = with self; [
-      dateutil six
-    ];
-    buildInputs = [ self.mock self.nose ];
-
-    meta = with stdenv.lib; {
-      description = "FreezeGun: Let your Python tests travel through time";
-      homepage = "https://github.com/spulec/freezegun";
-      license = licenses.asl20;
-    };
-  };
-
   sybil = callPackage ../development/python-modules/sybil { };
 
   # legacy alias
@@ -7322,126 +3953,10 @@ in {
 
   tabulate = callPackage ../development/python-modules/tabulate { };
 
-  taskw = buildPythonPackage rec {
-    version = "1.0.3";
-    name = "taskw-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/taskw/${name}.tar.gz";
-      sha256 = "1fa7bv5996ppfbryv02lpnlhk5dra63lhlwrb1i4ifqbziqfqh5n";
-    };
-
-    patches = [ ../development/python-modules/taskw/use-template-for-taskwarrior-install-path.patch ];
-    postPatch = ''
-      substituteInPlace taskw/warrior.py \
-        --replace '@@taskwarrior@@' '${pkgs.taskwarrior}'
-    '';
-
-    # https://github.com/ralphbean/taskw/issues/98
-    doCheck = false;
-
-    buildInputs = with self; [ nose pkgs.taskwarrior tox ];
-    propagatedBuildInputs = with self; [ six dateutil pytz ];
-
-    meta = {
-      homepage =  https://github.com/ralphbean/taskw;
-      description = "Python bindings for your taskwarrior database";
-      license = licenses.gpl3Plus;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ pierron ];
-    };
-  };
-
   tempita = callPackage ../development/python-modules/tempita { };
 
   terminado = callPackage ../development/python-modules/terminado { };
 
-  terminaltables = buildPythonPackage rec {
-    name = "terminaltables-${version}";
-    version = "3.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/terminaltables/${name}.tar.gz";
-      sha256 = "f3eb0eb92e3833972ac36796293ca0906e998dc3be91fbe1f8615b331b853b81";
-    };
-
-    meta = {
-      description = "Display simple tables in terminals";
-      homepage = "https://github.com/Robpol86/terminaltables";
-      license = licenses.mit;
-    };
-  };
-
-  testscenarios = buildPythonPackage rec {
-    name = "testscenarios-${version}";
-    version = "0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/testscenarios/${name}.tar.gz";
-      sha256 = "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg";
-    };
-
-    propagatedBuildInputs = with self; [ testtools ];
-
-    meta = {
-      description = "A pyunit extension for dependency injection";
-      homepage = https://pypi.python.org/pypi/testscenarios;
-      license = licenses.asl20;
-    };
-  };
-
-  testpath = buildPythonPackage rec {
-    pname = "testpath";
-    version = "0.3";
-    name = "${pname}-${version}";
-
-    #format = "flit";
-    #src = pkgs.fetchFromGitHub {
-    #  owner = "jupyter";
-    #  repo = pname;
-    #  rev = "${version}";
-    #  sha256 = "1ghzmkrsrk9xrj42pjsq5gl7v3g2v0ji0xy0xzzxp5aizd3wrvl9";
-    #};
-    #doCheck = true;
-    #checkPhase = ''
-    #  ${python.interpreter} -m unittest discover
-    #'';
-    format = "wheel";
-    src = fetchPypi {
-      inherit pname version format;
-      sha256 = "f16b2cb3b03e1ada4fb0200b265a4446f92f3ba4b9d88ace34f51c54ab6d294e";
-    };
-
-    meta = {
-      description = "Test utilities for code working with files and commands";
-      license = licenses.mit;
-      homepage = https://github.com/jupyter/testpath;
-    };
-  };
-
-  testrepository = buildPythonPackage rec {
-    name = "testrepository-${version}";
-    version = "0.0.20";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/testrepository/${name}.tar.gz";
-      sha256 = "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m";
-    };
-
-    buildInputs = with self; [ testtools testresources ];
-    propagatedBuildInputs = with self; [ pbr subunit fixtures ];
-
-    checkPhase = ''
-      ${python.interpreter} ./testr
-    '';
-
-    meta = {
-      description = "A database of test results which can be used as part of developer workflow";
-      homepage = https://pypi.python.org/pypi/testrepository;
-      license = licenses.bsd2;
-    };
-  };
-
   testresources = callPackage ../development/python-modules/testresources { };
 
   testtools = callPackage ../development/python-modules/testtools { };
@@ -7450,26 +3965,6 @@ in {
 
   transitions = callPackage ../development/python-modules/transitions { };
 
-  python_mimeparse = buildPythonPackage rec {
-    name = "python-mimeparse-${version}";
-    version = "0.1.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-mimeparse/${name}.tar.gz";
-      sha256 = "1hyxg09kaj02ri0rmwjqi86wk4nd1akvv7n0dx77azz76wga4s9w";
-    };
-
-    # error: invalid command 'test'
-    doCheck = false;
-
-    meta = {
-      description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges";
-      homepage = https://code.google.com/p/mimeparse/;
-      license = licenses.mit;
-    };
-  };
-
-
   extras = callPackage ../development/python-modules/extras { };
 
   texttable = callPackage ../development/python-modules/texttable { };
@@ -7478,68 +3973,6 @@ in {
 
   tifffile = callPackage ../development/python-modules/tifffile { };
 
-  # Tkinter/tkinter is part of the Python standard library.
-  # The Python interpreters in Nixpkgs come without tkinter by default.
-  # To make the module available, we make it available as any other
-  # Python package.
-  tkinter = let
-    py = python.override{x11Support=true;};
-  in buildPythonPackage rec {
-    name = "tkinter-${python.version}";
-    src = py;
-    format = "other";
-
-    disabled = isPyPy;
-
-    installPhase = ''
-      # Move the tkinter module
-      mkdir -p $out/${py.sitePackages}
-      mv lib/${py.libPrefix}/lib-dynload/_tkinter* $out/${py.sitePackages}/
-    '' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
-      # Update the rpath to point to python without x11Support
-      old_rpath=$(patchelf --print-rpath $out/${py.sitePackages}/_tkinter*)
-      new_rpath=$(sed "s#${py}#${python}#g" <<< "$old_rpath" )
-      patchelf --set-rpath $new_rpath $out/${py.sitePackages}/_tkinter*
-    '';
-
-    meta = py.meta;
-  };
-
-  tlslite = buildPythonPackage rec {
-    name = "tlslite-${version}";
-    version = "0.4.8";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/tlslite/${name}.tar.gz";
-      sha256 = "1fxx6d3nw5r1hqna1h2jvqhcygn9fyshlm0gh3gp0b1ji824gd6r";
-    };
-
-    meta = {
-      description = "A pure Python implementation of SSL and TLS";
-      homepage = https://pypi.python.org/pypi/tlslite;
-      license = licenses.bsd3;
-    };
-  };
-
-  qrcode = buildPythonPackage rec {
-    name = "qrcode-${version}";
-    version = "5.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/q/qrcode/${name}.tar.gz";
-      sha256 = "0kljfrfq0c2rmxf8am57333ia41kd0snbm2rnqbdy816hgpcq5a1";
-    };
-
-    propagatedBuildInputs = with self; [ six pillow pymaging_png ];
-    checkInputs = [ self.mock ];
-
-    meta = {
-      description = "Quick Response code generation for Python";
-      homepage = "https://pypi.python.org/pypi/qrcode";
-      license = licenses.bsd3;
-    };
-  };
-
   tmdb3 = callPackage ../development/python-modules/tmdb3 { };
 
   toolz = callPackage ../development/python-modules/toolz { };
@@ -7552,239 +3985,14 @@ in {
 
   smmap2 = callPackage ../development/python-modules/smmap2 { };
 
-  traits = buildPythonPackage rec {
-    name = "traits-${version}";
-    version = "4.6.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/traits/${name}.tar.gz";
-      sha256 = "0w43qv36wnrimlh0nzzgg81315a18yza3vk494wqxf1l19g390jx";
-    };
-
-    # Use pytest because its easier to discover tests
-    buildInputs = with self; [ pytest ];
-    checkPhase = ''
-      py.test $out/${python.sitePackages}
-    '';
-
-    # Test suite is broken for 3.x on latest release
-    # https://github.com/enthought/traits/issues/187
-    # https://github.com/enthought/traits/pull/188
-    # Furthermore, some tests fail due to being in a chroot
-    doCheck = isPy33;
-
-    propagatedBuildInputs = with self; [ numpy ];
-
-    meta = {
-      description = "Explicitly typed attributes for Python";
-      homepage = https://pypi.python.org/pypi/traits;
-      license = "BSD";
-    };
-  };
-
-
   transaction = callPackage ../development/python-modules/transaction { };
 
-
-  transmissionrpc = buildPythonPackage rec {
-    name = "transmissionrpc-${version}";
-    version = "0.11";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/transmissionrpc/${name}.tar.gz";
-      sha256 = "ec43b460f9fde2faedbfa6d663ef495b3fd69df855a135eebe8f8a741c0dde60";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-
-    meta = {
-      description = "Python implementation of the Transmission bittorent client RPC protocol";
-      homepage = https://pypi.python.org/pypi/transmissionrpc/;
-      license = licenses.mit;
-    };
-  };
-
-  eggdeps  = buildPythonPackage rec {
-     name = "eggdeps-${version}";
-     version = "0.4";
-
-     src = pkgs.fetchurl {
-       url = "mirror://pypi/t/tl.eggdeps/tl.${name}.tar.gz";
-       sha256 = "a99de5e4652865224daab09b2e2574a4f7c1d0d9a267048f9836aa914a2caf3a";
-     };
-
-     # tests fail, see http://hydra.nixos.org/build/4316603/log/raw
-     doCheck = false;
-
-     propagatedBuildInputs = with self; [ zope_interface zope_testing ];
-     meta = {
-       description = "A tool which computes a dependency graph between active Python eggs";
-       homepage = http://thomas-lotze.de/en/software/eggdeps/;
-       license = licenses.zpl20;
-     };
-   };
-
   TurboCheetah = callPackage ../development/python-modules/TurboCheetah { };
 
   tweepy = callPackage ../development/python-modules/tweepy { };
 
-  twiggy = buildPythonPackage rec {
-    name = "Twiggy-${version}";
-    version = "0.4.5";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/T/Twiggy/Twiggy-0.4.5.tar.gz";
-      sha256 = "4e8f1894e5aee522db6cb245ccbfde3c5d1aa08d31330c7e3af783b0e66eec23";
-    };
-
-    doCheck = false;
-
-    meta = {
-      homepage = http://twiggy.wearpants.org;
-      # Taken from http://i.wearpants.org/blog/meet-twiggy/
-      description = "Twiggy is the first totally new design for a logger since log4j";
-      license     = licenses.bsd3;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ pierron ];
-    };
-  };
-
   twill = callPackage ../development/python-modules/twill { };
 
-  twitter = buildPythonPackage rec {
-    name = "twitter-${version}";
-    version = "1.15.0";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/t/twitter/${name}.tar.gz";
-      sha256 = "1m6b17irb9klc345k8174pni724jzy2973z2x2jg69h83hipjw2c";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "Twitter API library";
-      license     = licenses.mit;
-      maintainers = with maintainers; [ thoughtpolice ];
-    };
-  };
-
-  twitter-common-collections = buildPythonPackage rec {
-    pname   = "twitter.common.collections";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "0wf8ks6y2kalx2inzayq0w4kh3kg25daik1ac7r6y79i03fslsc5";
-    };
-
-    propagatedBuildInputs = with self; [ twitter-common-lang ];
-
-    meta = {
-      description = "Twitter's common collections";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
-  twitter-common-confluence = buildPythonPackage rec {
-    pname   = "twitter.common.confluence";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "1i2fjn23cmms81f1fhvvkg6hgzqpw07dlqg3ydz6cqv2glw7zq26";
-    };
-
-    propagatedBuildInputs = with self; [ twitter-common-log ];
-
-    meta = {
-      description = "Twitter's API to the confluence wiki";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
-  twitter-common-dirutil = buildPythonPackage rec {
-    pname   = "twitter.common.dirutil";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "1wpjfmmxsdwnbx5dl13is4zkkpfcm94ksbzas9y2qhgswfa9jqha";
-    };
-
-    propagatedBuildInputs = with self; [ twitter-common-lang ];
-
-    meta = {
-      description = "Utilities for manipulating and finding files and directories";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
-  twitter-common-lang = buildPythonPackage rec {
-    pname   = "twitter.common.lang";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "1l8fmnsrx7hgg3ivslg588rnl9n1gfjn2w6224fr8rs7zmkd5lan";
-    };
-
-    meta = {
-      description = "Twitter's 2.x / 3.x compatibility swiss-army knife";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
-  twitter-common-log = buildPythonPackage rec {
-    pname   = "twitter.common.log";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "1bdzbxx2bxwpf57xaxfz1nblzgfvhlidz8xqd7s84c62r3prh02v";
-    };
-
-    propagatedBuildInputs = with self; [ twitter-common-options twitter-common-dirutil ];
-
-    meta = {
-      description = "Twitter's common logging library";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
-  twitter-common-options = buildPythonPackage rec {
-    pname   = "twitter.common.options";
-    version = "0.3.9";
-    name    = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "0d1czag5mcxg0vcnlklspl2dvdab9kmznsycj04d3vggi158ljrd";
-    };
-
-    meta = {
-      description = "Twitter's optparse wrapper";
-      homepage    = "https://twitter.github.io/commons/";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
-
   twine = callPackage ../development/python-modules/twine { };
 
   twisted = callPackage ../development/python-modules/twisted { };
@@ -7797,163 +4005,14 @@ in {
 
   ua-parser = callPackage ../development/python-modules/ua-parser { };
 
-  ukpostcodeparser = callPackage ../development/python-modules/ukpostcodeparser { };
-
-  umalqurra = buildPythonPackage rec {
-    name = "umalqurra-${version}";
-    version = "0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/umalqurra/umalqurra-0.2.tar.gz";
-      sha256 = "719f6a36f908ada1c29dae0d934dd0f1e1f6e3305784edbec23ad719397de678";
-    };
-
-    # No tests included
-    doCheck = false;
-
-    # See for license
-    # https://github.com/tytkal/python-hijiri-ummalqura/issues/4
-    meta = {
-      description = "Date Api that support Hijri Umalqurra calendar";
-      homepage = https://github.com/tytkal/python-hijiri-ummalqura;
-      license = with licenses; [ publicDomain ];
-    };
+  uarray = callPackage ../development/python-modules/uarray { };
 
-  };
+  ukpostcodeparser = callPackage ../development/python-modules/ukpostcodeparser { };
 
   umemcache = callPackage ../development/python-modules/umemcache {};
 
-  unicodecsv = buildPythonPackage rec {
-    version = "0.14.1";
-    name = "unicodecsv-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/unicodecsv/${name}.tar.gz";
-      sha256 = "1z7pdwkr6lpsa7xbyvaly7pq3akflbnz8gq62829lr28gl1hi301";
-    };
-
-    # ImportError: No module named runtests
-    doCheck = false;
-
-    meta = {
-      description = "Drop-in replacement for Python2's stdlib csv module, with unicode support";
-      homepage = https://github.com/jdunck/python-unicodecsv;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
-
-  unittest2 = buildPythonPackage rec {
-    version = "1.1.0";
-    name = "unittest2-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/unittest2/unittest2-${version}.tar.gz";
-      sha256 = "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212";
-    };
-
-    # # 1.0.0 and up create a circle dependency with traceback2/pbr
-    doCheck = false;
-
-    postPatch = ''
-      # argparse is needed for python < 2.7, which we do not support anymore.
-      substituteInPlace setup.py --replace "argparse" ""
-
-      # # fixes a transient error when collecting tests, see https://bugs.launchpad.net/python-neutronclient/+bug/1508547
-      sed -i '510i\        return None, False' unittest2/loader.py
-      # https://github.com/pypa/packaging/pull/36
-      sed -i 's/version=VERSION/version=str(VERSION)/' setup.py
-    '';
-
-    propagatedBuildInputs = with self; [ six traceback2 ];
-
-    meta = {
-      description = "A backport of the new features added to the unittest testing framework";
-      homepage = https://pypi.python.org/pypi/unittest2;
-    };
-  };
-
-    unittest-xml-reporting = callPackage ../development/python-modules/unittest-xml-reporting { };
-
-    uritemplate_py = buildPythonPackage rec {
-    name = "uritemplate.py-${version}";
-    version = "3.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/uritemplate.py/${name}.tar.gz";
-      sha256 = "1k5zvc5fyyrgv33mi3p86a9jn5n0pqffs9cviz92fw6q1kf7zvmr";
-    };
-
-    meta = with stdenv.lib; {
-      homepage = https://github.com/uri-templates/uritemplate-py;
-      description = "Python implementation of URI Template";
-      license = licenses.asl20;
-      maintainers = with maintainers; [ pSub ];
-    };
-  };
-
   uritools = callPackage ../development/python-modules/uritools { };
 
-  traceback2 = buildPythonPackage rec {
-    version = "1.4.0";
-    name = "traceback2-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/traceback2/traceback2-${version}.tar.gz";
-      sha256 = "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05";
-    };
-
-    propagatedBuildInputs = with self; [ pbr linecache2 ];
-    # circular dependencies for tests
-    doCheck = false;
-
-    meta = {
-      description = "A backport of traceback to older supported Pythons";
-      homepage = https://pypi.python.org/pypi/traceback2/;
-    };
-  };
-
-  linecache2 = buildPythonPackage rec {
-    name = "linecache2-${version}";
-    version = "1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/linecache2/${name}.tar.gz";
-      sha256 = "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb";
-    };
-
-    buildInputs = with self; [ pbr ];
-    # circular dependencies for tests
-    doCheck = false;
-
-    meta = with stdenv.lib; {
-      description = "A backport of linecache to older supported Pythons";
-      homepage = "https://github.com/testing-cabal/linecache2";
-    };
-  };
-
-  upass = buildPythonPackage rec {
-    version = "0.1.4";
-    name = "upass-${version}";
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/Kwpolska/upass/archive/v${version}.tar.gz";
-      sha256 = "0f2lyi7xhvb60pvzx82dpc13ksdj5k92ww09czclkdz8k0dxa7hb";
-    };
-
-    propagatedBuildInputs = with self; [
-      pyperclip
-      urwid
-    ];
-
-    doCheck = false;
-
-    meta = {
-      description = "Console UI for pass";
-      homepage = https://github.com/Kwpolska/upass;
-      license = licenses.bsd3;
-    };
-  };
-
   update_checker = callPackage ../development/python-modules/update_checker {};
 
   uritemplate = callPackage ../development/python-modules/uritemplate { };
@@ -7962,70 +4021,12 @@ in {
 
   uproot-methods = callPackage ../development/python-modules/uproot-methods { };
 
-  uptime = buildPythonPackage rec {
-    name = "uptime-${version}";
-    version = "3.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/uptime/${name}.tar.gz";
-      sha256 = "0wr9jkixprlywz0plyn5p42a5fd31aiwvjrxdvj7r02vfxa04c3w";
-    };
-
-    meta = with stdenv.lib; {
-      homepage = https://github.com/Cairnarvon/uptime;
-      description = "Cross-platform way to retrieve system uptime and boot time";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ rob ];
-    };
-  };
-
   urlgrabber = callPackage ../development/python-modules/urlgrabber {};
 
   urwid = callPackage ../development/python-modules/urwid {};
 
-  urwidtrees = buildPythonPackage rec {
-    name = "urwidtrees-${rev}";
-    rev = "1.0";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "pazz";
-      repo = "urwidtrees";
-      inherit rev;
-      sha256 = "03gpcdi45z2idy1fd9zv8v9naivmpfx65hshm8r984k9wklv1dsa";
-    };
-
-    propagatedBuildInputs = with self; [ urwid ];
-
-    meta = {
-      description = "Tree widgets for urwid";
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ ];
-    };
-  };
-
   user-agents = callPackage ../development/python-modules/user-agents { };
 
-  pyuv = buildPythonPackage rec {
-    name = "pyuv-1.2.0";
-    disabled = isPyPy;  # see https://github.com/saghul/pyuv/issues/49
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/saghul/pyuv/archive/${name}.tar.gz";
-      sha256 = "19yl1l5l6dq1xr8xcv6dhx1avm350nr4v2358iggcx4ma631rycx";
-    };
-
-    patches = [ ../development/python-modules/pyuv-external-libuv.patch ];
-
-    buildInputs = with self; [ pkgs.libuv ];
-
-    meta = {
-      description = "Python interface for libuv";
-      homepage = https://github.com/saghul/pyuv;
-      repositories.git = git://github.com/saghul/pyuv.git;
-      license = licenses.mit;
-    };
-  };
-
   vega_datasets = callPackage ../development/python-modules/vega_datasets { };
 
   virtkey = callPackage ../development/python-modules/virtkey { };
@@ -8034,159 +4035,6 @@ in {
 
   virtualenv = callPackage ../development/python-modules/virtualenv { };
 
-  virtualenv-clone = buildPythonPackage rec {
-    name = "virtualenv-clone-0.2.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/virtualenv-clone/${name}.tar.gz";
-      sha256 = "7087ba4eb48acfd5209a3fd03e15d072f28742619127c98333057e32748d91c4";
-    };
-
-    buildInputs = with self; [pytest];
-    propagatedBuildInputs = with self; [virtualenv];
-
-    # needs tox to run the tests
-    doCheck = false;
-
-    meta = {
-      description = "Script to clone virtualenvs";
-      license = licenses.mit;
-      platforms = platforms.all;
-    };
-  };
-
-  virtualenvwrapper = buildPythonPackage (rec {
-    name = "virtualenvwrapper-4.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/virtualenvwrapper/${name}.tar.gz";
-      sha256 = "514cbc22218347bf7b54bdbe49e1a5f550d2d53b1ad2491c10e91ddf48fb528f";
-    };
-
-    # pip depend on $HOME setting
-    preConfigure = "export HOME=$TMPDIR";
-
-    buildInputs = with self; [ pbr pip pkgs.which ];
-    propagatedBuildInputs = with self; [
-      stevedore
-      virtualenv
-      virtualenv-clone
-    ];
-
-    postPatch = ''
-      for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do
-        substituteInPlace "$file" --replace "which" "${pkgs.which}/bin/which"
-
-        # We can't set PYTHONPATH in a normal way (like exporting in a wrapper
-        # script) because the user has to evaluate the script and we don't want
-        # modify the global PYTHONPATH which would affect the user's
-        # environment.
-        # Furthermore it isn't possible to just use VIRTUALENVWRAPPER_PYTHON
-        # for this workaround, because this variable is well quoted inside the
-        # shell script.
-        # (the trailing " -" is required to only replace things like these one:
-        # "$VIRTUALENVWRAPPER_PYTHON" -c "import os,[...] and not in
-        # if-statements or anything like that.
-        # ...and yes, this "patch" is hacky :)
-        substituteInPlace "$file" --replace '"$VIRTUALENVWRAPPER_PYTHON" -' 'env PYTHONPATH="$VIRTUALENVWRAPPER_PYTHONPATH" "$VIRTUALENVWRAPPER_PYTHON" -'
-      done
-    '';
-
-    postInstall = ''
-      # This might look like a dirty hack but we can't use the makeWrapper function because
-      # the wrapped file were then called via "exec". The virtualenvwrapper shell scripts
-      # aren't normal executables. Instead, the user has to evaluate them.
-
-      for file in "virtualenvwrapper.sh" "virtualenvwrapper_lazy.sh"; do
-        local wrapper="$out/bin/$file"
-        local wrapped="$out/bin/.$file-wrapped"
-        mv "$wrapper" "$wrapped"
-
-        # WARNING: Don't indent the lines below because that would break EOF
-        cat > "$wrapper" << EOF
-export PATH="${python}/bin:\$PATH"
-export VIRTUALENVWRAPPER_PYTHONPATH="$PYTHONPATH:$(toPythonPath $out)"
-source "$wrapped"
-EOF
-
-        chmod -x "$wrapped"
-        chmod +x "$wrapper"
-      done
-    '';
-
-    meta = {
-      description = "Enhancements to virtualenv";
-      homepage = "https://pypi.python.org/pypi/virtualenvwrapper";
-      license = licenses.mit;
-    };
-  });
-
-  vmprof = buildPythonPackage rec {
-    version = "0.3.3";
-    name = "vmprof-${version}";
-
-    # Url using old scheme doesn't seem to work
-    src = pkgs.fetchurl {
-      url = "https://files.pythonhosted.org/packages/c3/f3/f039ca77e727c5c2d3e61967a2a5c9ecc0ef6ca235012fd5559febb77cd0/vmprof-0.3.3.tar.gz";
-      sha256 = "991bc2f1dc824c63e9b399f9e8606deded92a52378d0e449f258807d7556b039";
-    };
-
-    propagatedBuildInputs = with self; [ requests six];
-
-    # No tests included
-    doCheck = false;
-
-    meta = {
-      description = "A vmprof client";
-      license = licenses.mit;
-      homepage = https://vmprof.readthedocs.org/;
-    };
-
-  };
-
-  vultr = buildPythonPackage rec {
-    version = "0.1.2";
-    name = "vultr-${version}";
-
-    src = pkgs.fetchFromGitHub {
-        owner = "spry-group";
-        repo = "python-vultr";
-        rev = "${version}";
-        sha256 = "1qjvvr2v9gfnwskdl0ayazpcmiyw9zlgnijnhgq9mcri5gq9jw5h";
-    };
-
-    propagatedBuildInputs = with self; [ requests ];
-
-    # Tests disabled. They fail because they try to access the network
-    doCheck = false;
-
-    meta = {
-      description = "Vultr.com API Client";
-      homepage = "https://github.com/spry-group/python-vultr";
-      license = licenses.mit;
-      maintainers = with maintainers; [ lihop ];
-      platforms = platforms.all;
-    };
-  };
-
-  waitress = buildPythonPackage rec {
-    name = "waitress-1.0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/waitress/${name}.tar.gz";
-      sha256 = "0pw6yyxi348r2xpq3ykqnf7gwi881azv2422d2ixb0xi5jws2ky7";
-    };
-
-    doCheck = false;
-
-    meta = {
-       maintainers = with maintainers; [ garbas domenkozar ];
-       platforms = platforms.all;
-    };
-  };
-
-  waitress-django = callPackage ../development/python-modules/waitress-django { };
-
   webassets = callPackage ../development/python-modules/webassets { };
 
   webcolors = callPackage ../development/python-modules/webcolors { };
@@ -8201,99 +4049,6 @@ EOF
 
   wcwidth = callPackage ../development/python-modules/wcwidth { };
 
-  web = buildPythonPackage rec {
-    version = "0.37";
-    name = "web.py-${version}";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/web.py/web.py-${version}.tar.gz";
-      sha256 = "748c7e99ad9e36f62ea19f7965eb7dd7860b530e8f563ed60ce3e53e7409a550";
-    };
-
-    meta = {
-      description = "Makes web apps";
-      longDescription = ''
-        Think about the ideal way to write a web app.
-        Write the code to make it happen.
-      '';
-      homepage = "http://webpy.org/";
-      license = licenses.publicDomain;
-      maintainers = with maintainers; [ layus ];
-    };
-  };
-
-  webob = buildPythonPackage rec {
-    pname = "WebOb";
-    version = "1.7.3";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "10vjp2rvqiyvw157fk3sy7yds1gknzw97z4gk0qv1raskx5s2p76";
-    };
-
-    propagatedBuildInputs = with self; [ nose pytest ];
-
-    meta = {
-      description = "WSGI request and response object";
-      homepage = http://pythonpaste.org/webob/;
-      platforms = platforms.all;
-    };
-  };
-
-
-  websockify = buildPythonPackage rec {
-    version = "0.7.0";
-    name = "websockify-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/websockify/websockify-${version}.tar.gz";
-      sha256 = "1v6pmamjprv2x55fvbdaml26ppxdw8v6xz8p0sav3368ajwwgcqc";
-    };
-
-    propagatedBuildInputs = with self; [ numpy ];
-
-    meta = {
-      description = "WebSockets support for any application/server";
-      homepage = https://github.com/kanaka/websockify;
-    };
-  };
-
-
-  webtest = buildPythonPackage rec {
-    version = "2.0.20";
-    name = "webtest-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/WebTest/WebTest-${version}.tar.gz";
-      sha256 = "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv";
-    };
-
-    preConfigure = ''
-      substituteInPlace setup.py --replace "nose<1.3.0" "nose"
-    '';
-
-    propagatedBuildInputs = with self; [
-      nose
-      webob
-      six
-      beautifulsoup4
-      waitress
-      mock
-      pyquery
-      wsgiproxy2
-      PasteDeploy
-      coverage
-    ];
-
-    meta = {
-      description = "Helper to test WSGI applications";
-      homepage = http://webtest.readthedocs.org/en/latest/;
-      platforms = platforms.all;
-    };
-  };
-
   werkzeug = callPackage ../development/python-modules/werkzeug { };
 
   wheel = callPackage ../development/python-modules/wheel { };
@@ -8304,24 +4059,9 @@ EOF
 
   magic-wormhole = callPackage ../development/python-modules/magic-wormhole { };
 
-  magic-wormhole-transit-relay = callPackage ../development/python-modules/magic-wormhole-transit-relay { };
-
-  wsgiproxy2 = buildPythonPackage rec {
-    name = "WSGIProxy2-0.4.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/WSGIProxy2/${name}.zip";
-      sha256 = "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4";
-    };
-
-    # circular dep on webtest
-    doCheck = false;
-    propagatedBuildInputs = with self; [ six webob ];
+  magic-wormhole-mailbox-server = callPackage ../development/python-modules/magic-wormhole-mailbox-server { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-    };
-  };
+  magic-wormhole-transit-relay = callPackage ../development/python-modules/magic-wormhole-transit-relay { };
 
   wxPython = self.wxPython30;
 
@@ -8329,46 +4069,6 @@ EOF
     wxGTK = pkgs.wxGTK30;
   };
 
-  xcaplib = buildPythonPackage rec {
-    pname = "python-xcaplib";
-    name = "${pname}-${version}";
-    version = "1.2.0";
-    disabled = isPy3k;
-
-    src = pkgs.fetchdarcs {
-      url = "http://devel.ag-projects.com/repositories/${pname}";
-      rev = "release-${version}";
-      sha256 = "0vna5r4ihv7z1yx6r93954jqskcxky77znzy1m9dg9vna1dgwfdn";
-    };
-
-    propagatedBuildInputs = with self; [ eventlib application ];
-  };
-
-  xlib = buildPythonPackage (rec {
-    name = "xlib-${version}";
-    version = "0.17";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "python-xlib";
-      repo = "python-xlib";
-      rev = "${version}";
-      sha256 = "1iiz2nq2hq9x6laavngvfngnmxbgnwh54wdbq6ncx4va7v98liyi";
-    };
-
-    # Tests require `pyutil' so disable them to avoid circular references.
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ six setuptools_scm pkgs.xorg.libX11 ];
-
-    meta = {
-      description = "Fully functional X client library for Python programs";
-
-      homepage = http://python-xlib.sourceforge.net/;
-
-      license = licenses.gpl2Plus;
-    };
-  });
-
   xml2rfc = callPackage ../development/python-modules/xml2rfc { };
 
   xmltodict = callPackage ../development/python-modules/xmltodict { };
@@ -8384,85 +4084,10 @@ EOF
     phantomjsSupport = false;
   };
 
-  zbase32 = buildPythonPackage (rec {
-    name = "zbase32-1.1.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zbase32/${name}.tar.gz";
-      sha256 = "2f44b338f750bd37b56e7887591bf2f1965bfa79f163b6afcbccf28da642ec56";
-    };
-
-    # Tests require `pyutil' so disable them to avoid circular references.
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ setuptoolsDarcs ];
-
-    meta = {
-      description = "zbase32, a base32 encoder/decoder";
-      homepage = https://pypi.python.org/pypi/zbase32;
-      license = "BSD";
-    };
-  });
-
-
   zconfig = callPackage ../development/python-modules/zconfig { };
 
-
   zc_lockfile = callPackage ../development/python-modules/zc_lockfile { };
 
-  zdaemon = buildPythonPackage rec {
-    name = "zdaemon-${version}";
-    version = "4.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zdaemon/${name}.tar.gz";
-      sha256 = "82d7eaa4d831ff1ecdcffcb274f3457e095c0cc86e630bc72009a863c341ab9f";
-    };
-
-    propagatedBuildInputs = [ self.zconfig ];
-
-    # too many deps..
-    doCheck = false;
-
-    meta = {
-      description = "A daemon process control library and tools for Unix-based systems";
-      homepage = https://pypi.python.org/pypi/zdaemon;
-      license = licenses.zpl20;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
-
-
-  zfec = buildPythonPackage (rec {
-    name = "zfec-1.4.24";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zfec/${name}.tar.gz";
-      sha256 = "1ks94zlpy7n8sb8380gf90gx85qy0p9073wi1wngg6mccxp9xsg3";
-    };
-
-    buildInputs = with self; [ setuptoolsDarcs ];
-    propagatedBuildInputs = with self; [ pyutil argparse ];
-
-    meta = {
-      homepage = http://allmydata.org/trac/zfec;
-
-      description = "Zfec, a fast erasure codec which can be used with the command-line, C, Python, or Haskell";
-
-      longDescription = ''
-        Fast, portable, programmable erasure coding a.k.a. "forward
-        error correction": the generation of redundant blocks of
-        information such that if some blocks are lost then the
-        original data can be recovered from the remaining blocks. The
-        zfec package includes command-line tools, C API, Python API,
-        and Haskell API.
-      '';
-
-      license = licenses.gpl2Plus;
-    };
-  });
-
   zipstream = callPackage ../development/python-modules/zipstream { };
 
   zodb = callPackage ../development/python-modules/zodb {};
@@ -8477,747 +4102,401 @@ EOF
 
   zetup = callPackage ../development/python-modules/zetup { };
 
-  zope_broken = buildPythonPackage rec {
-    name = "zope.broken-3.6.0";
+  routes = callPackage ../development/python-modules/routes { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.broken/${name}.zip";
-      sha256 = "b9b8776002da4f7b6b12dfcce77eb642ae62b39586dbf60e1d9bdc992c9f2999";
-    };
+  rpyc = callPackage ../development/python-modules/rpyc { };
 
-    buildInputs = with self; [ zope_interface ];
+  rsa = callPackage ../development/python-modules/rsa { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  squaremap = callPackage ../development/python-modules/squaremap { };
 
+  ruamel_base = callPackage ../development/python-modules/ruamel_base { };
 
-  zope_component = buildPythonPackage rec {
-    name = "zope.component-4.2.1";
+  ruamel_ordereddict = callPackage ../development/python-modules/ruamel_ordereddict { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.component/zope.component-4.2.1.tar.gz";
-      sha256 = "1gzbr0j6c2h0cqnpi2cjss38wrz1bcwx8xahl3vykgz5laid15l6";
-    };
-
-    propagatedBuildInputs = with self; [
-      zope_configuration zope_event zope_i18nmessageid zope_interface
-      zope_testing
-    ];
-
-    # ignore tests because of a circular dependency on zope_security
-    doCheck = false;
-
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  ruamel_yaml = callPackage ../development/python-modules/ruamel_yaml { };
 
+  runsnakerun = callPackage ../development/python-modules/runsnakerun { };
 
-  zope_configuration = buildPythonPackage rec {
-    name = "zope.configuration-4.0.3";
+  pysendfile = callPackage ../development/python-modules/pysendfile { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.configuration/zope.configuration-4.0.3.tar.gz";
-      sha256 = "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n";
-    };
+  qpid-python = callPackage ../development/python-modules/qpid-python { };
 
-    propagatedBuildInputs = with self; [ zope_i18nmessageid zope_schema ];
+  xattr = callPackage ../development/python-modules/xattr { };
 
-    # Trouble with implicit namespace packages on Python3
-    # see https://github.com/pypa/setuptools/issues/912
-    doCheck = !isPy3k;
+  scripttest = callPackage ../development/python-modules/scripttest { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  setuptoolsDarcs = callPackage ../development/python-modules/setuptoolsdarcs { };
 
+  setuptoolsTrial = callPackage ../development/python-modules/setuptoolstrial { };
 
-  zope_contenttype = buildPythonPackage rec {
-    name = "zope.contenttype-4.0.1";
+  simplebayes = callPackage ../development/python-modules/simplebayes { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.contenttype/${name}.tar.gz";
-      sha256 = "9decc7531ad6925057f1a667ac0ef9d658577a92b0b48dafa7daa97b78a02bbb";
-    };
+  shortuuid = callPackage ../development/python-modules/shortuuid { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  shouldbe = callPackage ../development/python-modules/shouldbe { };
 
+  simpleparse = callPackage ../development/python-modules/simpleparse { };
 
-  zope_dottedname = buildPythonPackage rec {
-    name = "zope.dottedname-3.4.6";
+  slob = callPackage ../development/python-modules/slob { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.dottedname/${name}.tar.gz";
-      sha256 = "331d801d98e539fa6c5d50c3835ecc144c429667f483281505de53fc771e6bf5";
-    };
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  slowaes = callPackage ../development/python-modules/slowaes { };
 
+  sqlite3dbm = callPackage ../development/python-modules/sqlite3dbm { };
 
-  zope_event = buildPythonPackage rec {
-    name = "zope.event-${version}";
-    version = "4.0.3";
+  sqlobject = callPackage ../development/python-modules/sqlobject { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.event/${name}.tar.gz";
-      sha256 = "1w858k9kmgzfj36h65kp27m9slrmykvi5cjq6c119xqnaz5gdzgm";
-    };
+  sqlmap = callPackage ../development/python-modules/sqlmap { };
 
-    meta = {
-      description = "An event publishing system";
-      homepage = https://pypi.python.org/pypi/zope.event;
-      license = licenses.zpl20;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  pgpdump = callPackage ../development/python-modules/pgpdump { };
 
+  spambayes = callPackage ../development/python-modules/spambayes { };
 
-  zope_exceptions = buildPythonPackage rec {
-     name = "zope.exceptions-${version}";
-     version = "4.0.8";
+  shapely = callPackage ../development/python-modules/shapely { };
 
-     src = pkgs.fetchurl {
-       url = "mirror://pypi/z/zope.exceptions/${name}.tar.gz";
-       sha256 = "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl";
-     };
+  sharedmem = callPackage ../development/python-modules/sharedmem { };
 
-     propagatedBuildInputs = with self; [ zope_interface ];
+  soco = callPackage ../development/python-modules/soco { };
 
-     # circular deps
-     doCheck = false;
+  sopel = callPackage ../development/python-modules/sopel { };
 
-     meta = {
-       description = "Exception interfaces and implementations";
-       homepage = https://pypi.python.org/pypi/zope.exceptions;
-       license = licenses.zpl20;
-       maintainers = with maintainers; [ goibhniu ];
-     };
-   };
+  sounddevice = callPackage ../development/python-modules/sounddevice { };
 
+  stevedore = callPackage ../development/python-modules/stevedore {};
 
-  zope_filerepresentation = buildPythonPackage rec {
-    name = "zope.filerepresentation-3.6.1";
+  text-unidecode = callPackage ../development/python-modules/text-unidecode { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.filerepresentation/${name}.tar.gz";
-      sha256 = "d775ebba4aff7687e0381f050ebda4e48ce50900c1438f3f7e901220634ed3e0";
-    };
+  Theano = callPackage ../development/python-modules/Theano rec {
+    cudaSupport = pkgs.config.cudaSupport or false;
+    cudnnSupport = cudaSupport;
+    inherit (pkgs.linuxPackages) nvidia_x11;
+  };
 
-    propagatedBuildInputs = with self; [ zope_schema ];
+  TheanoWithoutCuda = self.Theano.override {
+    cudaSupport = false;
+    cudnnSupport = false;
+  };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
+  TheanoWithCuda = self.Theano.override {
+    cudaSupport = true;
+    cudnnSupport = true;
   };
 
+  thespian = callPackage ../development/python-modules/thespian { };
 
-  zope_i18n = buildPythonPackage rec {
-    name = "zope.i18n-3.8.0";
+  tidylib = callPackage ../development/python-modules/pytidylib { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.i18n/${name}.tar.gz";
-      sha256 = "045nnimmshibcq71yym2d8yrs6wzzhxq5gl7wxjnkpyjm5y0hfkm";
-    };
+  tilestache = callPackage ../development/python-modules/tilestache { };
 
-    propagatedBuildInputs = with self; [ pytz zope_component ];
+  timelib = callPackage ../development/python-modules/timelib { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  timeout-decorator = callPackage ../development/python-modules/timeout-decorator { };
 
+  pid = callPackage ../development/python-modules/pid { };
 
-  zope_i18nmessageid = buildPythonPackage rec {
-    name = "zope.i18nmessageid-4.0.3";
+  pip2nix = callPackage ../development/python-modules/pip2nix { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.i18nmessageid/zope.i18nmessageid-4.0.3.tar.gz";
-      sha256 = "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml";
-    };
+  pychef = callPackage ../development/python-modules/pychef { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  pydns =
+    let
+      py3 = callPackage ../development/python-modules/py3dns { };
 
+      py2 = callPackage ../development/python-modules/pydns { };
+    in if isPy3k then py3 else py2;
 
-  zope_lifecycleevent = buildPythonPackage rec {
-    name = "zope.lifecycleevent-3.7.0";
+  python-daemon = callPackage ../development/python-modules/python-daemon { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.lifecycleevent/${name}.tar.gz";
-      sha256 = "0s5brphqzzz89cykg61gy7zcmz0ryq1jj2va7gh2n1b3cccllp95";
-    };
+  sympy = callPackage ../development/python-modules/sympy { };
 
-    propagatedBuildInputs = with self; [ zope_event zope_component ];
+  pilkit = callPackage ../development/python-modules/pilkit { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  clint = callPackage ../development/python-modules/clint { };
 
+  argh = callPackage ../development/python-modules/argh { };
 
-  zope_location = buildPythonPackage rec {
-    name = "zope.location-4.0.3";
+  nose_progressive = callPackage ../development/python-modules/nose_progressive { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.location/zope.location-4.0.3.tar.gz";
-      sha256 = "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74";
-    };
+  blessings = callPackage ../development/python-modules/blessings { };
 
-    propagatedBuildInputs = with self; [ zope_proxy ];
+  secretstorage = callPackage ../development/python-modules/secretstorage { };
 
-    # ignore circular dependency on zope_schema
-    preBuild = ''
-      sed -i '/zope.schema/d' setup.py
-    '';
+  semantic = callPackage ../development/python-modules/semantic { };
 
-    doCheck = false;
+  sandboxlib = callPackage ../development/python-modules/sandboxlib { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
+  scales = callPackage ../development/python-modules/scales { };
+
+  secp256k1 = callPackage ../development/python-modules/secp256k1 {
+    inherit (pkgs) secp256k1 pkgconfig;
   };
 
+  semantic-version = callPackage ../development/python-modules/semantic-version { };
 
-  zope_proxy = buildPythonPackage rec {
-    name = "zope.proxy-4.1.6";
+  sexpdata = callPackage ../development/python-modules/sexpdata { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.proxy/${name}.tar.gz";
-      sha256 = "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4";
-    };
+  sh = callPackage ../development/python-modules/sh { };
 
-    propagatedBuildInputs = with self; [ zope_interface ];
+  sipsimple = callPackage ../development/python-modules/sipsimple { };
 
-    # circular deps
-    doCheck = false;
+  six = callPackage ../development/python-modules/six { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  smartdc = callPackage ../development/python-modules/smartdc { };
 
+  socksipy-branch = callPackage ../development/python-modules/socksipy-branch { };
 
-  zope_schema = buildPythonPackage rec {
-    name = "zope.schema-4.4.2";
+  sockjs-tornado = callPackage ../development/python-modules/sockjs-tornado { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.schema/${name}.tar.gz";
-      sha256 = "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank";
-    };
+  sorl_thumbnail = callPackage ../development/python-modules/sorl_thumbnail { };
 
-    propagatedBuildInputs = with self; [ zope_location zope_event zope_interface zope_testing ];
+  sphinx_rtd_theme = callPackage ../development/python-modules/sphinx_rtd_theme { };
 
-    # ImportError: No module named 'zope.event'
-    # even though zope_event has been included.
-    # Package seems to work fine.
-    doCheck = false;
+  sphinxcontrib-blockdiag = callPackage ../development/python-modules/sphinxcontrib-blockdiag { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  sphinxcontrib-openapi = callPackage ../development/python-modules/sphinxcontrib-openapi { };
 
+  sphinxcontrib_httpdomain = callPackage ../development/python-modules/sphinxcontrib_httpdomain { };
 
-  zope_size = buildPythonPackage rec {
-    name = "zope.size-3.5.0";
+  sphinxcontrib_newsfeed = callPackage ../development/python-modules/sphinxcontrib_newsfeed { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.size/${name}.tar.gz";
-      sha256 = "006xfkhvmypwd3ww9gbba4zly7n9w30bpp1h74d53la7l7fiqk2f";
-    };
+  sphinxcontrib_plantuml = callPackage ../development/python-modules/sphinxcontrib_plantuml { };
 
-    propagatedBuildInputs = with self; [ zope_i18nmessageid zope_interface ];
+  sphinxcontrib-spelling = callPackage ../development/python-modules/sphinxcontrib-spelling { };
 
-    meta = {
-        maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  sphinx_pypi_upload = callPackage ../development/python-modules/sphinx_pypi_upload { };
 
+  Pweave = callPackage ../development/python-modules/pweave { };
 
-  zope_testing = buildPythonPackage rec {
-    name = "zope.testing-${version}";
-    version = "4.6.1";
+  SQLAlchemy-ImageAttach = callPackage ../development/python-modules/sqlalchemy-imageattach { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.testing/${name}.tar.gz";
-      sha256 = "1vvxhjmzl7vw2i1akfj1xbggwn36270ym7f2ic9xwbaswfw1ap56";
-    };
+  sqlparse = callPackage ../development/python-modules/sqlparse { };
 
-    doCheck = !isPyPy;
+  python_statsd = callPackage ../development/python-modules/python_statsd { };
 
-    propagatedBuildInputs = with self; [ zope_interface zope_exceptions zope_location ];
+  stompclient = callPackage ../development/python-modules/stompclient { };
 
-    meta = {
-      description = "Zope testing helpers";
-      homepage =  http://pypi.python.org/pypi/zope.testing;
-      license = licenses.zpl20;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  subdownloader = callPackage ../development/python-modules/subdownloader { };
 
+  subunit = callPackage ../development/python-modules/subunit { };
 
-  zope_testrunner = callPackage ../development/python-modules/zope_testrunner { };
+  sure = callPackage ../development/python-modules/sure { };
 
+  svgwrite = callPackage ../development/python-modules/svgwrite { };
 
-  zope_interface = callPackage ../development/python-modules/zope_interface { };
+  freezegun = callPackage ../development/python-modules/freezegun { };
 
+  taskw = callPackage ../development/python-modules/taskw { };
 
-  hgsvn = buildPythonPackage rec {
-    name = "hgsvn-0.3.11";
-    src = pkgs.fetchurl rec {
-      url = "mirror://pypi/h/hgsvn/${name}-hotfix.zip";
-      sha256 = "0yvhwdh8xx8rvaqd3pnnyb99hfa0zjdciadlc933p27hp9rf880p";
-    };
-    disabled = isPy3k || isPyPy;
-    doCheck = false;  # too many assumptions
+  terminaltables = callPackage ../development/python-modules/terminaltables { };
 
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ hglib ];
+  testpath = callPackage ../development/python-modules/testpath { };
 
-    meta = {
-      homepage = https://pypi.python.org/pypi/hgsvn;
-    };
-  };
+  testrepository = callPackage ../development/python-modules/testrepository { };
 
-  cliapp = buildPythonPackage rec {
-    name = "cliapp-${version}";
-    version = "1.20150305";
-    disabled = isPy3k;
+  testscenarios = callPackage ../development/python-modules/testscenarios { };
 
-    src = pkgs.fetchgit {
-        url = "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp";
-        rev = "569df8a5959cd8ef46f78c9497461240a5aa1123";
-        sha256 = "882c5daf933e4cf089842995efc721e54361d98f64e0a075e7373b734cd899f3";
-    };
+  python_mimeparse = callPackage ../development/python-modules/python_mimeparse { };
 
-    buildInputs = with self; [ sphinx ];
-
-    # error: invalid command 'test'
-    doCheck = false;
+  # Tkinter/tkinter is part of the Python standard library.
+  # The Python interpreters in Nixpkgs come without tkinter by default.
+  # To make the module available, we make it available as any other
+  # Python package.
+  tkinter = let
+    py = python.override{x11Support=true;};
+  in callPackage ../development/python-modules/tkinter { py = py; };
 
-    meta = {
-      homepage = http://liw.fi/cliapp/;
-      description = "Python framework for Unix command line programs";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  tlslite = callPackage ../development/python-modules/tlslite { };
 
-  cmdtest = buildPythonPackage rec {
-    name = "cmdtest-${version}";
-    version = "0.18";
-    disabled = isPy3k || isPyPy;
+  qrcode = callPackage ../development/python-modules/qrcode { };
 
-    propagatedBuildInputs = with self; [ cliapp ttystatus markdown ];
+  traits = callPackage ../development/python-modules/traits { };
 
-    # TODO: cmdtest tests must be run before the buildPhase
-    doCheck = false;
+  transmissionrpc = callPackage ../development/python-modules/transmissionrpc { };
 
-    src = pkgs.fetchurl {
-      url = "http://code.liw.fi/debian/pool/main/c/cmdtest/cmdtest_0.18.orig.tar.xz";
-      sha256 = "068f24k8ad520hcf8g3gj7wvq1wspyd46ay0k9xa360jlb4dv2mn";
-    };
+  eggdeps = callPackage ../development/python-modules/eggdeps { };
 
-    meta = {
-      homepage = http://liw.fi/cmdtest/;
-      description = "Black box tests Unix command line tools";
-    };
-  };
+  twiggy = callPackage ../development/python-modules/twiggy { };
 
-  tornado = callPackage ../development/python-modules/tornado { };
-  tornado_4 = callPackage ../development/python-modules/tornado { version = "4.5.3"; };
+  twitter = callPackage ../development/python-modules/twitter { };
 
-  tokenlib = buildPythonPackage rec {
-    name = "tokenlib-${version}";
-    version = "0.3.1";
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/tokenlib.git;
-      rev = "refs/tags/${version}";
-      sha256 = "0bq6dqyfwh29pg8ngmrm4mx4q27an9lsj0p9l79p9snn4g2rxzc8";
-    };
+  twitter-common-collections = callPackage ../development/python-modules/twitter-common-collections { };
 
-    propagatedBuildInputs = with self; [ requests webob ];
-  };
+  twitter-common-confluence = callPackage ../development/python-modules/twitter-common-confluence { };
 
-  tunigo = callPackage ../development/python-modules/tunigo { };
+  twitter-common-dirutil = callPackage ../development/python-modules/twitter-common-dirutil { };
 
-  tarman = buildPythonPackage rec {
-    version = "0.1.3";
-    name = "tarman-${version}";
+  twitter-common-lang = callPackage ../development/python-modules/twitter-common-lang { };
 
-    disabled = isPy3k;
+  twitter-common-log = callPackage ../development/python-modules/twitter-common-log { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/tarman/tarman-${version}.zip";
-      sha256 = "0ri6gj883k042xaxa2d5ymmhbw2bfcxdzhh4bz7700ibxwxxj62h";
-    };
+  twitter-common-options = callPackage ../development/python-modules/twitter-common-options { };
 
-    buildInputs = with self; [ unittest2 nose mock ];
-    propagatedBuildInputs = with self; [ libarchive ];
+  umalqurra = callPackage ../development/python-modules/umalqurra { };
 
-    # tests are still failing
-    doCheck = false;
-  };
+  unicodecsv = callPackage ../development/python-modules/unicodecsv { };
 
+  unittest2 = callPackage ../development/python-modules/unittest2 { };
 
-  libarchive = self.python-libarchive; # The latter is the name upstream uses
-  python-libarchive = buildPythonPackage rec {
-    version = "3.1.2-1";
-    name = "libarchive-${version}";
-    disabled = isPy3k;
+  unittest-xml-reporting = callPackage ../development/python-modules/unittest-xml-reporting { };
 
-    src = pkgs.fetchurl {
-      url = "http://python-libarchive.googlecode.com/files/python-libarchive-${version}.tar.gz";
-      sha256 = "0j4ibc4mvq64ljya9max8832jafi04jciff9ia9qy0xhhlwkcx8x";
-    };
+  uritemplate_py = callPackage ../development/python-modules/uritemplate_py { };
 
-    propagatedBuildInputs = with self; [ pkgs.libarchive.lib ];
-    meta.broken = true;
-  };
+  traceback2 = callPackage ../development/python-modules/traceback2 { };
 
-  libarchive-c = buildPythonPackage rec {
-    name = "libarchive-c-${version}";
-    version = "2.7";
+  linecache2 = callPackage ../development/python-modules/linecache2 { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/libarchive-c/${name}.tar.gz";
-      sha256 = "011bfsmqpcwd6920kckllh7zhw2y4rrasgmddb7wjzn2hg1xpsjn";
-    };
+  upass = callPackage ../development/python-modules/upass { };
 
-    LC_ALL="en_US.UTF-8";
+  uptime = callPackage ../development/python-modules/uptime { };
 
-    postPatch = ''
-      substituteInPlace libarchive/ffi.py --replace \
-        "find_library('archive')" "'${pkgs.libarchive.lib}/lib/libarchive.so'"
-    '';
-    checkPhase = ''
-      py.test tests -k 'not test_check_archiveentry_with_unicode_entries_and_name_zip and not test_check_archiveentry_using_python_testtar'
-    '';
+  urwidtrees = callPackage ../development/python-modules/urwidtrees { };
 
-    buildInputs = with self; [ pytest pkgs.glibcLocales ];
-  };
+  pyuv = callPackage ../development/python-modules/pyuv { };
 
-  libasyncns = callPackage ../development/python-modules/libasyncns {
-    inherit (pkgs) libasyncns pkgconfig;
-  };
+  virtualenv-clone = callPackage ../development/python-modules/virtualenv-clone { };
 
-  libarcus = callPackage ../development/python-modules/libarcus { };
+  virtualenvwrapper = callPackage ../development/python-modules/virtualenvwrapper { };
 
-  pybrowserid = callPackage ../development/python-modules/pybrowserid { };
+  vmprof = callPackage ../development/python-modules/vmprof { };
 
-  pyzmq = callPackage ../development/python-modules/pyzmq { };
+  vultr = callPackage ../development/python-modules/vultr { };
 
-  testfixtures = callPackage ../development/python-modules/testfixtures {};
+  waitress = callPackage ../development/python-modules/waitress { };
 
-  tissue = buildPythonPackage rec {
-    name = "tissue-0.9.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/tissue/${name}.tar.gz";
-      sha256 = "7e34726c3ec8fae358a7faf62de172db15716f5582e5192a109e33348bd76c2e";
-    };
+  waitress-django = callPackage ../development/python-modules/waitress-django { };
 
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ pep8 ];
+  web = callPackage ../development/python-modules/web { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
+  webob = callPackage ../development/python-modules/webob { };
 
-  titlecase = callPackage ../development/python-modules/titlecase { };
+  websockify = callPackage ../development/python-modules/websockify { };
 
-  tracing = buildPythonPackage rec {
-    name = "tracing-${version}";
-    version = "0.8";
+  webtest = callPackage ../development/python-modules/webtest { };
 
-    src = pkgs.fetchurl rec {
-      url = "http://code.liw.fi/debian/pool/main/p/python-tracing/python-tracing_${version}.orig.tar.gz";
-      sha256 = "1l4ybj5rvrrcxf8csyq7qx52izybd502pmx70zxp46gxqm60d2l0";
-    };
+  wsgiproxy2 = callPackage ../development/python-modules/wsgiproxy2 { };
 
-    buildInputs = with self; [ sphinx ];
+  xcaplib = callPackage ../development/python-modules/xcaplib { };
 
-    # error: invalid command 'test'
-    doCheck = false;
+  xlib = callPackage ../development/python-modules/xlib { };
 
-    meta = {
-      homepage = http://liw.fi/tracing/;
-      description = "Python debug logging helper";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  zbase32 = callPackage ../development/python-modules/zbase32 { };
 
-  translationstring = buildPythonPackage rec {
-    name = "translationstring-1.3";
+  zdaemon = callPackage ../development/python-modules/zdaemon { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/translationstring/${name}.tar.gz";
-      sha256 = "4ee44cfa58c52ade8910ea0ebc3d2d84bdcad9fa0422405b1801ec9b9a65b72d";
-    };
+  zfec = callPackage ../development/python-modules/zfec { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
+  zope_broken = callPackage ../development/python-modules/zope_broken { };
 
+  zope_component = callPackage ../development/python-modules/zope_component { };
 
-  ttystatus = buildPythonPackage rec {
-    name = "ttystatus-${version}";
-    version = "0.23";
-    disabled = isPy3k;
+  zope_configuration = callPackage ../development/python-modules/zope_configuration { };
 
-    src = pkgs.fetchurl rec {
-      url = "http://code.liw.fi/debian/pool/main/p/python-ttystatus/python-ttystatus_${version}.orig.tar.gz";
-      sha256 = "0ymimviyjyh2iizqilg88g4p26f5vpq1zm3cvg7dr7q4y3gmik8y";
-    };
+  zope_contenttype = callPackage ../development/python-modules/zope_contenttype { };
 
-    buildInputs = with self; [ sphinx ];
+  zope_dottedname = callPackage ../development/python-modules/zope_dottedname { };
 
-    # error: invalid command 'test'
-    doCheck = false;
+  zope_event = callPackage ../development/python-modules/zope_event { };
 
-    meta = {
-      homepage = http://liw.fi/ttystatus/;
-      description = "Progress and status updates on terminals for Python";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  zope_exceptions = callPackage ../development/python-modules/zope_exceptions { };
 
-  larch = buildPythonPackage rec {
-    name = "larch-${version}";
-    version = "1.20131130";
+  zope_filerepresentation = callPackage ../development/python-modules/zope_filerepresentation { };
 
-    src = pkgs.fetchurl rec {
-      url = "http://code.liw.fi/debian/pool/main/p/python-larch/python-larch_${version}.orig.tar.gz";
-      sha256 = "1hfanp9l6yc5348i3f5sb8c5s4r43y382hflnbl6cnz4pm8yh5r7";
-    };
+  zope_i18n = callPackage ../development/python-modules/zope_i18n { };
 
-    buildInputs = with self; [ sphinx ];
-    propagatedBuildInputs = with self; [ tracing ttystatus cliapp ];
+  zope_i18nmessageid = callPackage ../development/python-modules/zope_i18nmessageid { };
 
-    # error: invalid command 'test'
-    doCheck = false;
+  zope_lifecycleevent = callPackage ../development/python-modules/zope_lifecycleevent { };
 
-    meta = {
-      homepage = http://liw.fi/larch/;
-      description = "Python B-tree library";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  zope_location = callPackage ../development/python-modules/zope_location { };
 
+  zope_proxy = callPackage ../development/python-modules/zope_proxy { };
 
-  websocket_client = callPackage ../development/python-modules/websockets_client { };
+  zope_schema = callPackage ../development/python-modules/zope_schema { };
 
+  zope_size = callPackage ../development/python-modules/zope_size { };
 
-  webhelpers = buildPythonPackage rec {
-    name = "WebHelpers-1.3";
+  zope_testing = callPackage ../development/python-modules/zope_testing { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/WebHelpers/${name}.tar.gz";
-      sha256 = "ea86f284e929366b77424ba9a89341f43ae8dee3cbeb8702f73bcf86058aa583";
-    };
+  zope_testrunner = callPackage ../development/python-modules/zope_testrunner { };
 
-    buildInputs = with self; [ routes markupsafe webob nose ];
+  zope_interface = callPackage ../development/python-modules/zope_interface { };
 
-    # TODO: failing tests https://bitbucket.org/bbangert/webhelpers/pull-request/1/fix-error-on-webob-123/diff
-    doCheck = false;
+  hgsvn = callPackage ../development/python-modules/hgsvn { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
+  cliapp = callPackage ../development/python-modules/cliapp { };
 
-  whichcraft = callPackage ../development/python-modules/whichcraft { };
+  cmdtest = callPackage ../development/python-modules/cmdtest { };
 
-  whisper = callPackage ../development/python-modules/whisper { };
+  tornado = callPackage ../development/python-modules/tornado { };
+  tornado_4 = callPackage ../development/python-modules/tornado { version = "4.5.3"; };
 
-  worldengine = buildPythonPackage rec {
-    name = "worldengine-${version}";
-    version = "0.19.0";
+  tokenlib = callPackage ../development/python-modules/tokenlib { };
 
-    src = pkgs.fetchFromGitHub {
-      owner = "Mindwerks";
-      repo = "worldengine";
-      rev = "v${version}";
-      sha256 = "1xrckb0dn2841gvp32n18gib14bpi77hmjw3r9jiyhg402iip7ry";
-    };
+  tunigo = callPackage ../development/python-modules/tunigo { };
 
-    src-data = pkgs.fetchFromGitHub {
-      owner = "Mindwerks";
-      repo = "worldengine-data";
-      rev = "029051e";
-      sha256 = "06xbf8gj3ljgr11v1n8jbs2q8pdf9wz53xdgkhpm8hdnjahgdxdm";
-    };
+  tarman = callPackage ../development/python-modules/tarman { };
 
-    postUnpack = ''
-      ln -s ${src-data} worldengine-data
-    '';
+  libarchive = self.python-libarchive; # The latter is the name upstream uses
 
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ noise numpy pyplatec protobuf purepng argparse h5py gdal ];
-
-    prePatch = ''
-      substituteInPlace setup.py \
-        --replace pypng>=0.0.18 purepng \
-        --replace 'numpy>=1.9.2, <= 1.10.0.post2' 'numpy' \
-        --replace 'argparse==1.2.1' "" \
-        --replace 'protobuf==3.0.0a3' 'protobuf' \
-        --replace 'noise==1.2.2' 'noise' \
-        --replace 'PyPlatec==1.4.0' 'PyPlatec' \
-    '';
+  python-libarchive = callPackage ../development/python-modules/python-libarchive { };
 
-    doCheck = true;
-    postCheck = ''
-      nosetests tests
-    '';
+  libarchive-c = callPackage ../development/python-modules/libarchive-c { };
 
-    meta = {
-      homepage = http://world-engine.org;
-      description = "World generator using simulation of plates, rain shadow, erosion, etc";
-      platforms = platforms.all;
-      maintainers = with maintainers; [ rardiol ];
-    };
+  libasyncns = callPackage ../development/python-modules/libasyncns {
+    inherit (pkgs) libasyncns pkgconfig;
   };
 
-  carbon = callPackage ../development/python-modules/carbon { };
+  libarcus = callPackage ../development/python-modules/libarcus { };
 
-  ujson = buildPythonPackage rec {
-    name = "ujson-1.35";
+  pybrowserid = callPackage ../development/python-modules/pybrowserid { };
 
-    disabled = isPyPy;
+  pyzmq = callPackage ../development/python-modules/pyzmq { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/ujson/${name}.tar.gz";
-      sha256 = "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n";
-    };
+  testfixtures = callPackage ../development/python-modules/testfixtures {};
 
-    meta = {
-      homepage = https://pypi.python.org/pypi/ujson;
-      description = "Ultra fast JSON encoder and decoder for Python";
-      license = licenses.bsd3;
-    };
-  };
+  tissue = callPackage ../development/python-modules/tissue { };
 
+  titlecase = callPackage ../development/python-modules/titlecase { };
 
-  unidecode = callPackage ../development/python-modules/unidecode {};
+  tracing = callPackage ../development/python-modules/tracing { };
 
-  pyusb = callPackage ../development/python-modules/pyusb { libusb1 = pkgs.libusb1; };
+  translationstring = callPackage ../development/python-modules/translationstring { };
 
-  BlinkStick = callPackage ../development/python-modules/blinkstick { };
+  ttystatus = callPackage ../development/python-modules/ttystatus { };
 
-  usbtmc = callPackage ../development/python-modules/usbtmc {};
+  larch = callPackage ../development/python-modules/larch { };
 
-  txgithub = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    pname = "txgithub";
-    version = "15.0.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/${pname}/${name}.tar.gz";
-      sha256 = "16gbizy8vkxasxylwzj4p66yw8979nvzxdj6csidgmng7gi2k8nx";
-    };
-    propagatedBuildInputs = with self; [ pyopenssl twisted service-identity ];
-    # fix python3 issues
-    patchPhase = ''
-      sed -i 's/except usage.UsageError, errortext/except usage.UsageError as errortext/' txgithub/scripts/create_token.py
-      sed -i 's/except usage.UsageError, errortext/except usage.UsageError as errortext/' txgithub/scripts/gist.py
-      sed -i 's/print response\[\x27html_url\x27\]/print(response\[\x27html_url\x27\])/' txgithub/scripts/gist.py
-      sed -i '41d' txgithub/scripts/gist.py
-      sed -i '41d' txgithub/scripts/gist.py
-    '';
+  websocket_client = callPackage ../development/python-modules/websockets_client { };
 
-    # No tests distributed
-    doCheck = false;
-    meta = {
-      description = "GitHub API client implemented using Twisted.";
-      homepage    = "https://github.com/tomprince/txgithub";
-      license     = licenses.mit;
-      maintainers = with maintainers; [ nand0p ];
-      platforms   = platforms.all;
-    };
-  };
+  webhelpers = callPackage ../development/python-modules/webhelpers { };
 
-  txrequests = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    pname = "txrequests";
-    version = "0.9.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/${pname}/${name}.tar.gz";
-      sha256 = "0kkxxd17ar5gyjkz9yrrdr15a64qw6ym60ndi0zbwx2s634yfafw";
-    };
-    propagatedBuildInputs = with self; [ twisted requests cryptography ];
+  whichcraft = callPackage ../development/python-modules/whichcraft { };
 
-    # Require network access
-    doCheck = false;
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover
-    '';
-    meta = {
-      description = "Asynchronous Python HTTP for Humans.";
-      homepage    = "https://github.com/tardyp/txrequests";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ nand0p ];
-      platforms   = platforms.all;
-    };
-  };
+  whisper = callPackage ../development/python-modules/whisper { };
 
-  txamqp = buildPythonPackage rec {
-    name = "txamqp-${version}";
-    version = "0.3";
+  worldengine = callPackage ../development/python-modules/worldengine { };
 
-    src = pkgs.fetchurl rec {
-      url = "https://launchpad.net/txamqp/trunk/${version}/+download/python-txamqp_${version}.orig.tar.gz";
-      sha256 = "1r2ha0r7g14i4b5figv2spizjrmgfpspdbl1m031lw9px2hhm463";
-    };
+  carbon = callPackage ../development/python-modules/carbon { };
 
-    buildInputs = with self; [ twisted ];
+  ujson = callPackage ../development/python-modules/ujson { };
 
-    meta = {
-      homepage = https://launchpad.net/txamqp;
-      description = "Library for communicating with AMQP peers and brokers using Twisted";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  unidecode = callPackage ../development/python-modules/unidecode {};
+
+  pyusb = callPackage ../development/python-modules/pyusb { libusb1 = pkgs.libusb1; };
 
-  versiontools = buildPythonPackage rec {
-    name = "versiontools-1.9.1";
-    doCheck = (!isPy3k);
+  BlinkStick = callPackage ../development/python-modules/blinkstick { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/versiontools/${name}.tar.gz";
-      sha256 = "1xhl6kl7f4srgnw6zw4lr8j2z5vmrbaa83nzn2c9r2m1hwl36sd9";
-    };
+  usbtmc = callPackage ../development/python-modules/usbtmc {};
 
-  };
+  txgithub = callPackage ../development/python-modules/txgithub { };
 
-  veryprettytable = buildPythonPackage rec {
-    name = "veryprettytable-${version}";
-    version = "0.8.1";
+  txrequests = callPackage ../development/python-modules/txrequests { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/veryprettytable/${name}.tar.gz";
-      sha256 = "1k1rifz8x6qcicmx2is9vgxcj0qb2f5pvzrp7zhmvbmci3yack3f";
-    };
+  txamqp = callPackage ../development/python-modules/txamqp { };
 
-    propagatedBuildInputs = [ self.termcolor self.colorama ];
+  versiontools = callPackage ../development/python-modules/versiontools { };
 
-    meta = {
-      description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format";
-      homepage = https://github.com/smeggingsmegger/VeryPrettyTable;
-      license = licenses.free;
-    };
-  };
+  veryprettytable = callPackage ../development/python-modules/veryprettytable { };
 
   graphite-web = callPackage ../development/python-modules/graphite-web { };
 
@@ -9229,109 +4508,15 @@ EOF
 
   graphitepager = callPackage ../development/python-modules/graphitepager { };
 
-  pyspotify = buildPythonPackage rec {
-    name = "pyspotify-${version}";
-
-    version = "2.0.5";
+  pyspotify = callPackage ../development/python-modules/pyspotify { };
 
-    src = pkgs.fetchurl {
-      url = "https://github.com/mopidy/pyspotify/archive/v${version}.tar.gz";
-      sha256 = "1ilbz2w1gw3f1bpapfa09p84dwh08bf7qcrkmd3aj0psz57p2rls";
-    };
-
-    propagatedBuildInputs = with self; [ cffi ];
-    buildInputs = [ pkgs.libspotify ];
-
-    # python zip complains about old timestamps
-    preConfigure = ''
-      find -print0 | xargs -0 touch
-    '';
-
-    postInstall = stdenv.lib.optionalString stdenv.isDarwin ''
-      find "$out" -name _spotify.so -exec \
-          install_name_tool -change \
-          @loader_path/../Frameworks/libspotify.framework/libspotify \
-          ${pkgs.libspotify}/lib/libspotify.dylib \
-          {} \;
-    '';
-
-    # There are no tests
-    doCheck = false;
-
-    meta = {
-      homepage    = http://pyspotify.mopidy.com;
-      description = "A Python interface to Spotify’s online music streaming service";
-      license     = licenses.unfree;
-      maintainers = with maintainers; [ lovek323 rickynils ];
-      platforms   = platforms.unix;
-    };
-  };
-
-  pykka = buildPythonPackage rec {
-    name = "pykka-${version}";
-
-    version = "1.2.0";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/jodal/pykka.git";
-      rev = "refs/tags/v${version}";
-      sha256 = "0qlfw1054ap0cha1m6dbnq51kjxqxaf338g7jwnwy33b3gr8x0hg";
-    };
-
-    # There are no tests
-    doCheck = false;
-
-    meta = {
-      homepage = http://www.pykka.org;
-      description = "A Python implementation of the actor model";
-      maintainers = with maintainers; [ rickynils ];
-    };
-  };
+  pykka = callPackage ../development/python-modules/pykka { };
 
   ws4py = callPackage ../development/python-modules/ws4py {};
 
-  gdata = buildPythonPackage rec {
-    name = "gdata-${version}";
-    version = "2.0.18";
+  gdata = callPackage ../development/python-modules/gdata { };
 
-    src = pkgs.fetchurl {
-      url = "https://gdata-python-client.googlecode.com/files/${name}.tar.gz";
-      sha256 = "1dpxl5hwyyqd71avpm5vkvw8fhlvf9liizmhrq9jphhrx0nx5rsn";
-    };
-
-    # Fails with "error: invalid command 'test'"
-    doCheck = false;
-
-    meta = {
-      homepage = https://code.google.com/p/gdata-python-client/;
-      description = "Python client library for Google data APIs";
-      license = licenses.asl20;
-    };
-  };
-
-  IMAPClient = buildPythonPackage rec {
-    name = "IMAPClient-${version}";
-    version = "0.13";
-    disabled = isPy34 || isPy35;
-
-    src = pkgs.fetchurl {
-      url = "http://freshfoo.com/projects/IMAPClient/${name}.tar.gz";
-      sha256 = "0v7kd1crdbff0rmh4ddm5qszkis6hpk9084qh94al8h7g4y9l3is";
-    };
-
-    buildInputs = with self; [ mock ];
-
-    preConfigure = ''
-      sed -i '/distribute_setup/d' setup.py
-      substituteInPlace setup.py --replace "mock==0.8.0" "mock"
-    '';
-
-    meta = {
-      homepage = http://imapclient.freshfoo.com/;
-      description = "Easy-to-use, Pythonic and complete IMAP client library";
-      license = licenses.bsd3;
-    };
-  };
+  IMAPClient = callPackage ../development/python-modules/imapclient { };
 
   Logbook = callPackage ../development/python-modules/Logbook { };
 
@@ -9343,282 +4528,52 @@ EOF
     inherit (pkgs) libvirt;
   };
 
-  rpdb = buildPythonPackage rec {
-    name = "rpdb-0.1.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rpdb/${name}.tar.gz";
-      sha256 = "0rql1hq3lziwcql0h3dy05w074cn866p397ng9bv6qbz85ifw1bk";
-    };
-
-    meta = {
-      description = "pdb wrapper with remote access via tcp socket";
-      homepage = https://github.com/tamentis/rpdb;
-      license = licenses.bsd2;
-    };
-  };
-
-
-  grequests = buildPythonPackage rec {
-    pname = "grequests";
-    version = "0.3.0";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0lafzax5igbh8y4x0krizr573wjsxz7bhvwygiah6qwrzv83kv5c";
-    };
-
-    # No tests in archive
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ requests gevent ];
+  rpdb = callPackage ../development/python-modules/rpdb { };
 
-    meta = {
-      description = "Asynchronous HTTP requests";
-      homepage = https://github.com/kennethreitz/grequests;
-      license = with licenses; [ bsd2 ];
-      maintainers = with maintainers; [ matejc ];
-    };
-  };
+  grequests = callPackage ../development/python-modules/grequests { };
 
   first = callPackage ../development/python-modules/first {};
 
-  flaskbabel = buildPythonPackage rec {
-    name = "Flask-Babel-0.11.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/F/Flask-Babel/${name}.tar.gz";
-      sha256 = "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj";
-    };
+  flaskbabel = callPackage ../development/python-modules/flaskbabel { };
 
-    propagatedBuildInputs = with self; [ flask jinja2 speaklater Babel pytz ];
-
-    meta = {
-      description = "Adds i18n/l10n support to Flask applications";
-      homepage = https://github.com/mitsuhiko/flask-babel;
-      license = "bsd";
-      maintainers = with maintainers; [ matejc ];
-    };
-  };
-
-  speaklater = buildPythonPackage rec {
-    name = "speaklater-1.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/speaklater/${name}.tar.gz";
-      sha256 = "1ab5dbfzzgz6cnz4xlwx79gz83id4bhiw67k1cgqrlzfs0va7zjr";
-    };
-
-    meta = {
-      description = "Implements a lazy string for python useful for use with gettext";
-      homepage = https://github.com/mitsuhiko/speaklater;
-      license = "bsd";
-      maintainers = with maintainers; [ matejc ];
-    };
-  };
+  speaklater = callPackage ../development/python-modules/speaklater { };
 
   speedtest-cli = callPackage ../development/python-modules/speedtest-cli { };
 
   pushbullet = callPackage ../development/python-modules/pushbullet { };
 
-  power = buildPythonPackage rec {
-    name = "power-1.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/power/${name}.tar.gz";
-      sha256 = "7d7d60ec332acbe3a7d00379b45e39abf650bf7ee311d61da5ab921f52f060f0";
-    };
-
-    # Tests can't work because there is no power information available.
-    doCheck = false;
-
-    meta = {
-      description = "Cross-platform system power status information";
-      homepage = https://github.com/Kentzo/Power;
-      license = licenses.mit;
-    };
-  };
+  power = callPackage ../development/python-modules/power { };
 
   # added 2018-05-23, can be removed once 18.09 is branched off
   udiskie = throw "pythonPackages.udiskie has been replaced by udiskie";
 
   pythonefl = callPackage ../development/python-modules/python-efl { };
 
-  tlsh = buildPythonPackage rec {
-    name = "tlsh-3.4.5";
-    src = pkgs.fetchFromGitHub {
-      owner = "trendmicro";
-      repo = "tlsh";
-      rev = "22fa9a62068b92c63f2b5a87004a7a7ceaac1930";
-      sha256 = "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll";
-    };
-    buildInputs = with pkgs; [ cmake ];
-    # no test data
-    doCheck = false;
-    preConfigure = ''
-      mkdir build
-      cd build
-      cmake ..
-      cd ../py_ext
-    '';
-    meta = with stdenv.lib; {
-      description = "Trend Micro Locality Sensitive Hash";
-      homepage = https://github.com/trendmicro/tlsh;
-      license = licenses.asl20;
-      platforms = platforms.linux;
-    };
-  };
-
-  toposort = buildPythonPackage rec {
-    name = "toposort-${version}";
-    version = "1.1";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/toposort/toposort-1.1.tar.gz";
-      sha256 = "1izmirbwmd9xrk7rq83p486cvnsslfa5ljvl7rijj1r64zkcnf3a";
-    };
-    meta = {
-      description = "A topological sort algorithm";
-      homepage = https://pypi.python.org/pypi/toposort/1.1;
-      maintainers = with maintainers; [ tstrobel ];
-      platforms = platforms.linux;
-      #license = licenses.apache;
-    };
-  };
-
-  snapperGUI = buildPythonPackage rec {
-    name = "Snapper-GUI";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/ricardomv/snapper-gui";
-      rev = "11d98586b122180c75a86fccda45c4d7e3137591";
-      sha256 = "7a9f86fc17dbf130526e70c3e925eac30e2c74d6b932efbf7e7cd9fbba6dc4b1";
-    };
+  tlsh = callPackage ../development/python-modules/tlsh { };
 
-    # no tests available
-    doCheck = false;
+  toposort = callPackage ../development/python-modules/toposort { };
 
-    propagatedBuildInputs = with self; [ pygobject3 dbus-python ];
-
-    meta = {
-      homepage = https://github.com/ricardomv/snapper-gui;
-      description = "Graphical frontend for snapper";
-      license = licenses.gpl2;
-      maintainers = with maintainers; [ tstrobel ];
-    };
-  };
+  snapperGUI = callPackage ../development/python-modules/snappergui { };
 
   uncertainties = callPackage ../development/python-modules/uncertainties { };
 
-  funcy = buildPythonPackage rec {
-    name = "funcy-1.6";
-
-    src = pkgs.fetchurl {
-        url = "mirror://pypi/f/funcy/${name}.tar.gz";
-        sha256 = "511495db0c5660af18d3151b008c6ce698ae7fbf60887278e79675e35eed1f01";
-    };
-
-    # No tests
-    doCheck = false;
-
-    meta = {
-      description = "Collection of fancy functional tools focused on practicality";
-      homepage = "http://funcy.readthedocs.org/";
-      license = licenses.bsd3;
-
-    };
-  };
+  funcy = callPackage ../development/python-modules/funcy { };
 
   vxi11 = callPackage ../development/python-modules/vxi11 { };
 
-  svg2tikz = self.buildPythonPackage {
-    name = "svg2tikz-1.0.0";
-    disabled = ! isPy27;
+  svg2tikz = callPackage ../development/python-modules/svg2tikz { };
 
-    propagatedBuildInputs = with self; [lxml];
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/kjellmf/svg2tikz";
-      sha256 = "429428ec435e53672b85cdfbb89bb8af0ff9f8238f5d05970729e5177d252d5f";
-      rev = "ad36f2c3818da13c4136d70a0fd8153acf8daef4";
-    };
-
-    meta = {
-      homepage = https://github.com/kjellmf/svg2tikz;
-      description = "An SVG to TikZ converter";
-      license = licenses.gpl2Plus;
-      maintainers =  with maintainers; [ gal_bolle ];
-    };
-  };
+  WSGIProxy = callPackage ../development/python-modules/wsgiproxy { };
 
-  WSGIProxy = buildPythonPackage rec {
-    name = "WSGIProxy-${version}";
-    version = "0.2.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/WSGIProxy/WSGIProxy-${version}.tar.gz";
-      sha256 = "0wqz1q8cvb81a37gb4kkxxpv4w7k8192a08qzyz67rn68ln2wcig";
-    };
-
-    propagatedBuildInputs = with self; [
-      paste six
-    ];
-
-    disabled = isPy3k; # Judging from SyntaxError
-
-    meta = with stdenv.lib; {
-      description = "WSGIProxy gives tools to proxy arbitrary(ish) WSGI requests to other";
-      homepage = "http://pythonpaste.org/wsgiproxy/";
-    };
-  };
-
-  blist = buildPythonPackage rec {
-    name = "blist-${version}";
-    version = "1.3.6";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/b/blist/blist-${version}.tar.gz";
-      sha256 = "1hqz9pqbwx0czvq9bjdqjqh5bwfksva1is0anfazig81n18c84is";
-    };
-  };
+  blist = callPackage ../development/python-modules/blist { };
 
   canonicaljson = callPackage ../development/python-modules/canonicaljson { };
 
-  daemonize = buildPythonPackage rec {
-    name = "daemonize-${version}";
-    version = "2.4.2";
+  daemonize = callPackage ../development/python-modules/daemonize { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/daemonize/daemonize-${version}.tar.gz";
-      sha256 = "0y139sq657bpzfv6k0aqm4071z4s40i6ybpni9qvngvdcz6r86n2";
-    };
-  };
-
-  pydenticon = buildPythonPackage rec {
-    name = "pydenticon-${version}";
-    version = "0.2";
+  pydenticon = callPackage ../development/python-modules/pydenticon { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pydenticon/pydenticon-0.2.tar.gz";
-      sha256 = "035dawcspgjw2rksbnn863s7b0i9ac8cc1nshshvd1l837ir1czp";
-    };
-    propagatedBuildInputs = with self; [
-      pillow mock
-    ];
-  };
-
-  pynac = buildPythonPackage rec {
-    name = "pynac-${version}";
-    version = "0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://sourceforge/project/pynac/pynac/pynac-0.2/pynac-0.2.tar.gz";
-      sha256 = "0avzqqcxl54karjmla9jbsyid98mva36lxahwmrsx5h40ys2ggxp";
-    };
-
-    propagatedBuildInputs = with self; [];
-  };
+  pynac = callPackage ../development/python-modules/pynac { };
 
   pybindgen = callPackage ../development/python-modules/pybindgen {};
 
@@ -9630,148 +4585,27 @@ EOF
 
   service-identity = callPackage ../development/python-modules/service_identity { };
 
-  signedjson = buildPythonPackage rec {
-    name = "signedjson-${version}";
-    version = "1.0.0";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/matrix-org/python-signedjson.git";
-      rev = "refs/tags/v${version}";
-      sha256 = "0b8xxhc3npd4567kqapfp4gs7m0h057xam3an7424az262ind82n";
-    };
-
-    propagatedBuildInputs = with self; [
-      canonicaljson unpaddedbase64 pynacl
-    ];
-  };
-
-  unpaddedbase64 = buildPythonPackage rec {
-    name = "unpaddedbase64-${version}";
-    version = "1.1.0";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/matrix-org/python-unpaddedbase64.git";
-      rev = "refs/tags/v${version}";
-      sha256 = "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd";
-    };
-  };
+  signedjson = callPackage ../development/python-modules/signedjson { };
 
+  unpaddedbase64 = callPackage ../development/python-modules/unpaddedbase64 { };
 
   thumbor = callPackage ../development/python-modules/thumbor { };
 
-  thumborPexif = self.buildPythonPackage rec {
-    name = "thumbor-pexif-0.14";
-    disabled = ! isPy27;
+  thumborPexif = callPackage ../development/python-modules/thumborpexif { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/thumbor-pexif/${name}.tar.gz";
-      sha256 = "715cd24760c7c28d6270c79c9e29b55b8d952a24e0e56833d827c2c62451bc3c";
-    };
-
-    meta = {
-      description = "Module to parse and edit the EXIF data tags in a JPEG image";
-      homepage = http://www.benno.id.au/code/pexif/;
-      license = licenses.mit;
-    };
-  };
-
-  pync = buildPythonPackage rec {
-    version  = "1.4";
-    baseName = "pync";
-    name     = "${baseName}-${version}";
-    disabled = ! isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/${baseName}/${name}.tar.gz";
-      sha256 = "0lc1x0pai85avm1r452xnvxc12wijnhz87xv20yp3is9fs6rnkrh";
-    };
-
-    buildInputs = with self; [ pkgs.coreutils ];
-
-    propagatedBuildInputs = with self; [ dateutil ];
-
-    preInstall = stdenv.lib.optionalString stdenv.isDarwin ''
-      sed -i 's|^\([ ]*\)self.bin_path.*$|\1self.bin_path = "${pkgs.terminal-notifier}/bin/terminal-notifier"|' build/lib/pync/TerminalNotifier.py
-    '';
-
-    meta = {
-      description = "Python Wrapper for Mac OS 10.8 Notification Center";
-      homepage    = https://pypi.python.org/pypi/pync/1.4;
-      license     = licenses.mit;
-      platforms   = platforms.darwin;
-      maintainers = with maintainers; [ lovek323 ];
-    };
-  };
+  pync = callPackage ../development/python-modules/pync { };
 
   weboob = callPackage ../development/python-modules/weboob { };
 
-  datadiff = buildPythonPackage rec {
-    name = "datadiff-1.1.6";
+  datadiff = callPackage ../development/python-modules/datadiff { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/datadiff/datadiff-1.1.6.zip";
-      sha256 = "f1402701063998f6a70609789aae8dc05703f3ad0a34882f6199653654c55543";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    meta = {
-      description = "DataDiff";
-      homepage = https://sourceforge.net/projects/datadiff/;
-      license = licenses.asl20;
-    };
-  };
-
-  termcolor = buildPythonPackage rec {
-    name = "termcolor-1.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/termcolor/termcolor-1.1.0.tar.gz";
-      sha256 = "1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b";
-    };
-
-    meta = {
-      description = "Termcolor";
-      homepage = https://pypi.python.org/pypi/termcolor;
-      license = licenses.mit;
-    };
-  };
-
-  html2text = buildPythonPackage rec {
-    name = "html2text-2016.9.19";
+  termcolor = callPackage ../development/python-modules/termcolor { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/html2text/${name}.tar.gz";
-      sha256 = "554ef5fd6c6cf6e3e4f725a62a3e9ec86a0e4d33cd0928136d1c79dbeb7b2d55";
-    };
-
-    meta = {
-      description = "Turn HTML into equivalent Markdown-structured text";
-      homepage = https://github.com/Alir3z4/html2text/;
-      license = licenses.gpl3;
-    };
-  };
+  html2text = callPackage ../development/python-modules/html2text { };
 
   pychart = callPackage ../development/python-modules/pychart {};
 
-  parsimonious = buildPythonPackage rec {
-    version = "0.7.0";
-    name = "parsimonious-${version}";
-    src = pkgs.fetchFromGitHub {
-      repo = "parsimonious";
-      owner = "erikrose";
-      rev = version;
-      sha256 = "087npc8ccryrxabmqifcz56w4wd0hzmv0mc91wrbhc1sil196j0a";
-    };
-
-    propagatedBuildInputs = with self; [ nose six ];
-
-    meta = {
-      homepage = "https://github.com/erikrose/parsimonious";
-      description = "Fast arbitrary-lookahead parser written in pure Python";
-      license = licenses.mit;
-    };
-  };
+  parsimonious = callPackage ../development/python-modules/parsimonious { };
 
   networkx = callPackage ../development/python-modules/networkx { };
 
@@ -9779,345 +4613,43 @@ EOF
 
   ofxhome = callPackage ../development/python-modules/ofxhome { };
 
-  ofxparse = buildPythonPackage rec {
-    name = "ofxparse-0.14";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/ofxparse/${name}.tar.gz";
-      sha256 = "d8c486126a94d912442d040121db44fbc4a646ea70fa935df33b5b4dbfbbe42a";
-    };
-
-    propagatedBuildInputs = with self; [ six beautifulsoup4 ];
+  ofxparse = callPackage ../development/python-modules/ofxparse { };
 
-    meta = {
-      homepage = "http://sites.google.com/site/ofxparse";
-      description = "Tools for working with the OFX (Open Financial Exchange) file format";
-      license = licenses.mit;
-    };
-  };
-
-  ofxtools = buildPythonPackage rec {
-    name = "ofxtools-0.3.8";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/ofxtools/${name}.tar.gz";
-      sha256 = "88f289a60f4312a1599c38a8fb3216e2b46d10cc34476f9a16a33ac8aac7ec35";
-    };
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover -s ofxtools
-    '';
+  ofxtools = callPackage ../development/python-modules/ofxtools { };
 
-    buildInputs = with self; [ sqlalchemy ];
-
-    meta = {
-      homepage = "https://github.com/csingley/ofxtools";
-      description = "Library for working with Open Financial Exchange (OFX) formatted data used by financial institutions";
-      license = licenses.mit;
-      broken = true;
-    };
-  };
-
-  basemap = buildPythonPackage rec {
-    name = "basemap-1.0.7";
-
-    src = pkgs.fetchurl {
-      url = "mirror://sourceforge/project/matplotlib/matplotlib-toolkits/basemap-1.0.7/basemap-1.0.7.tar.gz";
-      sha256 = "0ca522zirj5sj10vg3fshlmgi615zy5gw2assapcj91vsvhc4zp0";
-    };
-
-    propagatedBuildInputs = with self; [ numpy matplotlib pillow ];
-    buildInputs = with self; with pkgs ; [ setuptools geos proj ];
-
-    # Standard configurePhase from `buildPythonPackage` seems to break the setup.py script
-    configurePhase = ''
-      export GEOS_DIR=${pkgs.geos}
-    '';
-
-    # The 'check' target is not supported by the `setup.py` script.
-    # TODO : do the post install checks (`cd examples && ${python.interpreter} run_all.py`)
-    doCheck = false;
-
-    meta = {
-      homepage = "https://matplotlib.org/basemap/";
-      description = "Plot data on map projections with matplotlib";
-      longDescription = ''
-        An add-on toolkit for matplotlib that lets you plot data on map projections with
-        coastlines, lakes, rivers and political boundaries. See
-        http://matplotlib.github.com/basemap/users/examples.html for examples of what it can do.
-      '';
-      license = with licenses; [ mit gpl2 ];
-    };
-  };
+  basemap = callPackage ../development/python-modules/basemap { };
 
   dicttoxml = callPackage ../development/python-modules/dicttoxml { };
 
   markdown2 = callPackage ../development/python-modules/markdown2 { };
 
-  evernote = buildPythonPackage rec {
-    name = "evernote-${version}";
-    version = "1.25.0";
-    disabled = ! isPy27; #some dependencies do not work with py3
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/evernote/${name}.tar.gz";
-      sha256 = "1lwlg6fpi3530245jzham1400a5b855bm4sbdyck229h9kg1v02d";
-    };
-
-     propagatedBuildInputs = with self; [ oauth2 ];
-
-     meta = {
-      description = "Evernote SDK for Python";
-      homepage = http://dev.evernote.com;
-      license = licenses.asl20;
-      maintainers = with maintainers; [ hbunke ];
-     };
-  };
-
-  setproctitle = buildPythonPackage rec {
-    name = "python-setproctitle-${version}";
-    version = "1.1.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/setproctitle/setproctitle-${version}.tar.gz";
-      sha256 = "1mqadassxcm0m9r1l02m5vr4bbandn48xz8gifvxmb4wiz8i8d0w";
-    };
-
-    meta = {
-      description = "Allows a process to change its title (as displayed by system tools such as ps and top)";
-      homepage =  https://github.com/dvarrazzo/py-setproctitle;
-      license = licenses.bsdOriginal;
-      maintainers = with maintainers; [ exi ];
-    };
-  };
-
-  thrift = buildPythonPackage rec {
-    name = "thrift-${version}";
-    version = "0.9.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/thrift/${name}.tar.gz";
-      sha256 = "dfbc3d3bd19d396718dab05abaf46d93ae8005e2df798ef02e32793cd963877e";
-    };
-
-    # No tests. Breaks when not disabling.
-    doCheck = false;
+  evernote = callPackage ../development/python-modules/evernote { };
 
-    meta = {
-      description = "Python bindings for the Apache Thrift RPC system";
-      homepage = http://thrift.apache.org/;
-      license = licenses.asl20;
-      maintainers = with maintainers; [ hbunke ];
+  setproctitle = callPackage ../development/python-modules/setproctitle { };
 
-    };
-  };
+  thrift = callPackage ../development/python-modules/thrift { };
 
-  geeknote = buildPythonPackage rec {
-    version = "2015-05-11";
-    name = "geeknote-${version}";
-    disabled = ! isPy27;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "VitaliyRodnenko";
-      repo = "geeknote";
-      rev = "8489a87d044e164edb321ba9acca8d4631de3dca";
-      sha256 = "0l16v4xnyqnsf84b1pma0jmdyxvmfwcv3sm8slrv3zv7zpmcm3lf";
-    };
-
-    /* build with tests fails with "Can not create application dirictory :
-     /homeless-shelter/.geeknotebuilder". */
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [
-        thrift
-        beautifulsoup4
-        markdown2
-        sqlalchemy
-        html2text
-        evernote
-    ];
-
-    meta = {
-      description = "Work with Evernote from command line";
-      homepage = http://www.geeknote.me;
-      license = licenses.gpl1;
-      maintainers = with maintainers; [ hbunke ];
-
-    };
-  };
+  geeknote = callPackage ../development/python-modules/geeknote { };
 
   trollius = callPackage ../development/python-modules/trollius {};
 
   neovim = callPackage ../development/python-modules/neovim {};
 
-  neovim_gui = buildPythonPackage rec {
-    name = "neovim-pygui-${self.neovim.version}";
-    version = "0.1.3";
-    disabled = !isPy27;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "neovim";
-      repo = "python-gui";
-      rev = version;
-      sha256 = "1vpvr3zm3f9sxg1z1cl7f7gi8v1xksjdvxj62qnw65aqj3zqxnkz";
-    };
-
-    propagatedBuildInputs = [
-      self.neovim
-      self.click
-      self.pygobject3
-      pkgs.gobjectIntrospection
-      pkgs.makeWrapper
-      pkgs.gtk3
-    ];
-
-    patchPhase = ''
-      sed -i -e "s|entry_points=entry_points,|entry_points=dict(console_scripts=['pynvim=neovim.ui.cli:main [GUI]']),|" setup.py
-    '';
-
-    postInstall = ''
-      wrapProgram $out/bin/pynvim \
-        --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
-        --prefix PYTHONPATH : "${self.pygobject3}/lib/python2.7/site-packages:$PYTHONPATH"
-    '';
-  };
-
-  typogrify = buildPythonPackage rec {
-    name = "typogrify-2.0.7";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/typogrify/${name}.tar.gz";
-      sha256 = "8be4668cda434163ce229d87ca273a11922cb1614cb359970b7dc96eed13cb38";
-    };
-    disabled = isPyPy;
-    # Wants to set up Django
-    doCheck = false;
-    propagatedBuildInputs = with self; [ django smartypants jinja2 ];
-    meta = {
-      description = "Filters to enhance web typography, including support for Django & Jinja templates";
-      homepage = "https://github.com/mintchaos/typogrify";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
-
-  smartypants = buildPythonPackage rec {
-    version = "1.8.6";
-    name = "smartypants-${version}";
-    src = pkgs.fetchhg {
-      url = "https://bitbucket.org/livibetter/smartypants.py";
-      rev = "v${version}";
-      sha256 = "1cmzz44d2hm6y8jj2xcq1wfr26760gi7iq92ha8xbhb1axzd7nq6";
-    };
-    disabled = isPyPy;
-    buildInputs = with self; [ ]; #docutils pygments ];
-    meta = {
-      description = "Python with the SmartyPants";
-      homepage = "https://bitbucket.org/livibetter/smartypants.py";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
+  neovim_gui = callPackage ../development/python-modules/neovim_gui { };
 
-  pypeg2 = buildPythonPackage rec {
-    version = "2.15.2";
-    name = "pypeg2-${version}";
+  typogrify = callPackage ../development/python-modules/typogrify { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyPEG2/pyPEG2-${version}.tar.gz";
-      sha256 = "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b";
-    };
-
-    checkPhase = ''
-      # The tests assume that test_xmlast does not run before test_pyPEG2.
-      python -m unittest pypeg2.test.test_pyPEG2 pypeg2.test.test_xmlast
-    '';
+  smartypants = callPackage ../development/python-modules/smartypants { };
 
-    #https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
-    doCheck = !isPy3k;
-
-    meta = {
-      description = "PEG parser interpreter in Python";
-      homepage = http://fdik.org/pyPEG;
-      license = licenses.gpl2;
-    };
-  };
+  pypeg2 = callPackage ../development/python-modules/pypeg2 { };
 
   torchvision = callPackage ../development/python-modules/torchvision { };
 
-  jenkinsapi = buildPythonPackage rec {
-    name = "jenkinsapi-${version}";
-    version = "0.2.32";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jenkinsapi/${name}.tar.gz";
-      sha256 = "0fcc78b8dfc87237942aad2a8be54dbc08bc4afceaa7f6897f3d894e7d4bfd22";
-    };
+  jenkinsapi = callPackage ../development/python-modules/jenkinsapi { };
 
-    propagatedBuildInputs = with self; [ pytz requests ];
+  jenkins-job-builder = callPackage ../development/python-modules/jenkins-job-builder { };
 
-    buildInputs = with self; [ coverage mock nose unittest2 ];
-
-    meta = {
-      description = "A Python API for accessing resources on a Jenkins continuous-integration server";
-      homepage = https://github.com/salimfadhley/jenkinsapi;
-      maintainers = with maintainers; [ drets ];
-      license = licenses.mit;
-    };
-  };
-
-  jenkins-job-builder = buildPythonPackage rec {
-    name = "jenkins-job-builder-2.0.0.0b2";
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jenkins-job-builder/${name}.tar.gz";
-      sha256 = "1y0yl2w6c9c91f9xbjkvff1ag8p72r24nzparrzrw9sl8kn9632x";
-    };
-
-    patchPhase = ''
-      export HOME=$TMPDIR
-    '';
-
-    buildInputs = with self; [
-      pip
-    ];
-
-    propagatedBuildInputs = with self; [
-      pbr
-      mock
-      python-jenkins
-      pyyaml
-      six
-      stevedore
-    ];
-
-    meta = {
-      description = "Jenkins Job Builder is a system for configuring Jenkins jobs using simple YAML files stored in Git";
-      homepage = "https://docs.openstack.org/infra/system-config/jjb.html";
-      license = licenses.asl20;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
-
-  dot2tex = buildPythonPackage rec {
-    name = "dot2tex-2.9.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/dot2tex/dot2tex-2.9.0.tar.gz";
-      sha256 = "7d3e54add7dccdaeb6cc9e61ceaf7b587914cf8ebd6821cfea008acdc1e50d4a";
-    };
-
-    # Tests fail with 3.x. Furthermore, package is no longer maintained.
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [
-      pyparsing
-    ];
-
-    meta = {
-      description = "Convert graphs generated by Graphviz to LaTeX friendly formats";
-      homepage = "https://github.com/kjellmf/dot2tex";
-      license = licenses.mit;
-    };
-  };
+  dot2tex = callPackage ../development/python-modules/dot2tex { };
 
   poezio = callPackage ../applications/networking/instant-messengers/poezio { };
 
@@ -10131,210 +4663,31 @@ EOF
 
   pafy = callPackage ../development/python-modules/pafy { };
 
-  suds = buildPythonPackage rec {
-    name = "suds-0.4";
-    disabled = isPy3k;
+  suds = callPackage ../development/python-modules/suds { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/suds/suds-0.4.tar.gz";
-      sha256 = "1w4s9051iv90c0gs73k80c3d51y2wbx1xgfdgg2hk7mv4gjlllnm";
-    };
-
-    patches = [ ../development/python-modules/suds-0.4-CVE-2013-2217.patch ];
-
-    meta = with stdenv.lib; {
-      # Broken for security issues:
-      # - https://github.com/NixOS/nixpkgs/issues/19678
-      # - https://lwn.net/Vulnerabilities/559200/
-      broken = true;
-      description = "Lightweight SOAP client";
-      homepage = https://fedorahosted.org/suds;
-      license = licenses.lgpl3Plus;
-    };
-  };
-
-  suds-jurko = buildPythonPackage rec {
-    name = "suds-jurko-${version}";
-    version = "0.6";
-    disabled = isPyPy;  # lots of failures
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/suds-jurko/${name}.zip";
-      sha256 = "1s4radwf38kdh3jrn5acbidqlr66sx786fkwi0rgq61hn4n2bdqw";
-    };
-
-    buildInputs = [ self.pytest ];
-
-    preBuild = ''
-      # fails
-      substituteInPlace tests/test_transport_http.py \
-        --replace "test_sending_unicode_data" "noop"
-    '';
-
-    meta = with stdenv.lib; {
-      description = "Lightweight SOAP client (Jurko's fork)";
-      homepage = https://bitbucket.org/jurko/suds;
-    };
-  };
-
-  mailcap-fix = buildPythonPackage rec {
-    name = "mailcap-fix-${version}";
-    version = "1.0.1";
-
-    disabled = isPy36; # this fix is merged into python 3.6
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mailcap-fix/${name}.tar.gz";
-      sha256 = "02lijkq6v379r8zkqg9q2srin3i80m4wvwik3hcbih0s14v0ng0i";
-    };
+  suds-jurko = callPackage ../development/python-modules/suds-jurko { };
 
-    meta = with stdenv.lib; {
-      description = "A patched mailcap module that conforms to RFC 1524";
-      homepage = "https://github.com/michael-lazar/mailcap_fix";
-      license = licenses.unlicense;
-    };
-  };
-
-  maildir-deduplicate = buildPythonPackage rec {
-    name = "maildir-deduplicate-${version}";
-    version = "1.0.2";
-
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/maildir-deduplicate/${name}.tar.gz";
-      sha256 = "1xy5z756alrjgpl9qx2gdx898rw1mryrqkwmipbh39mgrvkl3fz9";
-    };
-
-    propagatedBuildInputs = with self; [ click ];
-
-    meta = with stdenv.lib; {
-      description = "Command-line tool to deduplicate mails from a set of maildir folders";
-      homepage = "https://github.com/kdeldycke/maildir-deduplicate";
-      license = licenses.gpl2;
-    };
-  };
+  mailcap-fix = callPackage ../development/python-modules/mailcap-fix { };
 
+  maildir-deduplicate = callPackage ../development/python-modules/maildir-deduplicate { };
 
-  mps-youtube = buildPythonPackage rec {
-    name = "mps-youtube-${version}";
-    version = "0.2.7.1";
-
-    disabled = (!isPy3k);
-
-    # disabled due to error in loading unittest
-    # don't know how to make test from: <mps_youtube. ...>
-    doCheck = false;
-
-    # before check create a directory and redirect XDG_CONFIG_HOME to it
-    preCheck = ''
-      mkdir -p check-phase
-      export XDG_CONFIG_HOME=$(pwd)/check-phase
-    '';
-
-    src = pkgs.fetchFromGitHub {
-      owner = "mps-youtube";
-      repo = "mps-youtube";
-      rev = "v${version}";
-      sha256 = "16zn5gwb3568w95lr21b88zkqlay61p1541sa9c3x69zpi8v0pys";
-    };
-
-    propagatedBuildInputs = with self; [ pafy ];
-
-    meta = with stdenv.lib; {
-      description = "Terminal based YouTube player and downloader";
-      homepage = https://github.com/np1/mps-youtube;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ odi ];
-    };
-  };
+  mps-youtube = callPackage ../development/python-modules/mps-youtube { };
 
   d2to1 = callPackage ../development/python-modules/d2to1 { };
 
   ovh = callPackage ../development/python-modules/ovh { };
 
-  willow = buildPythonPackage rec {
-    name = "willow-${version}";
-    version = "0.2.2";
-    disabled = pythonOlder "2.7";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/Willow/Willow-${version}.tar.gz";
-      sha256 = "111c82fbfcda2710ce6201b0b7e0cfa1ff3c4f2f0dc788cc8dfc8db933c39c73";
-    };
-
-    propagatedBuildInputs = with self; [ six pillow ];
-
-    # Test data is not included
-    # https://github.com/torchbox/Willow/issues/34
-    doCheck = false;
-
-    meta = {
-      description = "A Python image library that sits on top of Pillow, Wand and OpenCV";
-      homepage = https://github.com/torchbox/Willow/;
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ desiderius ];
-    };
-  };
-
-  importmagic = buildPythonPackage rec {
-    simpleName = "importmagic";
-    name = "${simpleName}-${version}";
-    version = "0.1.3";
-    doCheck = false;  # missing json file from tarball
+  willow = callPackage ../development/python-modules/willow { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/${simpleName}/${name}.tar.gz";
-      sha256 = "194bl8l8sc2ibwi6g5kz6xydkbngdqpaj6r2gcsaw1fc73iswwrj";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-
-    meta = {
-      description = "Python Import Magic - automagically add, remove and manage imports";
-      homepage = https://github.com/alecthomas/importmagic;
-      license = "bsd";
-    };
-  };
+  importmagic = callPackage ../development/python-modules/importmagic { };
 
   xgboost = callPackage ../development/python-modules/xgboost {
     xgboost = pkgs.xgboost;
   };
 
-  xkcdpass = buildPythonPackage rec {
-    name = "xkcdpass-${version}";
-    version = "1.4.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xkcdpass/xkcdpass-1.4.2.tar.gz";
-      sha256 = "4c1f8bee886820c42ccc64c15c3a2275dc6d01028cf6af7c481ded87267d8269";
-    };
+  xkcdpass = callPackage ../development/python-modules/xkcdpass { };
 
-    # No tests included
-    # https://github.com/redacted/XKCD-password-generator/issues/32
-    doCheck = false;
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/xkcdpass/;
-      description = "Generate secure multiword passwords/passphrases, inspired by XKCD";
-      license = licenses.bsd3;
-      maintainers = [ ];
-    };
-  };
-
-  xlsx2csv = buildPythonPackage rec {
-    name = "xlsx2csv-${version}";
-    version = "0.7.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xlsx2csv/${name}.tar.gz";
-      sha256 = "7c6c8fa6c2774224d03a6a96049e116822484dccfa3634893397212ebcd23866";
-    };
-    meta = {
-      homepage = https://github.com/bitprophet/alabaster;
-      description = "Convert xlsx to csv";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ jb55 ];
-    };
-  };
+  xlsx2csv = callPackage ../development/python-modules/xlsx2csv { };
 
   xmpppy = callPackage ../development/python-modules/xmpppy {};
 
@@ -10376,45 +4729,9 @@ EOF
 
   trezor = callPackage ../development/python-modules/trezor { };
 
-  trezor_agent = buildPythonPackage rec{
-    name = "${pname}-${version}";
-    pname = "trezor_agent";
-    version = "0.9.0";
+  trezor_agent = callPackage ../development/python-modules/trezor_agent { };
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "1i5cdamlf3c0ym600pjklij74p8ifj9cv7xrpnrfl1b8nkadswbz";
-    };
-
-    propagatedBuildInputs = with self; [
-      trezor libagent ecdsa ed25519
-      mnemonic keepkey semver
-    ];
-
-    meta = {
-      description = "Using Trezor as hardware SSH agent";
-      homepage = https://github.com/romanz/trezor-agent;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ np ];
-    };
-  };
-
-  x11_hash = buildPythonPackage rec{
-    version = "1.4";
-    name = "x11_hash-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/x11_hash/${name}.tar.gz";
-      sha256 = "172skm9xbbrivy1p4xabxihx9lsnzi53hvzryfw64m799k2fmp22";
-    };
-
-    meta = {
-      description = "Binding for X11 proof of work hashing";
-      homepage = https://github.com/mazaclub/x11_hash;
-      license = licenses.mit;
-      maintainers = with maintainers; [ np ];
-    };
-  };
+  x11_hash = callPackage ../development/python-modules/x11_hash { };
 
   termstyle = callPackage ../development/python-modules/termstyle { };
 
@@ -10422,90 +4739,17 @@ EOF
 
   topydo = throw "python3Packages.topydo was moved to topydo"; # 2017-09-22
 
-  w3lib = buildPythonPackage rec {
-    name = "w3lib-${version}";
-    version = "1.17.0";
+  w3lib = callPackage ../development/python-modules/w3lib { };
 
-    buildInputs = with self ; [ six pytest ];
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/w3lib/${name}.tar.gz";
-      sha256 = "0vshh300ay5wn5hwl9qcb32m71pz5s6miy0if56vm4nggy159inq";
-    };
-
-    meta = {
-      description = "A library of web-related functions";
-      homepage = "https://github.com/scrapy/w3lib";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ drewkett ];
-    };
-  };
-
-  queuelib = buildPythonPackage rec {
-    name = "queuelib-${version}";
-    version = "1.4.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/q/queuelib/${name}.tar.gz";
-      sha256 = "a6829918157ed433fafa87b0bb1e93e3e63c885270166db5884a02c34c86f914";
-    };
-
-    buildInputs = with self ; [ pytest ];
-
-    meta = {
-      description = "A collection of persistent (disk-based) queues for Python";
-      homepage = "https://github.com/scrapy/queuelib";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ drewkett ];
-    };
-  };
+  queuelib = callPackage ../development/python-modules/queuelib { };
 
   scrapy = callPackage ../development/python-modules/scrapy { };
 
-  pandocfilters = buildPythonPackage rec{
-    version = "1.4.1";
-    pname = "pandocfilters";
-    name = pname + "-${version}";
-
-    src = fetchPypi{
-      inherit pname version;
-      sha256 = "ec8bcd100d081db092c57f93462b1861bcfa1286ef126f34da5cb1d969538acd";
-    };
-    # No tests available
-    doCheck = false;
-
-    meta = {
-      description = "A python module for writing pandoc filters, with a collection of examples";
-      homepage = https://github.com/jgm/pandocfilters;
-      license = licenses.mit;
-      maintainers = with maintainers; [];
-    };
-  };
+  pandocfilters = callPackage ../development/python-modules/pandocfilters { };
 
   htmltreediff = callPackage ../development/python-modules/htmltreediff { };
 
-  repeated_test = buildPythonPackage rec {
-    name = "repeated_test-${version}";
-    version = "0.1a3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/repeated-test/${name}.tar.gz";
-      sha256 = "062syp7kl2g0x6qx3z8zb5sdycpi7qcpxp9iml2v8dqzqnij9bpg";
-    };
-
-    buildInputs = with self; [
-      unittest2
-    ];
-    propagatedBuildInputs = with self; [
-      six
-    ];
-
-    meta = {
-      description = "A quick unittest-compatible framework for repeating a test function over many fixtures";
-      homepage = "https://github.com/epsy/repeated_test";
-      license = licenses.mit;
-    };
-  };
+  repeated_test = callPackage ../development/python-modules/repeated_test { };
 
   Keras = callPackage ../development/python-modules/keras { };
 
@@ -10513,117 +4757,19 @@ EOF
 
   keras-preprocessing = callPackage ../development/python-modules/keras-preprocessing { };
 
-  Lasagne = buildPythonPackage rec {
-    name = "Lasagne-${version}";
-    version = "0.1";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/lasagne/${name}.tar.gz";
-      sha256 = "0cqj86rdm6c7y5vq3i13qy76fg5xi3yjp4r0hpqy8hvynv54wqrw";
-    };
-
-    propagatedBuildInputs = with self; [
-      numpy
-      Theano
-    ];
-
-    # there are no tests
-    doCheck = false;
-
-    meta = {
-      description = "Lightweight library to build and train neural networks in Theano";
-      homepage = "https://github.com/Lasagne/Lasagne";
-      maintainers = with maintainers; [ NikolaMandic ];
-      license = licenses.mit;
-    };
-  };
+  Lasagne = callPackage ../development/python-modules/lasagne { };
 
   send2trash = callPackage ../development/python-modules/send2trash { };
 
-  sigtools = buildPythonPackage rec {
-    name = "sigtools-${version}";
-    version = "1.1a3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sigtools/${name}.tar.gz";
-      sha256 = "190w14vzbiyvxcl9jmyyimpahar5b0bq69v9iv7chi852yi71w6w";
-    };
+  sigtools = callPackage ../development/python-modules/sigtools { };
 
-    buildInputs = with self; [
-      repeated_test
-      sphinx
-      mock
-      coverage
-      unittest2
-    ];
-    propagatedBuildInputs = with self; [
-      funcsigs
-      six
-    ];
-
-    patchPhase = ''sed -i s/test_suite="'"sigtools.tests"'"/test_suite="'"unittest2.collector"'"/ setup.py'';
-
-    meta = {
-      description = "Utilities for working with 3.3's inspect.Signature objects.";
-      homepage = "https://pypi.python.org/pypi/sigtools";
-      license = licenses.mit;
-    };
-  };
+  clize = callPackage ../development/python-modules/clize { };
 
-  clize = buildPythonPackage rec {
-    name = "clize-${version}";
-    version = "3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/c/clize/${name}.tar.gz";
-      sha256 = "1xkr3h404d7pgj5gdpg6bddv3v3yq2hgx8qlwkgw5abg218k53hm";
-    };
-
-    buildInputs = with self; [
-      dateutil
-    ];
-    propagatedBuildInputs = with self; [
-      sigtools
-    ];
-
-    meta = {
-      description = "Command-line argument parsing for Python";
-      homepage = "https://github.com/epsy/clize";
-      license = licenses.mit;
-    };
-  };
-
-  zerobin = buildPythonPackage rec {
-    name = "zerobin-${version}";
-    version = "20160108";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "sametmax";
-      repo = "0bin";
-      rev = "7da1615";
-      sha256 = "1pzcwy454kn5216pvwjqzz311s6jbh7viw9s6kw4xps6f5h44bid";
-    };
-
-    propagatedBuildInputs = with self; [
-      cherrypy
-      bottle
-      lockfile
-      clize
-    ];
-    # zerobin doesn't have any tests, but includes a copy of cherrypy which
-    # can wrongly fail the check phase.
-    doCheck = false;
-    meta = {
-      description = "A client side encrypted pastebin";
-      homepage = https://0bin.net/;
-      license = licenses.wtfpl;
-    };
-  };
+  zerobin = callPackage ../development/python-modules/zerobin { };
 
   tensorflow-tensorboard = callPackage ../development/python-modules/tensorflow-tensorboard { };
 
-  tensorflow =
+  tensorflow = disabledIf isPy37 (
     if stdenv.isDarwin
     then callPackage ../development/python-modules/tensorflow/bin.nix { }
     else callPackage ../development/python-modules/tensorflow/bin.nix rec {
@@ -10631,7 +4777,7 @@ EOF
       inherit (pkgs.linuxPackages) nvidia_x11;
       cudatoolkit = pkgs.cudatoolkit_9_0;
       cudnn = pkgs.cudnn_cudatoolkit_9_0;
-    };
+    });
 
   tensorflowWithoutCuda = self.tensorflow.override {
     cudaSupport = false;
@@ -10643,144 +4789,27 @@ EOF
 
   tflearn = callPackage ../development/python-modules/tflearn { };
 
-  simpleai = buildPythonPackage rec {
-     version = "0.7.11";
-     name = "simpleai-${version}";
-
-     src = pkgs.fetchurl {
-       url= "https://pypi.python.org/packages/source/s/simpleai/${name}.tar.gz";
-       sha256 = "03frjc5jxsz9xm24jz7qa4hcp0dicgazrxkdsa2rsnir672lwkwz";
-     };
-
-     propagatedBuildInputs = with self; [ numpy ];
-
-     disabled = isPy3k;
-
-     #No tests in archive
-     doCheck = false;
-
-     meta = {
-       homepage = https://github.com/simpleai-team/simpleai;
-       description = "This lib implements many of the artificial intelligence algorithms described on the book 'Artificial Intelligence, a Modern Approach'";
-       maintainers = with maintainers; [ NikolaMandic ];
-     };
-  };
-
-  word2vec = buildPythonPackage rec {
-    name = "word2vec-${version}";
-    version = "0.9.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/word2vec/${name}.tar.gz";
-      sha256 = "a811e3e98a8e6dfe7bc851ebbbc2d6e5ab5142f2a134dd3c03daac997b546faa";
-    };
-
-    propagatedBuildInputs = with self; [ cython numpy ];
+  simpleai = callPackage ../development/python-modules/simpleai { };
 
-    checkPhase = ''
-     cd word2vec/tests;
-      ${python.interpreter} test_word2vec.py
-    '';
-
-    meta = {
-      description = "Tool for computing continuous distributed representations of words";
-      homepage = "https://github.com/danielfrg/word2vec";
-      license     = licenses.asl20;
-      maintainers = with maintainers; [ NikolaMandic ];
-    };
-  };
-
-  tvdb_api = buildPythonPackage rec {
-    name = "tvdb_api-${version}";
-    version = "1.10";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/tvdb_api/${name}.tar.gz";
-      sha256 = "0hq887yb3rwc0rcw32lh7xdkk9bbrqy274aspzqkd6f7dyhp73ih";
-    };
+  word2vec = callPackage ../development/python-modules/word2vec { };
 
-    propagatedBuildInputs = with self; [ requests-cache ];
-
-    meta = {
-      description = "Simple to use TVDB (thetvdb.com) API in Python.";
-      homepage = "https://github.com/dbr/tvdb_api";
-      license = licenses.unlicense;
-      maintainers = with maintainers; [ peterhoeg ];
-    };
-  };
-
-  tvnamer = buildPythonPackage rec {
-    name = "tvnamer-${version}";
-    version = "2.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/tvnamer/${name}.tar.gz";
-      sha256 = "10iizmwna2xpyc2694hsrvny68y3bdq576p8kxsvg5gj2spnsxav";
-    };
-
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [ tvdb_api ];
-
-    # a ton of tests fail with: IOError: tvnamer/main.py could not be found in . or ..
-    doCheck = false;
+  tvdb_api = callPackage ../development/python-modules/tvdb_api { };
 
-    meta = {
-      description = "Automatic TV episode file renamer, uses data from thetvdb.com via tvdb_api.";
-      homepage = "https://github.com/dbr/tvnamer";
-      license = licenses.unlicense;
-      maintainers = with maintainers; [ peterhoeg ];
-    };
-  };
+  sdnotify = callPackage ../development/python-modules/sdnotify { };
 
-  threadpool = buildPythonPackage rec {
-    name = "threadpool-${version}";
-    version = "1.3.2";
+  tvnamer = callPackage ../development/python-modules/tvnamer { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/threadpool/${name}.tar.bz2";
-      sha256 = "197gzrxn9lbk0q1v079814c6s05cr4rwzyl6c1m6inkyif4yzr6c";
-    };
-  };
+  threadpool = callPackage ../development/python-modules/threadpool { };
 
   rocket-errbot = callPackage ../development/python-modules/rocket-errbot {  };
 
-  Yapsy = buildPythonPackage rec {
-    name = "Yapsy-${version}";
-    version = "1.11.223";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/y/yapsy/${name}.tar.gz";
-      sha256 = "19pjsnqizswnczhlav4lb7zlzs0n73ijrsgksy4374b14jkkkfs5";
-    };
-
-    doCheck = false;
-  };
+  Yapsy = callPackage ../development/python-modules/yapsy { };
 
   ansi = callPackage ../development/python-modules/ansi { };
 
-  pygments-markdown-lexer = buildPythonPackage rec {
-    name = "pygments-markdown-lexer-${version}";
-    version = "0.1.0.dev39";
+  pygments-markdown-lexer = callPackage ../development/python-modules/pygments-markdown-lexer { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pygments-markdown-lexer/${name}.zip";
-      sha256 = "1pzb5wy23q3fhs0rqzasjnw6hdzwjngpakb73i98cn0b8lk8q4jc";
-    };
-
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ pygments ];
-  };
-
-  telegram = buildPythonPackage rec {
-    name = "telegram-${version}";
-    version = "0.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/t/telegram/${name}.tar.gz";
-      sha256 = "1495l2ml8mg120wfvqhikqkfczhwwaby40vdmsz8v2l69jps01fl";
-    };
-  };
+  telegram = callPackage ../development/python-modules/telegram { };
 
   python-telegram-bot = callPackage ../development/python-modules/python-telegram-bot { };
 
@@ -10808,46 +4837,11 @@ EOF
 
   hypchat = callPackage ../development/python-modules/hypchat { };
 
-  pivy = buildPythonPackage rec {
-    version = "20101207";
-    name = "pivy-${version}";
-    src = pkgs.fetchhg {
-      url = "https://bitbucket.org/Coin3D/pivy";
-      rev = "8eab90908f2a3adcc414347566f4434636202344";
-      sha256 = "18n14ha2d3j3ghg2f2aqnf2mks94nn7ma9ii7vkiwcay93zm82cf";
-    };
-    disabled = isPy3k; # Judging from SyntaxError
-    buildInputs = with self; [ pkgs.swig1 pkgs.coin3d pkgs.soqt pkgs.libGLU_combined pkgs.xorg.libXi ];
-  };
+  pivy = callPackage ../development/python-modules/pivy { };
 
   smugpy = callPackage ../development/python-modules/smugpy { };
 
-  smugline = stdenv.mkDerivation rec {
-    name    = pname + "-" + version;
-    pname   = "smugline";
-    version = "20160106";
-
-    src = pkgs.fetchFromGitHub {
-      owner  = "gingerlime";
-      repo   = pname;
-      rev    = "134554c574c2d282112ba60165a8c5ffe0f16fd4";
-      sha256 = "00n012ijkdrx8wsl8x3ghdcxcdp29s4kwr3yxvlyj79g5yhfvaj6";
-    };
-
-    phases = [ "unpackPhase" "installPhase" ];
-
-    buildInputs = [ python pkgs.makeWrapper ];
-
-    propagatedBuildInputs = with self; [ docopt requests smugpy ];
-
-    installPhase = ''
-      mkdir -p $out/bin $out/libexec
-      cp smugline.py $out/libexec
-      makeWrapper ${python.interpreter} $out/bin/smugline \
-        --add-flags "$out/libexec/smugline.py" \
-        --prefix PYTHONPATH : "$PYTHONPATH"
-    '';
-  };
+  smugline = callPackage ../development/python-modules/smugline { };
 
   txaio = callPackage ../development/python-modules/txaio { };
 
@@ -10881,12 +4875,16 @@ EOF
 
   packaging = callPackage ../development/python-modules/packaging { };
 
+  preggy = callPackage ../development/python-modules/preggy { };
+
   pytoml = callPackage ../development/python-modules/pytoml { };
 
   pypandoc = callPackage ../development/python-modules/pypandoc { };
 
   yamllint = callPackage ../development/python-modules/yamllint { };
 
+  yanc = callPackage ../development/python-modules/yanc { };
+
   yarl = callPackage ../development/python-modules/yarl { };
 
   suseapi = callPackage ../development/python-modules/suseapi { };
@@ -11046,23 +5044,17 @@ EOF
 
   simpy = callPackage ../development/python-modules/simpy { };
 
+  yattag = callPackage ../development/python-modules/yattag { };
+
   z3 = (toPythonModule (pkgs.z3.override {
     inherit python;
   })).python;
 
   rfc7464 = callPackage ../development/python-modules/rfc7464 { };
 
-  foundationdb51 = (toPythonModule (pkgs.fdbPackages.override {
-    inherit python;
-  }).foundationdb51).python;
-
-  foundationdb52 = (toPythonModule (pkgs.fdbPackages.override {
-    inherit python;
-  }).foundationdb52).python;
-
-  foundationdb60 = (toPythonModule (pkgs.fdbPackages.override {
-    inherit python;
-  }).foundationdb60).python;
+  foundationdb51 = callPackage ../servers/foundationdb/python.nix { foundationdb = pkgs.foundationdb51; };
+  foundationdb52 = callPackage ../servers/foundationdb/python.nix { foundationdb = pkgs.foundationdb52; };
+  foundationdb60 = callPackage ../servers/foundationdb/python.nix { foundationdb = pkgs.foundationdb60; };
 
   libtorrentRasterbar = (toPythonModule (pkgs.libtorrentRasterbar.override {
     inherit python;
@@ -11074,6 +5066,10 @@ EOF
 
   scour = callPackage ../development/python-modules/scour { };
 
+  pymssql = callPackage ../development/python-modules/pymssql { };
+
+  nanoleaf = callPackage ../development/python-modules/nanoleaf { };
+
 });
 
 in fix' (extends overrides packages)
diff --git a/pkgs/top-level/release-lib.nix b/pkgs/top-level/release-lib.nix
index 957de2dcc307..7e7cac95b9c5 100644
--- a/pkgs/top-level/release-lib.nix
+++ b/pkgs/top-level/release-lib.nix
@@ -54,7 +54,7 @@ rec {
   # More poor man's memoisation
   pkgsForCross = let
     examplesByConfig = lib.flip lib.mapAttrs'
-      (builtins.removeAttrs lib.systems.examples [ "riscv" ])
+      lib.systems.examples
       (_: crossSystem: nameValuePair crossSystem.config {
         inherit crossSystem;
         pkgsFor = mkPkgsFor crossSystem;