summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2018-10-21 08:37:30 +0200
committerFrederik Rietdijk <fridh@fridh.nl>2018-10-21 08:37:30 +0200
commit86c7662be0a2cef3d1d6f152e84ff436129dd2c1 (patch)
treea195f510944c7d8f9a4efc683816491a05a269d9 /pkgs
parent04ce4c3e42ec15c4420657052110d928dbdf5d84 (diff)
parentca6ee8f519733e1f45b7598d995245dd687f535c (diff)
downloadnixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar.gz
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar.bz2
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar.lz
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar.xz
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.tar.zst
nixlib-86c7662be0a2cef3d1d6f152e84ff436129dd2c1.zip
Merge staging-next into master
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/audio/gtkpod/default.nix6
-rw-r--r--pkgs/applications/audio/jamin/default.nix10
-rw-r--r--pkgs/applications/graphics/cinepaint/default.nix8
-rw-r--r--pkgs/applications/graphics/dia/default.nix9
-rw-r--r--pkgs/applications/graphics/gcolor2/default.nix5
-rw-r--r--pkgs/applications/graphics/inkscape/default.nix5
-rw-r--r--pkgs/applications/misc/get_iplayer/default.nix8
-rw-r--r--pkgs/applications/networking/instant-messengers/ekiga/default.nix7
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin/default.nix7
-rw-r--r--pkgs/applications/networking/instant-messengers/poezio/default.nix28
-rw-r--r--pkgs/applications/office/gnumeric/default.nix12
-rw-r--r--pkgs/applications/video/kino/default.nix5
-rw-r--r--pkgs/applications/video/wxcam/default.nix10
-rw-r--r--pkgs/applications/video/xvidcap/default.nix10
-rw-r--r--pkgs/data/misc/shared-mime-info/default.nix7
-rw-r--r--pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix5
-rw-r--r--pkgs/development/interpreters/python/wrapper.nix4
-rw-r--r--pkgs/development/libraries/avahi/default.nix5
-rw-r--r--pkgs/development/libraries/freetype/default.nix4
-rw-r--r--pkgs/development/libraries/libgksu/default.nix22
-rw-r--r--pkgs/development/libraries/libgpod/default.nix7
-rw-r--r--pkgs/development/libraries/libxml2/default.nix3
-rw-r--r--pkgs/development/libraries/protobuf/generic-v3.nix14
-rw-r--r--pkgs/development/libraries/rarian/default.nix5
-rw-r--r--pkgs/development/python-modules/Cython/default.nix13
-rw-r--r--pkgs/development/python-modules/Fabric/default.nix36
-rw-r--r--pkgs/development/python-modules/Theano/default.nix4
-rw-r--r--pkgs/development/python-modules/alabaster/default.nix4
-rw-r--r--pkgs/development/python-modules/autobahn/default.nix4
-rw-r--r--pkgs/development/python-modules/beancount/default.nix4
-rw-r--r--pkgs/development/python-modules/bedup/default.nix42
-rw-r--r--pkgs/development/python-modules/binwalk/default.nix37
-rw-r--r--pkgs/development/python-modules/bootstrapped-pip/default.nix12
-rw-r--r--pkgs/development/python-modules/box2d/default.nix37
-rw-r--r--pkgs/development/python-modules/box2d/disable-test.patch14
-rw-r--r--pkgs/development/python-modules/bsddb3/default.nix38
-rw-r--r--pkgs/development/python-modules/bugz/default.nix26
-rw-r--r--pkgs/development/python-modules/buildout-nix/default.nix4
-rw-r--r--pkgs/development/python-modules/buildout/default.nix4
-rw-r--r--pkgs/development/python-modules/bumps/default.nix4
-rw-r--r--pkgs/development/python-modules/caldavclientlibrary-asynk/default.nix35
-rw-r--r--pkgs/development/python-modules/capstone/default.nix38
-rw-r--r--pkgs/development/python-modules/carbon/default.nix4
-rw-r--r--pkgs/development/python-modules/cassandra-driver/default.nix55
-rw-r--r--pkgs/development/python-modules/cddb/default.nix24
-rw-r--r--pkgs/development/python-modules/chameleon/default.nix22
-rw-r--r--pkgs/development/python-modules/click-plugins/default.nix4
-rw-r--r--pkgs/development/python-modules/closure-linter/default.nix33
-rw-r--r--pkgs/development/python-modules/cloudpickle/default.nix4
-rw-r--r--pkgs/development/python-modules/cntk/default.nix38
-rw-r--r--pkgs/development/python-modules/colanderalchemy/default.nix35
-rw-r--r--pkgs/development/python-modules/colored/default.nix24
-rw-r--r--pkgs/development/python-modules/cornice/default.nix31
-rw-r--r--pkgs/development/python-modules/cupy/default.nix4
-rw-r--r--pkgs/development/python-modules/cvxopt/default.nix4
-rw-r--r--pkgs/development/python-modules/dask-image/default.nix4
-rw-r--r--pkgs/development/python-modules/ddt/default.nix21
-rw-r--r--pkgs/development/python-modules/deprecation/default.nix4
-rw-r--r--pkgs/development/python-modules/deskcon/default.nix41
-rw-r--r--pkgs/development/python-modules/distributed/default.nix4
-rw-r--r--pkgs/development/python-modules/distutils_extra/default.nix21
-rw-r--r--pkgs/development/python-modules/django/1_8.nix31
-rw-r--r--pkgs/development/python-modules/django_classytags/default.nix27
-rw-r--r--pkgs/development/python-modules/django_colorful/default.nix28
-rw-r--r--pkgs/development/python-modules/django_contrib_comments/default.nix24
-rw-r--r--pkgs/development/python-modules/django_environ/default.nix27
-rw-r--r--pkgs/development/python-modules/django_evolution/default.nix26
-rw-r--r--pkgs/development/python-modules/django_modelcluster/default.nix28
-rw-r--r--pkgs/development/python-modules/django_nose/default.nix28
-rw-r--r--pkgs/development/python-modules/django_reversion/default.nix24
-rw-r--r--pkgs/development/python-modules/django_silk/default.nix37
-rw-r--r--pkgs/development/python-modules/django_taggit/default.nix26
-rw-r--r--pkgs/development/python-modules/django_treebeard/default.nix30
-rw-r--r--pkgs/development/python-modules/dominate/default.nix4
-rw-r--r--pkgs/development/python-modules/dtopt/default.nix24
-rw-r--r--pkgs/development/python-modules/dynd/default.nix43
-rw-r--r--pkgs/development/python-modules/ecdsa/default.nix26
-rw-r--r--pkgs/development/python-modules/editorconfig/default.nix31
-rw-r--r--pkgs/development/python-modules/elpy/default.nix32
-rw-r--r--pkgs/development/python-modules/emoji/default.nix2
-rw-r--r--pkgs/development/python-modules/enum/default.nix26
-rw-r--r--pkgs/development/python-modules/enum34/default.nix27
-rw-r--r--pkgs/development/python-modules/epc/default.nix25
-rw-r--r--pkgs/development/python-modules/et_xmlfile/default.nix40
-rw-r--r--pkgs/development/python-modules/etcd/default.nix34
-rw-r--r--pkgs/development/python-modules/eve/default.nix4
-rw-r--r--pkgs/development/python-modules/eventlet/default.nix33
-rw-r--r--pkgs/development/python-modules/eventlib/default.nix30
-rw-r--r--pkgs/development/python-modules/execnet/default.nix42
-rw-r--r--pkgs/development/python-modules/exifread/default.nix22
-rw-r--r--pkgs/development/python-modules/eyed3/default.nix42
-rw-r--r--pkgs/development/python-modules/factory_boy/default.nix24
-rw-r--r--pkgs/development/python-modules/fake_factory/default.nix33
-rw-r--r--pkgs/development/python-modules/falcon/default.nix37
-rw-r--r--pkgs/development/python-modules/fdroidserver/default.nix35
-rw-r--r--pkgs/development/python-modules/feedparser/default.nix25
-rw-r--r--pkgs/development/python-modules/filebrowser_safe/default.nix40
-rw-r--r--pkgs/development/python-modules/filebytes/default.nix22
-rw-r--r--pkgs/development/python-modules/filelock/default.nix4
-rw-r--r--pkgs/development/python-modules/flaky/default.nix28
-rw-r--r--pkgs/development/python-modules/flask-autoindex/default.nix4
-rw-r--r--pkgs/development/python-modules/flowlogs_reader/default.nix30
-rw-r--r--pkgs/development/python-modules/flup/default.nix23
-rw-r--r--pkgs/development/python-modules/fonttools/default.nix4
-rw-r--r--pkgs/development/python-modules/foolscap/default.nix40
-rw-r--r--pkgs/development/python-modules/forbiddenfruit/default.nix21
-rw-r--r--pkgs/development/python-modules/fudge/default.nix34
-rw-r--r--pkgs/development/python-modules/funcparserlib/default.nix31
-rw-r--r--pkgs/development/python-modules/functools32/default.nix22
-rw-r--r--pkgs/development/python-modules/fusepy/default.nix37
-rw-r--r--pkgs/development/python-modules/gateone/default.nix35
-rw-r--r--pkgs/development/python-modules/gcovr/default.nix21
-rw-r--r--pkgs/development/python-modules/gcutil/default.nix41
-rw-r--r--pkgs/development/python-modules/gdrivefs/default.nix48
-rw-r--r--pkgs/development/python-modules/genanki/default.nix4
-rw-r--r--pkgs/development/python-modules/genshi/default.nix32
-rw-r--r--pkgs/development/python-modules/genzshcomp/default.nix24
-rw-r--r--pkgs/development/python-modules/gevent-socketio/default.nix29
-rw-r--r--pkgs/development/python-modules/gevent-websocket/default.nix27
-rw-r--r--pkgs/development/python-modules/geventhttpclient/default.nix36
-rw-r--r--pkgs/development/python-modules/gipc/default.nix35
-rw-r--r--pkgs/development/python-modules/git-sweep/default.nix25
-rw-r--r--pkgs/development/python-modules/github-webhook/default.nix28
-rw-r--r--pkgs/development/python-modules/github3_py/default.nix45
-rw-r--r--pkgs/development/python-modules/gmusicapi/default.nix37
-rw-r--r--pkgs/development/python-modules/gnureadline/default.nix29
-rw-r--r--pkgs/development/python-modules/gnutls/default.nix31
-rw-r--r--pkgs/development/python-modules/goobook/default.nix38
-rw-r--r--pkgs/development/python-modules/google_apputils/default.nix38
-rw-r--r--pkgs/development/python-modules/gpapi/default.nix4
-rw-r--r--pkgs/development/python-modules/gpsoauth/default.nix36
-rw-r--r--pkgs/development/python-modules/gpy/default.nix4
-rw-r--r--pkgs/development/python-modules/graphite-web/default.nix4
-rw-r--r--pkgs/development/python-modules/graphviz/default.nix25
-rw-r--r--pkgs/development/python-modules/grappelli_safe/default.nix34
-rw-r--r--pkgs/development/python-modules/greenlet/default.nix4
-rw-r--r--pkgs/development/python-modules/grpcio-tools/default.nix4
-rw-r--r--pkgs/development/python-modules/gspread/default.nix21
-rw-r--r--pkgs/development/python-modules/gtimelog/default.nix44
-rw-r--r--pkgs/development/python-modules/gyp/default.nix34
-rw-r--r--pkgs/development/python-modules/hawkauthlib/default.nix26
-rw-r--r--pkgs/development/python-modules/hdbscan/default.nix4
-rw-r--r--pkgs/development/python-modules/helper/default.nix13
-rw-r--r--pkgs/development/python-modules/hetzner/default.nix24
-rw-r--r--pkgs/development/python-modules/hg-git/default.nix27
-rw-r--r--pkgs/development/python-modules/hkdf/default.nix28
-rw-r--r--pkgs/development/python-modules/hovercraft/default.nix36
-rw-r--r--pkgs/development/python-modules/hpack/default.nix21
-rw-r--r--pkgs/development/python-modules/hsaudiotag/default.nix26
-rw-r--r--pkgs/development/python-modules/hsaudiotag3k/default.nix26
-rw-r--r--pkgs/development/python-modules/htmllaundry/default.nix30
-rw-r--r--pkgs/development/python-modules/http_signature/default.nix26
-rw-r--r--pkgs/development/python-modules/httpauth/default.nix24
-rw-r--r--pkgs/development/python-modules/httpretty/default.nix50
-rw-r--r--pkgs/development/python-modules/hug/default.nix30
-rw-r--r--pkgs/development/python-modules/humanize/default.nix28
-rw-r--r--pkgs/development/python-modules/hupper/default.nix4
-rw-r--r--pkgs/development/python-modules/hvac/default.nix4
-rw-r--r--pkgs/development/python-modules/i3-py/default.nix25
-rw-r--r--pkgs/development/python-modules/icalendar/default.nix28
-rw-r--r--pkgs/development/python-modules/identify/default.nix4
-rw-r--r--pkgs/development/python-modules/imageio/default.nix33
-rw-r--r--pkgs/development/python-modules/imagesize/default.nix21
-rw-r--r--pkgs/development/python-modules/imread/default.nix30
-rw-r--r--pkgs/development/python-modules/inflect/default.nix4
-rw-r--r--pkgs/development/python-modules/influxdb/default.nix29
-rw-r--r--pkgs/development/python-modules/infoqscraper/default.nix34
-rw-r--r--pkgs/development/python-modules/inifile/default.nix22
-rw-r--r--pkgs/development/python-modules/iniparse/default.nix30
-rw-r--r--pkgs/development/python-modules/ipaddr/default.nix23
-rw-r--r--pkgs/development/python-modules/ipaddress/default.nix27
-rw-r--r--pkgs/development/python-modules/ipdb/default.nix28
-rw-r--r--pkgs/development/python-modules/ipdbplugin/default.nix26
-rw-r--r--pkgs/development/python-modules/ipfsapi/default.nix30
-rw-r--r--pkgs/development/python-modules/iptools/default.nix24
-rw-r--r--pkgs/development/python-modules/ipywidgets/default.nix4
-rw-r--r--pkgs/development/python-modules/itsdangerous/default.nix21
-rw-r--r--pkgs/development/python-modules/j2cli/default.nix34
-rw-r--r--pkgs/development/python-modules/jdatetime/default.nix4
-rw-r--r--pkgs/development/python-modules/jinja2_time/default.nix25
-rw-r--r--pkgs/development/python-modules/jmespath/default.nix26
-rw-r--r--pkgs/development/python-modules/jsonpath_rw/default.nix31
-rw-r--r--pkgs/development/python-modules/jsonpointer/default.nix21
-rw-r--r--pkgs/development/python-modules/jsonrpclib/default.nix11
-rw-r--r--pkgs/development/python-modules/jsonwatch/default.nix35
-rw-r--r--pkgs/development/python-modules/jupyter/default.nix34
-rw-r--r--pkgs/development/python-modules/jupyterlab/default.nix4
-rw-r--r--pkgs/development/python-modules/kajiki/default.nix26
-rw-r--r--pkgs/development/python-modules/kaptan/default.nix26
-rw-r--r--pkgs/development/python-modules/kazoo/default.nix44
-rw-r--r--pkgs/development/python-modules/keepalive/default.nix24
-rw-r--r--pkgs/development/python-modules/keras-applications/default.nix4
-rw-r--r--pkgs/development/python-modules/keras-preprocessing/default.nix4
-rw-r--r--pkgs/development/python-modules/keras/default.nix4
-rw-r--r--pkgs/development/python-modules/kerberos/default.nix24
-rw-r--r--pkgs/development/python-modules/lazy-object-proxy/default.nix30
-rw-r--r--pkgs/development/python-modules/le/default.nix30
-rw-r--r--pkgs/development/python-modules/ledgerblue/default.nix4
-rw-r--r--pkgs/development/python-modules/lektor/default.nix46
-rw-r--r--pkgs/development/python-modules/libcloud/default.nix31
-rw-r--r--pkgs/development/python-modules/librosa/default.nix33
-rw-r--r--pkgs/development/python-modules/libthumbor/default.nix29
-rw-r--r--pkgs/development/python-modules/lightblue/default.nix27
-rw-r--r--pkgs/development/python-modules/lightning/default.nix30
-rw-r--r--pkgs/development/python-modules/limnoria/default.nix30
-rw-r--r--pkgs/development/python-modules/linode/default.nix25
-rw-r--r--pkgs/development/python-modules/livestreamer-curses/default.nix26
-rw-r--r--pkgs/development/python-modules/livestreamer/default.nix44
-rw-r--r--pkgs/development/python-modules/llfuse/default.nix4
-rw-r--r--pkgs/development/python-modules/lmdb/default.nix26
-rw-r--r--pkgs/development/python-modules/logilab_astng/default.nix24
-rw-r--r--pkgs/development/python-modules/logutils/default.nix21
-rw-r--r--pkgs/development/python-modules/lpod/default.nix31
-rw-r--r--pkgs/development/python-modules/lsi/default.nix29
-rw-r--r--pkgs/development/python-modules/lxc/default.nix29
-rw-r--r--pkgs/development/python-modules/lxml/default.nix4
-rw-r--r--pkgs/development/python-modules/m2crypto/default.nix31
-rw-r--r--pkgs/development/python-modules/magic/default.nix28
-rw-r--r--pkgs/development/python-modules/mailchimp/default.nix29
-rw-r--r--pkgs/development/python-modules/manuel/default.nix25
-rw-r--r--pkgs/development/python-modules/mapsplotlib/default.nix32
-rw-r--r--pkgs/development/python-modules/markdown-macros/default.nix40
-rw-r--r--pkgs/development/python-modules/markdown2/default.nix4
-rw-r--r--pkgs/development/python-modules/markupsafe/default.nix22
-rw-r--r--pkgs/development/python-modules/marshmallow/default.nix4
-rw-r--r--pkgs/development/python-modules/mathics/default.nix50
-rw-r--r--pkgs/development/python-modules/mechanize/default.nix28
-rw-r--r--pkgs/development/python-modules/meld3/default.nix23
-rw-r--r--pkgs/development/python-modules/memcached/default.nix26
-rw-r--r--pkgs/development/python-modules/memory_profiler/default.nix24
-rw-r--r--pkgs/development/python-modules/mezzanine/default.nix70
-rw-r--r--pkgs/development/python-modules/mezzanine/writable_settings.patch21
-rw-r--r--pkgs/development/python-modules/micawber/default.nix4
-rw-r--r--pkgs/development/python-modules/minidb/default.nix29
-rw-r--r--pkgs/development/python-modules/minimock/default.nix26
-rw-r--r--pkgs/development/python-modules/mixpanel/default.nix30
-rw-r--r--pkgs/development/python-modules/mock/default.nix33
-rw-r--r--pkgs/development/python-modules/modestmaps/default.nix26
-rw-r--r--pkgs/development/python-modules/monotonic/default.nix28
-rw-r--r--pkgs/development/python-modules/moto/default.nix4
-rw-r--r--pkgs/development/python-modules/moviepy/default.nix29
-rw-r--r--pkgs/development/python-modules/mox/default.nix24
-rw-r--r--pkgs/development/python-modules/mozsvc/default.nix34
-rw-r--r--pkgs/development/python-modules/mpd/default.nix23
-rw-r--r--pkgs/development/python-modules/mpd2/default.nix29
-rw-r--r--pkgs/development/python-modules/mpmath/default.nix26
-rw-r--r--pkgs/development/python-modules/mpv/default.nix25
-rw-r--r--pkgs/development/python-modules/msgpack-numpy/default.nix4
-rw-r--r--pkgs/development/python-modules/msrplib/default.nix27
-rw-r--r--pkgs/development/python-modules/multi_key_dict/default.nix21
-rw-r--r--pkgs/development/python-modules/munch/default.nix21
-rw-r--r--pkgs/development/python-modules/munkres/default.nix25
-rw-r--r--pkgs/development/python-modules/musicbrainzngs/default.nix27
-rw-r--r--pkgs/development/python-modules/mutag/default.nix27
-rw-r--r--pkgs/development/python-modules/muttils/default.nix26
-rw-r--r--pkgs/development/python-modules/mwclient/default.nix3
-rw-r--r--pkgs/development/python-modules/mwlib-ext/default.nix24
-rw-r--r--pkgs/development/python-modules/mwlib-rl/default.nix27
-rw-r--r--pkgs/development/python-modules/mwlib/default.nix55
-rw-r--r--pkgs/development/python-modules/mxnet/default.nix37
-rw-r--r--pkgs/development/python-modules/mysql_python/default.nix32
-rw-r--r--pkgs/development/python-modules/namebench/default.nix50
-rw-r--r--pkgs/development/python-modules/nameparser/default.nix21
-rw-r--r--pkgs/development/python-modules/ncclient/default.nix4
-rw-r--r--pkgs/development/python-modules/ndg-httpsclient/default.nix30
-rw-r--r--pkgs/development/python-modules/netaddr/default.nix37
-rw-r--r--pkgs/development/python-modules/netifaces/default.nix21
-rw-r--r--pkgs/development/python-modules/neuronpy/default.nix31
-rw-r--r--pkgs/development/python-modules/nine/default.nix21
-rw-r--r--pkgs/development/python-modules/nipy/default.nix49
-rw-r--r--pkgs/development/python-modules/nipype/default.nix4
-rw-r--r--pkgs/development/python-modules/nixpkgs/default.nix29
-rw-r--r--pkgs/development/python-modules/nose-cover3/default.nix27
-rw-r--r--pkgs/development/python-modules/nose-cprof/default.nix25
-rw-r--r--pkgs/development/python-modules/nose/default.nix33
-rw-r--r--pkgs/development/python-modules/nose2/default.nix26
-rw-r--r--pkgs/development/python-modules/nosejs/default.nix28
-rw-r--r--pkgs/development/python-modules/nosexcover/default.nix25
-rw-r--r--pkgs/development/python-modules/notify/default.nix41
-rw-r--r--pkgs/development/python-modules/notmuch/default.nix28
-rw-r--r--pkgs/development/python-modules/ntfy/default.nix33
-rw-r--r--pkgs/development/python-modules/ntplib/default.nix24
-rw-r--r--pkgs/development/python-modules/nuitka/default.nix54
-rw-r--r--pkgs/development/python-modules/numpy/default.nix4
-rw-r--r--pkgs/development/python-modules/nxt-python/default.nix36
-rw-r--r--pkgs/development/python-modules/oauth/default.nix24
-rw-r--r--pkgs/development/python-modules/oauth2/default.nix32
-rw-r--r--pkgs/development/python-modules/oauth2client/default.nix4
-rw-r--r--pkgs/development/python-modules/oauthlib/default.nix31
-rw-r--r--pkgs/development/python-modules/obfsproxy/default.nix38
-rw-r--r--pkgs/development/python-modules/objgraph/default.nix28
-rw-r--r--pkgs/development/python-modules/offtrac/default.nix23
-rw-r--r--pkgs/development/python-modules/openant/default.nix38
-rw-r--r--pkgs/development/python-modules/openpyxl/default.nix4
-rw-r--r--pkgs/development/python-modules/ordered-set/default.nix4
-rw-r--r--pkgs/development/python-modules/ordereddict/default.nix21
-rw-r--r--pkgs/development/python-modules/osc/default.nix46
-rw-r--r--pkgs/development/python-modules/pamela/default.nix30
-rw-r--r--pkgs/development/python-modules/paramiko/default.nix48
-rw-r--r--pkgs/development/python-modules/paramz/default.nix4
-rw-r--r--pkgs/development/python-modules/path-and-address/default.nix31
-rw-r--r--pkgs/development/python-modules/pathspec/default.nix4
-rw-r--r--pkgs/development/python-modules/pathtools/default.nix22
-rw-r--r--pkgs/development/python-modules/paver/default.nix33
-rw-r--r--pkgs/development/python-modules/peppercorn/default.nix22
-rw-r--r--pkgs/development/python-modules/pex/default.nix29
-rw-r--r--pkgs/development/python-modules/phonenumbers/default.nix4
-rw-r--r--pkgs/development/python-modules/pillowfight/default.nix24
-rw-r--r--pkgs/development/python-modules/pint/default.nix21
-rw-r--r--pkgs/development/python-modules/pip/default.nix4
-rw-r--r--pkgs/development/python-modules/plyvel/default.nix29
-rw-r--r--pkgs/development/python-modules/pocket/default.nix25
-rw-r--r--pkgs/development/python-modules/poezio/fix_gnupg_import.patch12
-rw-r--r--pkgs/development/python-modules/poyo/default.nix21
-rw-r--r--pkgs/development/python-modules/pudb/default.nix29
-rw-r--r--pkgs/development/python-modules/pyaxmlparser/default.nix4
-rw-r--r--pkgs/development/python-modules/pybluez/default.nix29
-rw-r--r--pkgs/development/python-modules/pycallgraph/default.nix28
-rw-r--r--pkgs/development/python-modules/pycares/default.nix27
-rw-r--r--pkgs/development/python-modules/pycountry/default.nix22
-rw-r--r--pkgs/development/python-modules/pycuda/default.nix4
-rw-r--r--pkgs/development/python-modules/pyfribidi/default.nix25
-rw-r--r--pkgs/development/python-modules/pygal/default.nix36
-rw-r--r--pkgs/development/python-modules/pyhepmc/default.nix47
-rw-r--r--pkgs/development/python-modules/pyhepmc/pyhepmc_export_edges.patch (renamed from pkgs/development/python-modules/pyhepmc_export_edges.patch)0
-rw-r--r--pkgs/development/python-modules/pyhepmc/pyhepmc_export_flow.patch (renamed from pkgs/development/python-modules/pyhepmc_export_flow.patch)0
-rw-r--r--pkgs/development/python-modules/pyhomematic/default.nix4
-rw-r--r--pkgs/development/python-modules/pymatgen/default.nix4
-rw-r--r--pkgs/development/python-modules/pympler/default.nix31
-rw-r--r--pkgs/development/python-modules/pymysqlsa/default.nix25
-rw-r--r--pkgs/development/python-modules/pyparsing/default.nix4
-rw-r--r--pkgs/development/python-modules/pyperclip/default.nix4
-rw-r--r--pkgs/development/python-modules/pypoppler/default.nix41
-rw-r--r--pkgs/development/python-modules/pypoppler/pypoppler-0.39.0.patch (renamed from pkgs/development/python-modules/pypoppler-0.39.0.patch)0
-rw-r--r--pkgs/development/python-modules/pypoppler/pypoppler-poppler.c.patch (renamed from pkgs/development/python-modules/pypoppler-poppler.c.patch)0
-rw-r--r--pkgs/development/python-modules/pyramid/default.nix46
-rw-r--r--pkgs/development/python-modules/pyramid_chameleon/default.nix28
-rw-r--r--pkgs/development/python-modules/pyramid_exclog/default.nix25
-rw-r--r--pkgs/development/python-modules/pyramid_hawkauth/default.nix29
-rw-r--r--pkgs/development/python-modules/pyramid_jinja2/default.nix28
-rw-r--r--pkgs/development/python-modules/pyramid_mako/default.nix27
-rw-r--r--pkgs/development/python-modules/pyramid_multiauth/default.nix24
-rw-r--r--pkgs/development/python-modules/pyrfc3339/default.nix26
-rw-r--r--pkgs/development/python-modules/pyroute2/default.nix4
-rw-r--r--pkgs/development/python-modules/pyspark/default.nix4
-rw-r--r--pkgs/development/python-modules/pysrim/default.nix4
-rw-r--r--pkgs/development/python-modules/pytest-isort/default.nix4
-rw-r--r--pkgs/development/python-modules/pytest-relaxed/default.nix37
-rw-r--r--pkgs/development/python-modules/pytest-xdist/default.nix4
-rw-r--r--pkgs/development/python-modules/python-levenshtein/default.nix25
-rw-r--r--pkgs/development/python-modules/python-mapnik/default.nix58
-rw-r--r--pkgs/development/python-modules/python-otr/default.nix33
-rw-r--r--pkgs/development/python-modules/python-slugify/default.nix4
-rw-r--r--pkgs/development/python-modules/python2-pythondialog/default.nix27
-rw-r--r--pkgs/development/python-modules/python_openzwave/default.nix4
-rw-r--r--pkgs/development/python-modules/pythonirclib/default.nix34
-rw-r--r--pkgs/development/python-modules/pytun/default.nix27
-rw-r--r--pkgs/development/python-modules/pyxdg/default.nix25
-rw-r--r--pkgs/development/python-modules/rainbowstream/default.nix54
-rw-r--r--pkgs/development/python-modules/random2/default.nix24
-rw-r--r--pkgs/development/python-modules/reikna/default.nix4
-rw-r--r--pkgs/development/python-modules/relatorio/default.nix4
-rw-r--r--pkgs/development/python-modules/reportlab/default.nix4
-rw-r--r--pkgs/development/python-modules/repoze_lru/default.nix22
-rw-r--r--pkgs/development/python-modules/repoze_sphinx_autointerface/default.nix25
-rw-r--r--pkgs/development/python-modules/rethinkdb/default.nix23
-rw-r--r--pkgs/development/python-modules/rlp/default.nix4
-rw-r--r--pkgs/development/python-modules/roman/default.nix22
-rw-r--r--pkgs/development/python-modules/safe/default.nix24
-rw-r--r--pkgs/development/python-modules/samplerate/default.nix37
-rw-r--r--pkgs/development/python-modules/schedule/default.nix24
-rw-r--r--pkgs/development/python-modules/scikit-image/default.nix4
-rw-r--r--pkgs/development/python-modules/seekpath/default.nix4
-rw-r--r--pkgs/development/python-modules/setuptools-git/default.nix25
-rw-r--r--pkgs/development/python-modules/shippai/default.nix4
-rw-r--r--pkgs/development/python-modules/sleekxmpp/default.nix1
-rw-r--r--pkgs/development/python-modules/slixmpp/default.nix26
-rw-r--r--pkgs/development/python-modules/sortedcollections/default.nix27
-rw-r--r--pkgs/development/python-modules/sortedcontainers/default.nix4
-rw-r--r--pkgs/development/python-modules/sounddevice/default.nix4
-rw-r--r--pkgs/development/python-modules/sparqlwrapper/default.nix35
-rw-r--r--pkgs/development/python-modules/sphfile/default.nix4
-rw-r--r--pkgs/development/python-modules/sphinx/default.nix4
-rw-r--r--pkgs/development/python-modules/sqlalchemy/default.nix4
-rw-r--r--pkgs/development/python-modules/sqlmap/default.nix4
-rw-r--r--pkgs/development/python-modules/ssdeep/default.nix33
-rw-r--r--pkgs/development/python-modules/statsd/default.nix33
-rw-r--r--pkgs/development/python-modules/toml/default.nix4
-rw-r--r--pkgs/development/python-modules/uncompyle6/default.nix25
-rw-r--r--pkgs/development/python-modules/validictory/default.nix23
-rw-r--r--pkgs/development/python-modules/venusian/default.nix28
-rw-r--r--pkgs/development/python-modules/warlock/default.nix27
-rw-r--r--pkgs/development/python-modules/watchdog/default.nix32
-rw-r--r--pkgs/development/python-modules/whisper/default.nix4
-rw-r--r--pkgs/development/python-modules/widgetsnbextension/default.nix4
-rw-r--r--pkgs/development/python-modules/wtforms/default.nix29
-rw-r--r--pkgs/development/python-modules/xarray/default.nix4
-rw-r--r--pkgs/development/python-modules/xdis/default.nix25
-rw-r--r--pkgs/development/python-modules/xml2rfc/default.nix4
-rw-r--r--pkgs/development/python-modules/xstatic-bootstrap/default.nix2
-rw-r--r--pkgs/development/python-modules/xstatic-jquery-ui/default.nix2
-rw-r--r--pkgs/development/python-modules/xstatic/default.nix2
-rw-r--r--pkgs/development/python-modules/zake/default.nix31
-rw-r--r--pkgs/development/python-modules/zetup/default.nix4
-rw-r--r--pkgs/development/python-modules/zope_deprecation/default.nix25
-rw-r--r--pkgs/development/tools/analysis/egypt/default.nix4
-rw-r--r--pkgs/development/tools/misc/intltool/default.nix4
-rw-r--r--pkgs/development/tools/misc/ninka/default.nix6
-rw-r--r--pkgs/servers/mail/postfix/pflogsumm.nix5
-rw-r--r--pkgs/servers/mail/spamassassin/default.nix4
-rw-r--r--pkgs/servers/monitoring/fusion-inventory/default.nix4
-rw-r--r--pkgs/servers/openxpki/default.nix4
-rw-r--r--pkgs/servers/slimserver/default.nix4
-rw-r--r--pkgs/servers/sql/mariadb/default.nix4
-rw-r--r--pkgs/tools/graphics/feedgnuplot/default.nix4
-rw-r--r--pkgs/tools/graphics/graph-easy/default.nix4
-rw-r--r--pkgs/tools/misc/rename/default.nix4
-rw-r--r--pkgs/tools/networking/ddclient/default.nix4
-rw-r--r--pkgs/tools/virtualization/linode-cli/default.nix4
-rw-r--r--pkgs/top-level/aliases.nix3
-rw-r--r--pkgs/top-level/all-packages.nix10
-rw-r--r--pkgs/top-level/perl-packages.nix14
-rw-r--r--pkgs/top-level/python-packages.nix6229
423 files changed, 9063 insertions, 6302 deletions
diff --git a/pkgs/applications/audio/gtkpod/default.nix b/pkgs/applications/audio/gtkpod/default.nix
index 6546fd7866ea..4bcddab54a08 100644
--- a/pkgs/applications/audio/gtkpod/default.nix
+++ b/pkgs/applications/audio/gtkpod/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, pkgconfig, wrapGAppsHook, intltool, libgpod, curl, flac,
-  gnome3, gtk3, gettext, perl, perlXMLParser, flex, libid3tag,
+  gnome3, gtk3, gettext, perlPackages, flex, libid3tag,
   libvorbis, gdk_pixbuf }:
 
 stdenv.mkDerivation rec {
@@ -13,10 +13,10 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook intltool ];
   buildInputs = [
-    curl gettext perl perlXMLParser
+    curl gettext
     flex libgpod libid3tag flac libvorbis gtk3 gdk_pixbuf
     gnome3.gdl gnome3.defaultIconTheme gnome3.anjuta
-  ];
+  ] ++ (with perlPackages; [ perl XMLParser ]);
 
   patchPhase = ''
     sed -i 's/which/type -P/' scripts/*.sh
diff --git a/pkgs/applications/audio/jamin/default.nix b/pkgs/applications/audio/jamin/default.nix
index 77946fc41ccc..eea9de5a1597 100644
--- a/pkgs/applications/audio/jamin/default.nix
+++ b/pkgs/applications/audio/jamin/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, fftwFloat, gtk2, ladspaPlugins, libjack2, liblo, libxml2
-, makeWrapper, pkgconfig, perl, perlXMLParser
+, makeWrapper, pkgconfig, perlPackages
 }:
 
 stdenv.mkDerivation {
@@ -11,11 +11,9 @@ stdenv.mkDerivation {
   };
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [
-    fftwFloat gtk2 ladspaPlugins libjack2 liblo libxml2 perl
-    perlXMLParser makeWrapper
-  ];
-  
+  buildInputs = [ fftwFloat gtk2 ladspaPlugins libjack2 liblo libxml2 makeWrapper ]
+    ++ (with perlPackages; [ perl XMLParser ]);
+
   postInstall = ''
     wrapProgram $out/bin/jamin --set LADSPA_PATH ${ladspaPlugins}/lib/ladspa
   '';
diff --git a/pkgs/applications/graphics/cinepaint/default.nix b/pkgs/applications/graphics/cinepaint/default.nix
index d46128c62c02..9c736f5ffb57 100644
--- a/pkgs/applications/graphics/cinepaint/default.nix
+++ b/pkgs/applications/graphics/cinepaint/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, cmake, pkgconfig, gtk2, freetype, fontconfig, lcms,
-  flex, libtiff, libjpeg, libpng, libexif, zlib, perl, libX11,
-  perlXMLParser, pythonPackages, gettext, intltool, babl, gegl,
+  flex, libtiff, libjpeg, libpng, libexif, zlib, perlPackages, libX11,
+  pythonPackages, gettext, intltool, babl, gegl,
   glib, makedepend, xf86vidmodeproto, xineramaproto, libXmu, openexr,
   libGLU_combined, libXext, libXpm, libXau, libXxf86vm, pixman, libpthreadstubs, fltk } :
 
@@ -15,10 +15,10 @@ in stdenv.mkDerivation rec {
   };
 
   buildInputs = [ libpng gtk2 freetype fontconfig lcms flex libtiff libjpeg
-    libexif zlib perl libX11 perlXMLParser python pygtk gettext intltool babl
+    libexif zlib libX11 python pygtk gettext intltool babl
     gegl glib makedepend xf86vidmodeproto xineramaproto libXmu openexr libGLU_combined
     libXext libXpm libXau libXxf86vm pixman libpthreadstubs fltk
-  ];
+  ] ++ (with perlPackages; [ perl XMLParser ]);
 
   hardeningDisable = [ "format" ];
 
diff --git a/pkgs/applications/graphics/dia/default.nix b/pkgs/applications/graphics/dia/default.nix
index 222328d2b917..0ce160242e56 100644
--- a/pkgs/applications/graphics/dia/default.nix
+++ b/pkgs/applications/graphics/dia/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, fetchgit, autoconf, automake, libtool, gtk2, pkgconfig, perl,
-perlXMLParser, libxml2, gettext, python, libxml2Python, docbook5, docbook_xsl,
+{ stdenv, fetchgit, autoconf, automake, libtool, gtk2, pkgconfig, perlPackages,
+libxml2, gettext, python, libxml2Python, docbook5, docbook_xsl,
 libxslt, intltool, libart_lgpl, withGNOME ? false, libgnomeui, hicolor-icon-theme,
 gtk-mac-integration-gtk2 }:
 
@@ -14,12 +14,13 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs =
-    [ gtk2 perlXMLParser libxml2 gettext python libxml2Python docbook5
+    [ gtk2 libxml2 gettext python libxml2Python docbook5
       libxslt docbook_xsl libart_lgpl hicolor-icon-theme ]
       ++ stdenv.lib.optional withGNOME libgnomeui
       ++ stdenv.lib.optional stdenv.isDarwin gtk-mac-integration-gtk2;
 
-  nativeBuildInputs = [ autoconf automake libtool pkgconfig intltool perl ];
+  nativeBuildInputs = [ autoconf automake libtool pkgconfig intltool ]
+    ++ (with perlPackages; [ perl XMLParser ]);
 
   preConfigure = ''
     NOCONFIGURE=1 ./autogen.sh # autoreconfHook is not enough
diff --git a/pkgs/applications/graphics/gcolor2/default.nix b/pkgs/applications/graphics/gcolor2/default.nix
index 27ca6e26e9f9..025b3ae65ece 100644
--- a/pkgs/applications/graphics/gcolor2/default.nix
+++ b/pkgs/applications/graphics/gcolor2/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, gtk2, perl, perlXMLParser, pkgconfig } :
+{stdenv, fetchurl, gtk2, perlPackages, pkgconfig } :
 
 let version = "0.4"; in
 stdenv.mkDerivation {
@@ -21,7 +21,8 @@ stdenv.mkDerivation {
         [ ];
 
   nativeBuildInputs = [ pkgconfig ];
-buildInputs = [ gtk2 perl perlXMLParser ];
+  buildInputs = [ gtk2 ]
+    ++ (with perlPackages; [ perl XMLParser ]);
 
   meta = {
     description = "Simple GTK+2 color selector";
diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix
index f4d08195309b..48ec2a5a014d 100644
--- a/pkgs/applications/graphics/inkscape/default.nix
+++ b/pkgs/applications/graphics/inkscape/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, perl, perlXMLParser, libXft
+{ stdenv, fetchurl, pkgconfig, perlPackages, libXft
 , libpng, zlib, popt, boehmgc, libxml2, libxslt, glib, gtkmm2
 , glibmm, libsigcxx, lcms, boost, gettext, makeWrapper
 , gsl, python2, poppler, imagemagick, libwpg, librevenge
@@ -39,7 +39,8 @@ stdenv.mkDerivation rec {
       --replace '"python-interpreter", "python"' '"python-interpreter", "${python2Env}/bin/python"'
   '';
 
-  nativeBuildInputs = [ pkgconfig cmake makeWrapper python2Env perl perlXMLParser ];
+  nativeBuildInputs = [ pkgconfig cmake makeWrapper python2Env ]
+    ++ (with perlPackages; [ perl XMLParser ]);
   buildInputs = [
     libXft libpng zlib popt boehmgc
     libxml2 libxslt glib gtkmm2 glibmm libsigcxx lcms boost gettext
diff --git a/pkgs/applications/misc/get_iplayer/default.nix b/pkgs/applications/misc/get_iplayer/default.nix
index d024b0fce99e..5e8bb629ce2a 100644
--- a/pkgs/applications/misc/get_iplayer/default.nix
+++ b/pkgs/applications/misc/get_iplayer/default.nix
@@ -1,11 +1,11 @@
-{stdenv, fetchFromGitHub, atomicparsley, flvstreamer, ffmpeg, makeWrapper, perl, buildPerlPackage, perlPackages, rtmpdump}:
+{stdenv, fetchFromGitHub, atomicparsley, flvstreamer, ffmpeg, makeWrapper, perl, perlPackages, rtmpdump}:
 
 with stdenv.lib;
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "get_iplayer-${version}";
   version = "2.99";
-  
+
   src = fetchFromGitHub {
     owner = "get-iplayer";
     repo = "get_iplayer";
@@ -34,5 +34,5 @@ buildPerlPackage rec {
     homepage = https://squarepenguin.co.uk/;
     platforms = platforms.all;
   };
-  
+
 }
diff --git a/pkgs/applications/networking/instant-messengers/ekiga/default.nix b/pkgs/applications/networking/instant-messengers/ekiga/default.nix
index bcabdf43cd22..1eaaf3b12dfa 100644
--- a/pkgs/applications/networking/instant-messengers/ekiga/default.nix
+++ b/pkgs/applications/networking/instant-messengers/ekiga/default.nix
@@ -1,5 +1,5 @@
 { stdenv, glib, fetchurl, fetchpatch, cyrus_sasl, gettext, openldap, ptlib, opal, libXv, rarian, intltool
-, perl, perlXMLParser, evolution-data-server, gnome-doc-utils, avahi, autoreconfHook
+, perlPackages, evolution-data-server, gnome-doc-utils, avahi, autoreconfHook
 , libsigcxx, gtk, dbus-glib, libnotify, libXext, xextproto, gnome3, boost, libsecret
 , pkgconfig, libxml2, videoproto, unixODBC, db, nspr, nss, zlib
 , libXrandr, randrproto, which, libxslt, libtasn1, gmp, nettle, sqlite, makeWrapper }:
@@ -13,12 +13,13 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = [ cyrus_sasl gettext openldap ptlib opal libXv rarian intltool
-                  perl perlXMLParser evolution-data-server gnome-doc-utils avahi
+                  evolution-data-server gnome-doc-utils avahi
                   libsigcxx gtk dbus-glib libnotify libXext xextproto sqlite
                   gnome3.libsoup glib gnome3.defaultIconTheme boost
                   autoreconfHook pkgconfig libxml2 videoproto unixODBC db nspr
                   nss zlib libsecret libXrandr randrproto which libxslt libtasn1
-                  gmp nettle makeWrapper ];
+                  gmp nettle makeWrapper ]
+    ++ (with perlPackages; [ perl XMLParser ]);
 
   preAutoreconf = ''
     substituteInPlace configure.ac --replace AM_GCONF_SOURCE_2 ""
diff --git a/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
index ec3bb6a463e6..12348fe548c7 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchurl, makeWrapper, pkgconfig, gtk2, gtkspell2, aspell
 , gst_all_1, startupnotification, gettext
-, perl, perlXMLParser, libxml2, nss, nspr, farstream
+, perlPackages, libxml2, nss, nspr, farstream
 , libXScrnSaver, ncurses, avahi, dbus, dbus-glib, intltool, libidn
 , lib, python, libICE, libXext, libSM
 , cyrus_sasl ? null
@@ -40,9 +40,8 @@ let unwrapped = stdenv.mkDerivation rec {
   ++ (lib.optional (gnutls != null) gnutls)
   ++ (lib.optional (libgcrypt != null) libgcrypt);
 
-  propagatedBuildInputs = [
-    pkgconfig gtk2 perl perlXMLParser gettext
-  ];
+  propagatedBuildInputs = [ pkgconfig gtk2 gettext ]
+    ++ (with perlPackages; [ perl XMLParser ]);
 
   patches = [ ./pidgin-makefile.patch ./add-search-path.patch ];
 
diff --git a/pkgs/applications/networking/instant-messengers/poezio/default.nix b/pkgs/applications/networking/instant-messengers/poezio/default.nix
new file mode 100644
index 000000000000..b5fa1ccc2f41
--- /dev/null
+++ b/pkgs/applications/networking/instant-messengers/poezio/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildPythonApplication, fetchurl, pythonOlder
+, pytest, aiodns, slixmpp, pyinotify, potr, mpd2, cffi, pkgconfig }:
+buildPythonApplication rec {
+    name = "poezio-${version}";
+    version = "0.12";
+
+    disabled = pythonOlder "3.4";
+
+    buildInputs = [ pytest ];
+    propagatedBuildInputs = [ aiodns slixmpp pyinotify potr mpd2 cffi ];
+    nativeBuildInputs = [ pkgconfig ];
+
+    src = fetchurl {
+      url = "http://dev.louiz.org/attachments/download/129/${name}.tar.gz";
+      sha256 = "11n9x82xyjwbqk28lsfnvqwn8qc9flv6w2c64camh6j3148ykpvz";
+    };
+
+    checkPhase = ''
+      py.test
+    '';
+
+    meta = with lib; {
+      description = "Free console XMPP client";
+      homepage = https://poez.io;
+      license = licenses.mit;
+      maintainers = [ maintainers.lsix ];
+    };
+  }
diff --git a/pkgs/applications/office/gnumeric/default.nix b/pkgs/applications/office/gnumeric/default.nix
index c155d696d39f..b1aed5e5f59d 100644
--- a/pkgs/applications/office/gnumeric/default.nix
+++ b/pkgs/applications/office/gnumeric/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, intltool, perl, perlXMLParser
+{ stdenv, fetchurl, pkgconfig, intltool, perlPackages
 , goffice, gnome3, makeWrapper, gtk3, bison, pythonPackages
 , itstool
 }:
@@ -20,19 +20,19 @@ in stdenv.mkDerivation rec {
 
   prePatch = ''
     substituteInPlace doc/C/gnumeric.xml \
-	--replace http://www.oasis-open.org/docbook/xml/4.5/ent/isopub.ent ${isopub} \
-	--replace http://www.oasis-open.org/docbook/xml/4.5/ent/isonum.ent ${isonum} \
-	--replace http://www.oasis-open.org/docbook/xml/4.5/ent/isogrk1.ent ${isogrk1}
+      --replace http://www.oasis-open.org/docbook/xml/4.5/ent/isopub.ent ${isopub} \
+      --replace http://www.oasis-open.org/docbook/xml/4.5/ent/isonum.ent ${isonum} \
+      --replace http://www.oasis-open.org/docbook/xml/4.5/ent/isogrk1.ent ${isogrk1}
   '';
 
   nativeBuildInputs = [ pkgconfig ];
 
   # ToDo: optional libgda, introspection?
   buildInputs = [
-    intltool perl perlXMLParser bison
+    intltool bison
     goffice gtk3 makeWrapper gnome3.defaultIconTheme
     python pygobject3 itstool
-  ];
+  ] ++ (with perlPackages; [ perl XMLParser ]);
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/video/kino/default.nix b/pkgs/applications/video/kino/default.nix
index 6c473e2d8dca..d6404a82bc34 100644
--- a/pkgs/applications/video/kino/default.nix
+++ b/pkgs/applications/video/kino/default.nix
@@ -51,7 +51,7 @@
 #AMR-WB IF2 support        no
 
 { stdenv, fetchurl, gtk2, libglade, libxml2, libraw1394, libsamplerate, libdv
-, pkgconfig, perl, perlXMLParser, libavc1394, libiec61883, libXv, gettext
+, pkgconfig, perlPackages, libavc1394, libiec61883, libXv, gettext
 , libX11, glib, cairo, intltool, ffmpeg, libv4l
 }:
 
@@ -64,7 +64,8 @@ stdenv.mkDerivation {
   };
 
   buildInputs = [ gtk2 libglade libxml2 libraw1394 libsamplerate libdv
-      pkgconfig perl perlXMLParser libavc1394 libiec61883 intltool libXv gettext libX11 glib cairo ffmpeg libv4l ]; # TODOoptional packages 
+      pkgconfig libavc1394 libiec61883 intltool libXv gettext libX11 glib cairo ffmpeg libv4l ] # TODOoptional packages
+    ++ (with perlPackages; [ perl XMLParser ]);
 
   configureFlags = [ "--enable-local-ffmpeg=no" ];
 
diff --git a/pkgs/applications/video/wxcam/default.nix b/pkgs/applications/video/wxcam/default.nix
index 24e99d78c486..64fcf0ba04a5 100644
--- a/pkgs/applications/video/wxcam/default.nix
+++ b/pkgs/applications/video/wxcam/default.nix
@@ -4,7 +4,7 @@
 , libX11, libXv, libSM
 , gtk, libglade
 , wxGTK
-, perlXMLParser
+, perlPackages
 , xvidcore
 , mjpegtools
 , alsaLib
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
   };
 
   buildInputs = with stdenv.lib;
-  [ pkgconfig intltool libX11 libXv libSM gtk libglade wxGTK perlXMLParser xvidcore mjpegtools alsaLib libv4l cimg ];
+  [ pkgconfig intltool libX11 libXv libSM gtk libglade wxGTK perlPackages.XMLParser xvidcore mjpegtools alsaLib libv4l cimg ];
 
   NIX_CFLAGS_COMPILE="-I ${cimg}/include/cimg";
 
@@ -32,10 +32,10 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     make install prefix="$out" wxcamdocdir="$out/share/doc/wxcam"
-  '';    
-  
+  '';
+
   meta = with stdenv.lib; {
-    description = "An open-source, wxGTK-based webcam app for Linux"; 
+    description = "An open-source, wxGTK-based webcam app for Linux";
     longDescription = ''
     wxCam is a webcam application for linux. It supports video recording
     (avi uncompressed and Xvid formats), snapshot taking, and some special
diff --git a/pkgs/applications/video/xvidcap/default.nix b/pkgs/applications/video/xvidcap/default.nix
index 663f89b325a2..6e07fbb105b6 100644
--- a/pkgs/applications/video/xvidcap/default.nix
+++ b/pkgs/applications/video/xvidcap/default.nix
@@ -1,10 +1,10 @@
-{ stdenv, fetchurl, perl, perlXMLParser, pkgconfig, gtk2
+{ stdenv, fetchurl, perlPackages, pkgconfig, gtk2
 , scrollkeeper, libglade, libXmu, libX11, libXext, gettext
 , lame, libXfixes, libXdamage }:
 
 stdenv.mkDerivation {
   name = "xvidcap-1.1.7";
-  
+
   src = fetchurl {
     url = mirror://sourceforge/xvidcap/xvidcap-1.1.7.tar.gz;
     sha256 = "0p8rhpyhxgy37crf1xk1046z4p663jg7ww776jw92pld3s024ihm";
@@ -14,14 +14,14 @@ stdenv.mkDerivation {
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [
-    perl perlXMLParser gtk2 scrollkeeper
+    gtk2 scrollkeeper
     libglade libXmu gettext lame libXdamage libXfixes libXext libX11
-  ];
+  ] ++ (with perlPackages; [ perl XMLParser ]);
 
   # !!! don't know why this is necessary
   NIX_LDFLAGS = "-lXext -lX11 -lz -lgcc_s";
 
-  meta = with stdenv.lib; { 
+  meta = with stdenv.lib; {
     description = "Screencast video catpuring tool";
     homepage = http://xvidcap.sourceforge.net/;
     license = stdenv.lib.licenses.gpl2;
diff --git a/pkgs/data/misc/shared-mime-info/default.nix b/pkgs/data/misc/shared-mime-info/default.nix
index f1df81f2db41..f82ae5f1f9f2 100644
--- a/pkgs/data/misc/shared-mime-info/default.nix
+++ b/pkgs/data/misc/shared-mime-info/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, gettext, perl, perlXMLParser, intltool
+{stdenv, fetchurl, pkgconfig, gettext, perlPackages, intltool
 , libxml2, glib}:
 
 let version = "1.10"; in
@@ -10,9 +10,8 @@ stdenv.mkDerivation rec {
     sha256 = "1gxyvwym3xgpmp262gfn8jg5sla6k5hy6m6dmy6grgiq90xsh9f6";
   };
 
-  nativeBuildInputs = [
-    pkgconfig gettext intltool perl perlXMLParser libxml2 glib
-  ];
+  nativeBuildInputs = [ pkgconfig gettext intltool ] ++ (with perlPackages; [ perl XMLParser ]);
+  buildInputs = [ libxml2 glib ];
 
   meta = with stdenv.lib; {
     inherit version;
diff --git a/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix b/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix
index 4b769f5d0aea..7c713cb91221 100644
--- a/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix
+++ b/pkgs/desktops/gnome-2/desktop/scrollkeeper/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, perl, perlXMLParser, libxml2, libxslt, docbook_xml_dtd_42, automake, gettext}:
+{stdenv, fetchurl, pkgconfig, perlPackages, libxml2, libxslt, docbook_xml_dtd_42, automake, gettext}:
 
 stdenv.mkDerivation {
   name = "scrollkeeper-0.3.14";
@@ -14,6 +14,7 @@ stdenv.mkDerivation {
   ";
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ perl perlXMLParser libxml2 libxslt gettext];
+  buildInputs = [ libxml2 libxslt gettext ]
+    ++ (with perlPackages; [ perl XMLParser ]);
   configureFlags = [ "--with-xml-catalog=${docbook_xml_dtd_42}/xml/dtd/docbook/catalog.xml" ];
 }
diff --git a/pkgs/development/interpreters/python/wrapper.nix b/pkgs/development/interpreters/python/wrapper.nix
index 8d4e68bf57ca..27d01e4e1f51 100644
--- a/pkgs/development/interpreters/python/wrapper.nix
+++ b/pkgs/development/interpreters/python/wrapper.nix
@@ -4,6 +4,8 @@
 , postBuild ? ""
 , ignoreCollisions ? false
 , requiredPythonModules
+# Wrap executables with the given argument.
+, makeWrapperArgs ? []
 , }:
 
 # Create a python executable that knows about additional packages.
@@ -32,7 +34,7 @@ let
             if [ -f "$prg" ]; then
               rm -f "$out/bin/$prg"
               if [ -x "$prg" ]; then
-                makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" --set PYTHONNOUSERSITE "true"
+                makeWrapper "$path/bin/$prg" "$out/bin/$prg" --set PYTHONHOME "$out" --set PYTHONNOUSERSITE "true" ${stdenv.lib.concatStringsSep " " makeWrapperArgs}
               fi
             fi
           done
diff --git a/pkgs/development/libraries/avahi/default.nix b/pkgs/development/libraries/avahi/default.nix
index 53e3f5468abc..971637bc7870 100644
--- a/pkgs/development/libraries/avahi/default.nix
+++ b/pkgs/development/libraries/avahi/default.nix
@@ -1,4 +1,4 @@
-{ fetchurl, stdenv, pkgconfig, libdaemon, dbus, perl, perlXMLParser
+{ fetchurl, stdenv, pkgconfig, libdaemon, dbus, perlPackages
 , expat, gettext, intltool, glib, libiconv
 , qt4 ? null
 , qt4Support ? false
@@ -17,7 +17,8 @@ stdenv.mkDerivation rec {
 
   patches = [ ./no-mkdir-localstatedir.patch ];
 
-  buildInputs = [ libdaemon dbus perl perlXMLParser glib expat libiconv ]
+  buildInputs = [ libdaemon dbus glib expat libiconv ]
+    ++ (with perlPackages; [ perl XMLParser ])
     ++ (stdenv.lib.optional qt4Support qt4);
 
   nativeBuildInputs = [ pkgconfig gettext intltool glib ];
diff --git a/pkgs/development/libraries/freetype/default.nix b/pkgs/development/libraries/freetype/default.nix
index fce052aeb223..5a11d03c5917 100644
--- a/pkgs/development/libraries/freetype/default.nix
+++ b/pkgs/development/libraries/freetype/default.nix
@@ -1,4 +1,5 @@
 { stdenv, fetchurl
+, buildPackages
 , pkgconfig, which, makeWrapper
 , zlib, bzip2, libpng, gnumake, glib
 
@@ -50,6 +51,9 @@ in stdenv.mkDerivation rec {
 
   configureFlags = [ "--disable-static" "--bindir=$(dev)/bin" ];
 
+  # native compiler to generate building tool
+  CC_BUILD = "${buildPackages.stdenv.cc}/bin/cc";
+
   # The asm for armel is written with the 'asm' keyword.
   CFLAGS = optionalString stdenv.isAarch32 "-std=gnu99";
 
diff --git a/pkgs/development/libraries/libgksu/default.nix b/pkgs/development/libraries/libgksu/default.nix
index 29f346e9acfb..0af0a1227f32 100644
--- a/pkgs/development/libraries/libgksu/default.nix
+++ b/pkgs/development/libraries/libgksu/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, pkgconfig, wrapGAppsHook, gtk2, gnome2, gnome3,
-  libstartup_notification, libgtop, perl, perlXMLParser,
+  libstartup_notification, libgtop, perlPackages,
   autoreconfHook, intltool, docbook_xsl, xauth
 }:
 
@@ -19,8 +19,8 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     gtk2 gnome2.GConf libstartup_notification
-    gnome3.libgnome-keyring libgtop gnome2.libglade perl perlXMLParser
-  ];
+    gnome3.libgnome-keyring libgtop gnome2.libglade
+  ] ++ (with perlPackages; [ perl XMLParser ]);
 
   enableParallelBuilding = true;
 
@@ -30,26 +30,26 @@ stdenv.mkDerivation rec {
         # Patches from the gentoo ebuild
 
         # Fix compilation on bsdc
-	./libgksu-2.0.0-fbsd.patch
+        ./libgksu-2.0.0-fbsd.patch
 
         # Fix wrong usage of LDFLAGS, gentoo bug #226837
-	./libgksu-2.0.7-libs.patch
+        ./libgksu-2.0.7-libs.patch
 
         # Use po/LINGUAS
-	./libgksu-2.0.7-polinguas.patch
+        ./libgksu-2.0.7-polinguas.patch
 
         # Don't forkpty; gentoo bug #298289
-	./libgksu-2.0.12-revert-forkpty.patch
+        ./libgksu-2.0.12-revert-forkpty.patch
 
         # Make this gmake-3.82 compliant, gentoo bug #333961
-	./libgksu-2.0.12-fix-make-3.82.patch
+        ./libgksu-2.0.12-fix-make-3.82.patch
 
         # Do not build test programs that are never executed; also fixes gentoo bug #367397 (underlinking issues).
-	./libgksu-2.0.12-notests.patch
+        ./libgksu-2.0.12-notests.patch
 
         # Fix automake-1.11.2 compatibility, gentoo bug #397411
-	./libgksu-2.0.12-automake-1.11.2.patch
-	];
+        ./libgksu-2.0.12-automake-1.11.2.patch
+  ];
 
   postPatch = ''
     # gentoo bug #467026
diff --git a/pkgs/development/libraries/libgpod/default.nix b/pkgs/development/libraries/libgpod/default.nix
index 74aee0f39c7e..f178af349088 100644
--- a/pkgs/development/libraries/libgpod/default.nix
+++ b/pkgs/development/libraries/libgpod/default.nix
@@ -1,4 +1,4 @@
-{stdenv, lib, fetchurl, gettext, perl, perlXMLParser, intltool, pkgconfig, glib,
+{stdenv, lib, fetchurl, gettext, perlPackages, intltool, pkgconfig, glib,
   libxml2, sqlite, zlib, sg3_utils, gdk_pixbuf, taglib,
   libimobiledevice, pythonPackages, mutagen,
   monoSupport ? true, mono, gtk-sharp-2_0
@@ -25,8 +25,9 @@ in stdenv.mkDerivation rec {
   propagatedBuildInputs = [ glib libxml2 sqlite zlib sg3_utils
     gdk_pixbuf taglib libimobiledevice python pygobject2 mutagen ];
 
-  nativeBuildInputs = [ gettext perlXMLParser intltool pkgconfig perl] ++
-   lib.optionals monoSupport [ mono gtk-sharp-2_0 ];
+  nativeBuildInputs = [ gettext intltool pkgconfig ]
+    ++ (with perlPackages; [ perl XMLParser ])
+    ++ lib.optionals monoSupport [ mono gtk-sharp-2_0 ];
 
   meta = {
     homepage = http://gtkpod.sourceforge.net/;
diff --git a/pkgs/development/libraries/libxml2/default.nix b/pkgs/development/libraries/libxml2/default.nix
index c359ea10b665..36606999f534 100644
--- a/pkgs/development/libraries/libxml2/default.nix
+++ b/pkgs/development/libraries/libxml2/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, fetchpatch
-, zlib, xz, python2, findXMLCatalogs
+, zlib, xz, python2, ncurses, findXMLCatalogs
 , pythonSupport ? stdenv.buildPlatform == stdenv.hostPlatform
 , icuSupport ? false, icu ? null
 , enableShared ? stdenv.hostPlatform.libc != "msvcrt"
@@ -37,6 +37,7 @@ in stdenv.mkDerivation rec {
   propagatedBuildOutputs = "out bin" + lib.optionalString pythonSupport " py";
 
   buildInputs = lib.optional pythonSupport python
+    ++ lib.optional (pythonSupport && python?isPy3 && python.isPy3) ncurses
     # Libxml2 has an optional dependency on liblzma.  However, on impure
     # platforms, it may end up using that from /usr/lib, and thus lack a
     # RUNPATH for that, leading to undefined references for its users.
diff --git a/pkgs/development/libraries/protobuf/generic-v3.nix b/pkgs/development/libraries/protobuf/generic-v3.nix
index 79e4c387cdf5..883dff56f2ee 100644
--- a/pkgs/development/libraries/protobuf/generic-v3.nix
+++ b/pkgs/development/libraries/protobuf/generic-v3.nix
@@ -1,11 +1,12 @@
 { stdenv
 , fetchFromGitHub
-, autoreconfHook, zlib, gmock
+, autoreconfHook, zlib, gmock, which, buildPackages
 , version, sha256
 , ...
 }:
 
-stdenv.mkDerivation rec {
+let
+mkProtobufDerivation = buildProtobuf: stdenv: stdenv.mkDerivation rec {
   name = "protobuf-${version}";
 
   # make sure you test also -A pythonPackages.protobuf
@@ -28,8 +29,10 @@ stdenv.mkDerivation rec {
       --replace 'tmpnam(b)' '"'$TMPDIR'/foo"'
   '';
 
-  nativeBuildInputs = [ autoreconfHook ];
+  nativeBuildInputs = [ autoreconfHook buildPackages.which buildPackages.stdenv.cc buildProtobuf ];
+
   buildInputs = [ zlib ];
+  configureFlags = if buildProtobuf == null then [] else [ "--with-protoc=${buildProtobuf}/bin/protoc" ];
 
   enableParallelBuilding = true;
 
@@ -54,4 +57,7 @@ stdenv.mkDerivation rec {
   };
 
   passthru.version = version;
-}
+};
+in mkProtobufDerivation(if (stdenv.buildPlatform != stdenv.hostPlatform)
+                        then (mkProtobufDerivation null buildPackages.stdenv)
+                        else null) stdenv
diff --git a/pkgs/development/libraries/rarian/default.nix b/pkgs/development/libraries/rarian/default.nix
index d0a15e866f7a..bd79e3628a14 100644
--- a/pkgs/development/libraries/rarian/default.nix
+++ b/pkgs/development/libraries/rarian/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, perl, perlXMLParser, libxml2, libxslt, docbook_xml_dtd_42, gnome3}:
+{stdenv, fetchurl, pkgconfig, perlPackages, libxml2, libxslt, docbook_xml_dtd_42, gnome3}:
 let
   pname = "rarian";
   version = "0.8.1";
@@ -11,7 +11,8 @@ in stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ perl perlXMLParser libxml2 libxslt];
+  buildInputs = [ libxml2 libxslt ]
+    ++ (with perlPackages; [ perl XMLParser ]);
   configureFlags = [ "--with-xml-catalog=${docbook_xml_dtd_42}/xml/dtd/docbook/docbook.cat" ];
 
   passthru = {
diff --git a/pkgs/development/python-modules/Cython/default.nix b/pkgs/development/python-modules/Cython/default.nix
index de5eaea842b2..53e9ec270acf 100644
--- a/pkgs/development/python-modules/Cython/default.nix
+++ b/pkgs/development/python-modules/Cython/default.nix
@@ -25,11 +25,11 @@ let
 
 in buildPythonPackage rec {
   pname = "Cython";
-  version = "0.28.3";
+  version = "0.28.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1aae6d6e9858888144cea147eb5e677830f45faaff3d305d77378c3cba55f526";
+    sha256 = "b64575241f64f6ec005a4d4137339fb0ba5e156e826db2fdb5f458060d9979e0";
   };
 
   nativeBuildInputs = [
@@ -50,15 +50,6 @@ in buildPythonPackage rec {
 
   doCheck = !stdenv.isDarwin;
 
-  patches = [
-    # The following is in GitHub in 0.28.3 but not in the `sdist`.
-    # https://github.com/cython/cython/issues/2319
-    (fetchpatch {
-      url = https://github.com/cython/cython/commit/c485b1b77264c3c75d090a3c526de24966830d42.patch;
-      sha256 = "1p6jj9rb097kqvhs5j5127sj5zy18l7x9v0p478cjyzh41khh9r0";
-    })
-  ];
-
   meta = {
     description = "An optimising static compiler for both the Python programming language and the extended Cython programming language";
     homepage = http://cython.org;
diff --git a/pkgs/development/python-modules/Fabric/default.nix b/pkgs/development/python-modules/Fabric/default.nix
new file mode 100644
index 000000000000..ed89c26943f8
--- /dev/null
+++ b/pkgs/development/python-modules/Fabric/default.nix
@@ -0,0 +1,36 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, invoke
+, paramiko
+, cryptography
+, pytest
+, mock
+, pytest-relaxed
+}:
+
+buildPythonPackage rec {
+  pname = "fabric";
+  version = "2.4.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "93684ceaac92e0b78faae551297e29c48370cede12ff0f853cdebf67d4b87068";
+  };
+
+  propagatedBuildInputs = [ invoke paramiko cryptography ];
+  checkInputs = [ pytest mock pytest-relaxed ];
+
+  # ignore subprocess main errors (1) due to hardcoded /bin/bash
+  checkPhase = ''
+    rm tests/main.py
+    pytest tests
+  '';
+
+  meta = with pkgs.lib; {
+    description = "Pythonic remote execution";
+    homepage    = https://www.fabfile.org/;
+    license     = licenses.bsd2;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/Theano/default.nix b/pkgs/development/python-modules/Theano/default.nix
index 793488f0b136..a9799807a279 100644
--- a/pkgs/development/python-modules/Theano/default.nix
+++ b/pkgs/development/python-modules/Theano/default.nix
@@ -45,13 +45,13 @@ let
 
 in buildPythonPackage rec {
   pname = "Theano";
-  version = "1.0.2";
+  version = "1.0.3";
 
   disabled = isPyPy || pythonOlder "2.6" || (isPy3k && pythonOlder "3.3");
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6768e003d328a17011e6fca9126fbb8a6ffd3bb13cb21c450f3e724cca29abde";
+    sha256 = "637f3b34d40ef5e0d54dd4c40618475aaa085c26d2491e925c98e2ad4bc2115a";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/alabaster/default.nix b/pkgs/development/python-modules/alabaster/default.nix
index a2a35f852a3d..e5aaa9a6c769 100644
--- a/pkgs/development/python-modules/alabaster/default.nix
+++ b/pkgs/development/python-modules/alabaster/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "alabaster";
-  version = "0.7.11";
+  version = "0.7.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b63b1f4dc77c074d386752ec4a8a7517600f6c0db8cd42980cae17ab7b3275d7";
+    sha256 = "a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02";
   };
 
   propagatedBuildInputs = [ pygments ];
diff --git a/pkgs/development/python-modules/autobahn/default.nix b/pkgs/development/python-modules/autobahn/default.nix
index f618b05373a7..01922f98c402 100644
--- a/pkgs/development/python-modules/autobahn/default.nix
+++ b/pkgs/development/python-modules/autobahn/default.nix
@@ -4,11 +4,11 @@
 }:
 buildPythonPackage rec {
   pname = "autobahn";
-  version = "18.8.1";
+  version = "18.8.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "b69858e0be4bff8437b0bd82a0db1cbef7405e16bd9354ba587c043d6d5e1ad9";
+    sha256 = "448df2e241011ea2948799918930042d81e63d26b01912c472f5a9a37f42f319";
   };
 
   propagatedBuildInputs = [ six txaio twisted zope_interface cffi ] ++
diff --git a/pkgs/development/python-modules/beancount/default.nix b/pkgs/development/python-modules/beancount/default.nix
index 195a1ccad766..1a005d9e42d7 100644
--- a/pkgs/development/python-modules/beancount/default.nix
+++ b/pkgs/development/python-modules/beancount/default.nix
@@ -4,14 +4,14 @@
 , nose, requests }:
 
 buildPythonPackage rec {
-  version = "2.1.2";
+  version = "2.1.3";
   pname = "beancount";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d0d5f7088cb6b699cc4d030dad42d20b8228232cdb445bb1330d4ef5e3581f52";
+    sha256 = "4b7b0d3633c82ca88d3cb3d31ad2fd2e45a42401cfa94eaa1cb938ffece34f22";
   };
 
   checkInputs = [ nose ];
diff --git a/pkgs/development/python-modules/bedup/default.nix b/pkgs/development/python-modules/bedup/default.nix
new file mode 100644
index 000000000000..13aa48f7f8f3
--- /dev/null
+++ b/pkgs/development/python-modules/bedup/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, btrfs-progs
+, contextlib2
+, pyxdg
+, pycparser
+, alembic
+, cffi
+, pythonOlder
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  version = "0.10.1";
+  pname = "bedup";
+  disabled = pythonOlder "3.3";
+
+  src = fetchFromGitHub {
+    owner = "g2p";
+    repo = "bedup";
+    rev = "v${version}";
+    sha256 = "0sp8pmjkxcqq0alianfp41mwq7qj10rk1qy31pjjp9kiph1rn0x6";
+  };
+
+  buildInputs = [ btrfs-progs ];
+  propagatedBuildInputs = [ contextlib2 pyxdg pycparser alembic ]
+    ++ stdenv.lib.optionals (!isPyPy) [ cffi ];
+
+  meta = with stdenv.lib; {
+    description = "Deduplication for Btrfs";
+    longDescription = ''
+      Deduplication for Btrfs. bedup looks for new and changed files,
+      making sure that multiple copies of identical files share space
+      on disk. It integrates deeply with btrfs so that scans are
+      incremental and low-impact.
+    '';
+    homepage = https://github.com/g2p/bedup;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ bluescreen303 ];
+  };
+}
diff --git a/pkgs/development/python-modules/binwalk/default.nix b/pkgs/development/python-modules/binwalk/default.nix
new file mode 100644
index 000000000000..9bd7e586820d
--- /dev/null
+++ b/pkgs/development/python-modules/binwalk/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, zlib
+, xz
+, ncompress
+, gzip
+, bzip2
+, gnutar
+, p7zip
+, cabextract
+, lzma
+, pycrypto
+, pyqtgraph ? null }:
+
+let visualizationSupport = (pyqtgraph != null);
+in
+buildPythonPackage rec {
+  name = "binwalk-${version}";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "devttys0";
+    repo = "binwalk";
+    rev = "291a03595d17f848c73b74cb6ca508da782cd8f7";
+    sha256 = "0grid93yz6i6jb2zggrqncp5awdf7qi88j5y2k7dq0k9r6b8zydw";
+  };
+
+  propagatedBuildInputs = [ zlib xz ncompress gzip bzip2 gnutar p7zip cabextract lzma pycrypto ]
+    ++ stdenv.lib.optional visualizationSupport pyqtgraph;
+
+  meta = with stdenv.lib; {
+    homepage = "http://binwalk.org";
+    description = "A tool for searching a given binary image for embedded files";
+    maintainers = [ maintainers.koral ];
+  };
+}
diff --git a/pkgs/development/python-modules/bootstrapped-pip/default.nix b/pkgs/development/python-modules/bootstrapped-pip/default.nix
index 613be1f7d6b7..d482b7a8c88b 100644
--- a/pkgs/development/python-modules/bootstrapped-pip/default.nix
+++ b/pkgs/development/python-modules/bootstrapped-pip/default.nix
@@ -3,26 +3,26 @@
 let
   wheel_source = fetchPypi {
     pname = "wheel";
-    version = "0.31.1";
+    version = "0.32.1";
     format = "wheel";
-    sha256 = "80044e51ec5bbf6c894ba0bc48d26a8c20a9ba629f4ca19ea26ecfcf87685f5f";
+    sha256 = "15hizylh761jcaz8zfdc3wg30jf33izaakyv1p82ppx2y5rgg8cz";
   };
   setuptools_source = fetchPypi {
     pname = "setuptools";
-    version = "40.2.0";
+    version = "40.4.3";
     format = "wheel";
-    sha256 = "ea3796a48a207b46ea36a9d26de4d0cc87c953a683a7b314ea65d666930ea8e6";
+    sha256 = "1zzryv1fqx4nk7hzv4afxpl8k7f60lc0qkhxlc8sqjs4igakfhff";
   };
 
 in stdenv.mkDerivation rec {
   pname = "pip";
-  version = "18.0";
+  version = "18.1";
   name = "${python.libPrefix}-bootstrapped-${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
     format = "wheel";
-    sha256 = "070e4bf493c7c2c9f6a08dd797dd3c066d64074c38e9e8a0fb4e6541f266d96c";
+    sha256 = "7909d0a0932e88ea53a7014dfd14522ffef91a464daaaf5c573343852ef98550";
   };
 
   unpackPhase = ''
diff --git a/pkgs/development/python-modules/box2d/default.nix b/pkgs/development/python-modules/box2d/default.nix
new file mode 100644
index 000000000000..f1bd87126795
--- /dev/null
+++ b/pkgs/development/python-modules/box2d/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, swig2
+, pkgs-box2d
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "Box2D";
+  version = "2.3.2";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d1557dffdf9c1d6c796ec5df53e3d93227bb026c14b8411d22c295edaa2fb225";
+  };
+
+  postPatch = ''
+    sed -i "s/'Box2D.tests' : 'tests'//" setup.py
+  '';
+
+  buildInputs = [ swig2 pkgs-box2d ];
+
+  # tests not included with pypi release
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/pybox2d/pybox2d;
+    description = ''
+      A 2D game physics library for Python under
+      the very liberal zlib license
+    '';
+    license = licenses.zlib;
+    maintainers = with maintainers; [ sepi ];
+  };
+}
diff --git a/pkgs/development/python-modules/box2d/disable-test.patch b/pkgs/development/python-modules/box2d/disable-test.patch
deleted file mode 100644
index bc2897a8b100..000000000000
--- a/pkgs/development/python-modules/box2d/disable-test.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Common subdirectories: Box2D-2.3b0/Box2D and Box2D-2.3b0.new/Box2D
-Common subdirectories: Box2D-2.3b0/examples and Box2D-2.3b0.new/examples
-Common subdirectories: Box2D-2.3b0/library and Box2D-2.3b0.new/library
-diff -u Box2D-2.3b0/setup.py Box2D-2.3b0.new/setup.py
---- Box2D-2.3b0/setup.py	2013-02-02 18:09:34.000000000 +0100
-+++ Box2D-2.3b0.new/setup.py	2014-10-25 13:32:07.136922343 +0200
-@@ -176,7 +176,6 @@
-     package_dir      = {'Box2D': library_path, 

-                         'Box2D.b2': os.path.join(library_path, 'b2'),

-                         'Box2D.tests' : 'tests'},

--    test_suite       = 'tests',

-     options          = { 'build_ext': { 'swig_opts' : swig_arguments },

-                          'egg_info' : { 'egg_base' : library_base },

-                         },

diff --git a/pkgs/development/python-modules/bsddb3/default.nix b/pkgs/development/python-modules/bsddb3/default.nix
new file mode 100644
index 000000000000..971aac70ad8e
--- /dev/null
+++ b/pkgs/development/python-modules/bsddb3/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "bsddb3";
+  version = "6.2.6";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "42d621f4037425afcb16b67d5600c4556271a071a9a7f7f2c2b1ba65bc582d05";
+  };
+
+  buildInputs = [ pkgs.db ];
+
+  # Judging from SyntaxError in test
+  doCheck = false; # test suite breaks python3 compatibility
+
+  # Path to database need to be set.
+  # Somehow the setup.py flag is not propagated.
+  #setupPyBuildFlags = [ "--berkeley-db=${pkgs.db}" ];
+  # We can also use a variable
+  preConfigure = ''
+    export BERKELEYDB_DIR=${pkgs.db.dev};
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Python bindings for Oracle Berkeley DB";
+    homepage = https://www.jcea.es/programacion/pybsddb.htm;
+    license = with licenses; [ agpl3 ]; # License changed from bsd3 to agpl3 since 6.x
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/bugz/default.nix b/pkgs/development/python-modules/bugz/default.nix
new file mode 100644
index 000000000000..4af8b247fcf3
--- /dev/null
+++ b/pkgs/development/python-modules/bugz/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+}:
+
+buildPythonPackage rec {
+  pname = "bugz-0.9.3";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "williamh";
+    repo = "pybugz";
+    rev = "0.13";
+    sha256 = "1nw07q7r078dp82rcrhvvnhmnaqjx6f8a6cdjgrsiy6fryrx9dwz";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://www.liquidx.net/pybugz/;
+    description = "Command line interface for Bugzilla";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/buildout-nix/default.nix b/pkgs/development/python-modules/buildout-nix/default.nix
index 5a1bc4485b71..c76a930c9655 100644
--- a/pkgs/development/python-modules/buildout-nix/default.nix
+++ b/pkgs/development/python-modules/buildout-nix/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "zc.buildout";
-  version = "2.12.1";
+  version = "2.12.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1e180b62fd129a68cb3a9ec8eb0ef457e18921269a93e87ef2cc34519415332d";
+    sha256 = "ff5d7e8a1361da8dfe1025d35ef6ce55e929dd8518d2a811a1cf2c948950a043";
   };
 
   patches = [ ./nix.patch ];
diff --git a/pkgs/development/python-modules/buildout/default.nix b/pkgs/development/python-modules/buildout/default.nix
index c75b9fdb6ccb..ede09373f90f 100644
--- a/pkgs/development/python-modules/buildout/default.nix
+++ b/pkgs/development/python-modules/buildout/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "zc.buildout";
-  version = "2.12.1";
+  version = "2.12.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1e180b62fd129a68cb3a9ec8eb0ef457e18921269a93e87ef2cc34519415332d";
+    sha256 = "ff5d7e8a1361da8dfe1025d35ef6ce55e929dd8518d2a811a1cf2c948950a043";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/bumps/default.nix b/pkgs/development/python-modules/bumps/default.nix
index 469b449483af..d8fc3d992352 100644
--- a/pkgs/development/python-modules/bumps/default.nix
+++ b/pkgs/development/python-modules/bumps/default.nix
@@ -2,7 +2,7 @@
 
 buildPythonPackage rec {
   pname = "bumps";
-  version = "0.7.10";
+  version = "0.7.11";
 
   propagatedBuildInputs = [six];
 
@@ -12,7 +12,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07917abf7e598f2a42456ca4f704c6da2a5489eaea0b9a7c61ed8a26506737c8";
+    sha256 = "16d24a7f965592d9b02f96e68e6aa70d6fb59abe4db37bb14c4b60c509a3c2ef";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/caldavclientlibrary-asynk/default.nix b/pkgs/development/python-modules/caldavclientlibrary-asynk/default.nix
new file mode 100644
index 000000000000..7f4857a95319
--- /dev/null
+++ b/pkgs/development/python-modules/caldavclientlibrary-asynk/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "asynkdev";
+  pname = "caldavclientlibrary-asynk";
+
+  src = fetchgit {
+    url = "https://github.com/skarra/CalDAVClientLibrary.git";
+    rev = "06699b08190d50cc2636b921a654d67db0a967d1";
+    sha256 = "157q32251ac9x3gdshgrjwsy48nq74vrzviswvph56h9wa8ksnnk";
+  };
+
+  disabled = isPy3k;
+
+  meta = with stdenv.lib; {
+    description = "A Python library and tool for CalDAV";
+
+    longDescription = ''
+      CalDAVCLientLibrary is a Python library and tool for CalDAV.
+
+      This package is the unofficial CalDAVCLientLibrary Python
+      library maintained by the author of Asynk and is needed for
+      that package.
+    '';
+
+    homepage = https://github.com/skarra/CalDAVClientLibrary/tree/asynkdev/;
+    maintainers = with maintainers; [ pjones ];
+    broken = true; # 2018-04-11
+  };
+
+}
diff --git a/pkgs/development/python-modules/capstone/default.nix b/pkgs/development/python-modules/capstone/default.nix
new file mode 100644
index 000000000000..91e00ed7e43c
--- /dev/null
+++ b/pkgs/development/python-modules/capstone/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, fetchpatch
+}:
+
+buildPythonPackage rec {
+  pname = "capstone";
+  version = "3.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "945d3b8c3646a1c3914824c416439e2cf2df8969dd722c8979cdcc23b40ad225";
+  };
+
+  patches = [
+    (fetchpatch {
+      stripLen = 2;
+      url = "https://patch-diff.githubusercontent.com/raw/aquynh/capstone/pull/783/commits/23fe9f36622573c747e2bab6119ff245437bf276.patch";
+      sha256 = "0yizqrdlxqxn16873593kdx2vrr7gvvilhgcf9xy6hr0603d3m5r";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs src/make.sh
+  '';
+
+  preCheck = ''
+    mv src/libcapstone.so capstone
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "http://www.capstone-engine.org/";
+    license = licenses.bsdOriginal;
+    description = "Capstone disassembly engine";
+    maintainers = with maintainers; [ bennofs ];
+  };
+}
diff --git a/pkgs/development/python-modules/carbon/default.nix b/pkgs/development/python-modules/carbon/default.nix
index df14f44f0b00..0398782900d5 100644
--- a/pkgs/development/python-modules/carbon/default.nix
+++ b/pkgs/development/python-modules/carbon/default.nix
@@ -4,13 +4,13 @@
 
 buildPythonPackage rec {
   pname = "carbon";
-  version = "1.1.3";
+  version = "1.1.4";
 
   disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1s7327p30w4l9ak4gc7m5ga521233179n2lr3j0ggfbmfhd6blky";
+    sha256 = "1b70e34ac0f0bd32a03ee14eaf1ed2c857e208984fc9761f59a95c21c5264513";
   };
 
   propagatedBuildInputs = [ twisted whisper txamqp cachetools urllib3 ];
diff --git a/pkgs/development/python-modules/cassandra-driver/default.nix b/pkgs/development/python-modules/cassandra-driver/default.nix
new file mode 100644
index 000000000000..110cd1e0bd5b
--- /dev/null
+++ b/pkgs/development/python-modules/cassandra-driver/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, cython
+, futures
+, six
+, python
+, scales
+, eventlet
+, twisted
+, mock
+, gevent
+, nose
+, pytz
+, pyyaml
+, sure
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "cassandra-driver";
+  version = "3.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1aqmy3psn12lxgp659d0zsxkirxzy5lnbnzxf9xjq1a93s3qm704";
+  };
+
+  buildInputs = [ pkgs.libev cython ];
+
+  propagatedBuildInputs = [ six ]
+    ++ stdenv.lib.optionals (pythonOlder "3.4") [ futures ];
+
+  postPatch = ''
+    sed -i "s/<=1.0.1//" setup.py
+  '';
+
+  checkPhase = ''
+    ${python.interpreter} setup.py gevent_nosetests
+    ${python.interpreter} setup.py eventlet_nosetests
+  '';
+
+  checkInputs = [ scales eventlet twisted mock gevent nose pytz pyyaml sure ];
+
+  # Could not get tests running
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://datastax.github.io/python-driver/;
+    description = "A Python client driver for Apache Cassandra";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/cddb/default.nix b/pkgs/development/python-modules/cddb/default.nix
new file mode 100644
index 000000000000..f40ff08fcf42
--- /dev/null
+++ b/pkgs/development/python-modules/cddb/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, pkgs
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  name = "CDDB-1.4";
+  disabled = isPy3k;
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin [ pkgs.darwin.apple_sdk.frameworks.IOKit ];
+
+  src = pkgs.fetchurl {
+    url = "http://cddb-py.sourceforge.net/${name}.tar.gz";
+    sha256 = "098xhd575ibvdx7i3dny3lwi851yxhjg2hn5jbbgrwj833rg5l5w";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://cddb-py.sourceforge.net/;
+    description = "CDDB and FreeDB audio CD track info access";
+    license = licenses.gpl2Plus;
+  };
+
+}
diff --git a/pkgs/development/python-modules/chameleon/default.nix b/pkgs/development/python-modules/chameleon/default.nix
new file mode 100644
index 000000000000..1a2811b50b67
--- /dev/null
+++ b/pkgs/development/python-modules/chameleon/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "Chameleon";
+  version = "2.25";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0va95cml7wfjpvgj3dc9xdn8psyjh3zbk6v51b0hcqv2fzh409vb";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://chameleon.readthedocs.io/;
+    description = "Fast HTML/XML Template Compiler";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/click-plugins/default.nix b/pkgs/development/python-modules/click-plugins/default.nix
index 74d64d8390cf..a5124ac86134 100644
--- a/pkgs/development/python-modules/click-plugins/default.nix
+++ b/pkgs/development/python-modules/click-plugins/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "click-plugins";
-  version = "1.0.3";
+  version = "1.0.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ifphgaw5mmcdnqd0qfnmrbm62q3k6p573aff4cxgpyjxmz5xk3s";
+    sha256 = "dfed74b5063546a137de99baaaf742b4de4337ad2b3e1df5ec7c8a256adc0847";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/closure-linter/default.nix b/pkgs/development/python-modules/closure-linter/default.nix
new file mode 100644
index 000000000000..f6c94ace1fad
--- /dev/null
+++ b/pkgs/development/python-modules/closure-linter/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, isPy3k
+, gflags
+}:
+
+/* There is a project called "closure-linter" on PyPI that is the
+   same as this, but it does not appear to be owned by Google.
+   So we're pulling from Google's GitHub repo instead. */
+buildPythonPackage rec {
+  pname = "closure-linter";
+  version = "2.3.19";
+
+  /* This project has no Python 3 support, as noted by
+     https://github.com/google/closure-linter/issues/81 */
+  disabled = isPy3k;
+
+  src = fetchgit {
+    url = "https://github.com/google/closure-linter";
+    rev = "5c27529075bb88bdc45e73008f496dec8438d658";
+    sha256 = "076c7q7pr7akfvq5y8lxr1ab81wwps07gw00igdkcxnc5k9dzxwc";
+  };
+
+  propagatedBuildInputs = [ gflags ];
+
+  meta = with stdenv.lib; {
+    description = "Checks JavaScript files against Google's style guide.";
+    homepage = "https://developers.google.com/closure/utilities/";
+    license = with licenses; [ asl20 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/cloudpickle/default.nix b/pkgs/development/python-modules/cloudpickle/default.nix
index f70ebee411ab..b00d210a464a 100644
--- a/pkgs/development/python-modules/cloudpickle/default.nix
+++ b/pkgs/development/python-modules/cloudpickle/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "cloudpickle";
-  version = "0.5.5";
+  version = "0.5.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6ea4b548f61a4f616b065182716318c7dced8c053517f35ac59cec22802daf3d";
+    sha256 = "0390ecb3731ac035d74c34651460f4a683e9ef7443861712b8d56c20c2f92113";
   };
 
   buildInputs = [ pytest mock ];
diff --git a/pkgs/development/python-modules/cntk/default.nix b/pkgs/development/python-modules/cntk/default.nix
new file mode 100644
index 000000000000..2bcb7165ca1c
--- /dev/null
+++ b/pkgs/development/python-modules/cntk/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, pkgs
+, numpy
+, scipy
+, enum34
+, protobuf
+, pip
+, python
+}:
+
+buildPythonPackage rec {
+  inherit (pkgs.cntk) name version src meta;
+
+  buildInputs = [ pkgs.cntk pkgs.swig pkgs.openmpi ];
+  propagatedBuildInputs = [ numpy scipy enum34 protobuf pip ];
+
+  CNTK_LIB_PATH = "${pkgs.cntk}/lib";
+  CNTK_COMPONENT_VERSION = pkgs.cntk.version;
+
+  postPatch = ''
+    cd bindings/python
+    sed -i 's,"libmpi.so.12","${pkgs.openmpi}/lib/libmpi.so",g' cntk/train/distributed.py
+  '';
+
+  postInstall = ''
+    rm -rf $out/${python.sitePackages}/cntk/libs
+    ln -s ${pkgs.cntk}/lib $out/${python.sitePackages}/cntk/libs
+    # It's not installed for some reason.
+    cp cntk/cntk_py.py $out/${python.sitePackages}/cntk
+  '';
+
+  # Actual tests are broken.
+  checkPhase = ''
+    cd $NIX_BUILD_TOP
+    ${python.interpreter} -c "import cntk"
+  '';
+}
diff --git a/pkgs/development/python-modules/colanderalchemy/default.nix b/pkgs/development/python-modules/colanderalchemy/default.nix
new file mode 100644
index 000000000000..78f0f6fe371f
--- /dev/null
+++ b/pkgs/development/python-modules/colanderalchemy/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchpatch
+, fetchPypi
+, unittest2
+, colander
+, sqlalchemy
+}:
+
+buildPythonPackage rec {
+  pname = "ColanderAlchemy";
+  version = "0.3.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "11wcni2xmfmy001rj62q2pwf305vvngkrfm5c4zlwvgbvlsrvnnw";
+  };
+
+  patches = [
+    (fetchpatch {
+        url = "https://github.com/stefanofontanelli/ColanderAlchemy/commit/b45fe35f2936a5ccb705e9344075191e550af6c9.patch";
+        sha256 = "1kf278wjq49zd6fhpp55vdcawzdd107767shzfck522sv8gr6qvx";
+    })
+  ];
+
+  buildInputs = [ unittest2 ];
+  propagatedBuildInputs = [ colander sqlalchemy ];
+
+  meta = with stdenv.lib; {
+    description = "Autogenerate Colander schemas based on SQLAlchemy models";
+    homepage = https://github.com/stefanofontanelli/ColanderAlchemy;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/colored/default.nix b/pkgs/development/python-modules/colored/default.nix
new file mode 100644
index 000000000000..a32c9ebb429c
--- /dev/null
+++ b/pkgs/development/python-modules/colored/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "colored";
+  version = "1.1.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1r1vsypk8v7az82d66bidbxlndx1h7xd4m43hpg1a6hsjr30wrm3";
+  };
+
+  # No proper test suite
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://gitlab.com/dslackw/colored;
+    description = "Simple library for color and formatting to terminal";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/cornice/default.nix b/pkgs/development/python-modules/cornice/default.nix
new file mode 100644
index 000000000000..dc7c9c334d3c
--- /dev/null
+++ b/pkgs/development/python-modules/cornice/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pyramid
+, simplejson
+, six
+, venusian
+}:
+
+buildPythonPackage rec {
+  pname = "cornice";
+  version = "3.4.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a7f8db903ba06c2584c7db4474459de3565d90b5e4ae4b97c687840e11d5b7fd";
+  };
+
+  propagatedBuildInputs = [ pyramid simplejson six venusian ];
+
+  # tests not packaged with pypi release
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mozilla-services/cornice;
+    description = "Build Web Services with Pyramid";
+    license = licenses.mpl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/cupy/default.nix b/pkgs/development/python-modules/cupy/default.nix
index 9a836e88752a..f9f400408a78 100644
--- a/pkgs/development/python-modules/cupy/default.nix
+++ b/pkgs/development/python-modules/cupy/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "cupy";
-  version = "4.4.0";
+  version = "4.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fca0e3d3fdad4c825197ea421bed0d253224b44daf738d82af5cba856c1c0b3e";
+    sha256 = "d46a3eea628a17b9c3f446e4b13513a1f0cc0b9930214417b41c90dcf0bb427f";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/cvxopt/default.nix b/pkgs/development/python-modules/cvxopt/default.nix
index e17bd38da02b..f0de39edd0d2 100644
--- a/pkgs/development/python-modules/cvxopt/default.nix
+++ b/pkgs/development/python-modules/cvxopt/default.nix
@@ -15,13 +15,13 @@
 
 buildPythonPackage rec {
   pname = "cvxopt";
-  version = "1.2.0";
+  version = "1.2.1";
 
   disabled = isPyPy; # hangs at [translation:info]
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3296c9d49b7dcb894b20db5d7d1c1a443912b4d82358e03f836575e8398e0d60";
+    sha256 = "12e3cfda982576b0b9b597d297aaf3172efa765a20fbed6f3c066aa0c48ee817";
   };
 
   # similar to Gsl, glpk, fftw there is also a dsdp interface
diff --git a/pkgs/development/python-modules/dask-image/default.nix b/pkgs/development/python-modules/dask-image/default.nix
index 15a13b2ff714..ed576bcc02bb 100644
--- a/pkgs/development/python-modules/dask-image/default.nix
+++ b/pkgs/development/python-modules/dask-image/default.nix
@@ -10,12 +10,12 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.1.1";
+  version = "0.1.2";
   pname = "dask-image";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e6294ac577a8fc0abec2b97a2c42d404f599feac61d6899bdf1bf2b7cfb0e015";
+    sha256 = "401e2c345a582eb2859a4a2a4a6fcfbc85beece59705f3ead9b6708a0cd183e7";
   };
 
   checkInputs = [ pytest scikitimage ];
diff --git a/pkgs/development/python-modules/ddt/default.nix b/pkgs/development/python-modules/ddt/default.nix
new file mode 100644
index 000000000000..2fb9e9e990b6
--- /dev/null
+++ b/pkgs/development/python-modules/ddt/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "ddt";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "e24ecb7e2cf0bf43fa9d4255d3ae2bd0b7ce30b1d1b89ace7aa68aca1152f37a";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Data-Driven/Decorated Tests, a library to multiply test cases";
+    homepage = https://github.com/txels/ddt;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/deprecation/default.nix b/pkgs/development/python-modules/deprecation/default.nix
index 10e0d79dddf5..600fe8887514 100644
--- a/pkgs/development/python-modules/deprecation/default.nix
+++ b/pkgs/development/python-modules/deprecation/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "deprecation";
-  version = "2.0.5";
+  version = "2.0.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "cbe7d15006bc339709be5e02b14884ecc479639c1a3714a908de3a8ca13b5ca9";
+    sha256 = "68071e5ae7cd7e9da6c7dffd750922be4825c7c3a6780d29314076009cc39c35";
   };
 
   propagatedBuildInputs = [ packaging ];
diff --git a/pkgs/development/python-modules/deskcon/default.nix b/pkgs/development/python-modules/deskcon/default.nix
new file mode 100644
index 000000000000..05fa3aa835a3
--- /dev/null
+++ b/pkgs/development/python-modules/deskcon/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, buildPythonPackage
+, pyopenssl
+, pkgs
+, isPy3k
+, python
+}:
+
+buildPythonPackage rec {
+  name = "deskcon-0.3";
+  disabled = isPy3k;
+
+  src = pkgs.fetchFromGitHub {
+    owner= "screenfreeze";
+    repo = "deskcon-desktop";
+    rev = "267804122188fa79c37f2b21f54fe05c898610e6";
+    sha256 ="0i1dd85ls6n14m9q7lkympms1w3x0pqyaxvalq82s4xnjdv585j3";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  pythonPath = [ pyopenssl pkgs.gtk3 ];
+
+  installPhase = ''
+    substituteInPlace server/deskcon-server --replace "python2" "python"
+
+    mkdir -p $out/bin
+    mkdir -p $out/lib/${python.libPrefix}/site-packages
+    cp -r "server/"* $out/lib/${python.libPrefix}/site-packages
+    mv $out/lib/${python.libPrefix}/site-packages/deskcon-server $out/bin/deskcon-server
+
+    wrapPythonProgramsIn $out/bin "$out $pythonPath"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Integrates an Android device into a desktop";
+    homepage = https://github.com/screenfreeze/deskcon-desktop;
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/distributed/default.nix b/pkgs/development/python-modules/distributed/default.nix
index 694bc2ce4f94..65d0b1ab77f1 100644
--- a/pkgs/development/python-modules/distributed/default.nix
+++ b/pkgs/development/python-modules/distributed/default.nix
@@ -26,12 +26,12 @@
 
 buildPythonPackage rec {
   pname = "distributed";
-  version = "1.23.1";
+  version = "1.23.3";
 
   # get full repository need conftest.py to run tests
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9d4693442efe40e05e4304fe6d8174989c6eb4bad1afe70480c98263ef8e1cdb";
+    sha256 = "2d48a4de280fd7243ca76f9b12db5fe2486fc89dcdb510c77fa51f51733a04cc";
   };
 
   checkInputs = [ pytest pytest-repeat pytest-faulthandler pytest-timeout mock joblib ];
diff --git a/pkgs/development/python-modules/distutils_extra/default.nix b/pkgs/development/python-modules/distutils_extra/default.nix
new file mode 100644
index 000000000000..52b3b41b02bc
--- /dev/null
+++ b/pkgs/development/python-modules/distutils_extra/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+}:
+
+buildPythonPackage rec {
+  pname = "distutils-extra";
+  version = "2.39";
+
+  src = fetchurl {
+    url = "http://launchpad.net/python-distutils-extra/trunk/${version}/+download/python-${pname}-${version}.tar.gz";
+    sha256 = "1bv3h2p9ffbzyddhi5sccsfwrm3i6yxzn0m06fdxkj2zsvs28gvj";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://launchpad.net/python-distutils-extra;
+    description = "Enhancements to Python's distutils";
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django/1_8.nix b/pkgs/development/python-modules/django/1_8.nix
new file mode 100644
index 000000000000..e87a9cbad027
--- /dev/null
+++ b/pkgs/development/python-modules/django/1_8.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  name = "Django-${version}";
+  version = "1.8.18";
+  disabled = pythonOlder "2.7";
+
+  src = fetchurl {
+    url = "http://www.djangoproject.com/m/releases/1.8/${name}.tar.gz";
+    sha256 = "1ishvbihr9pain0486qafb18dnb7v2ppq34nnx1s8f95bvfiqqf7";
+  };
+
+  # too complicated to setup
+  doCheck = false;
+
+  # patch only $out/bin to avoid problems with starter templates (see #3134)
+  postFixup = ''
+    wrapPythonProgramsIn $out/bin "$out $pythonPath"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A high-level Python Web framework";
+    homepage = https://www.djangoproject.com/;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_classytags/default.nix b/pkgs/development/python-modules/django_classytags/default.nix
new file mode 100644
index 000000000000..022709bacbe0
--- /dev/null
+++ b/pkgs/development/python-modules/django_classytags/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-classy-tags";
+  version = "0.6.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0wxvpmjdzk0aajk33y4himn3wqjx7k0aqlka9j8ay3yfav78bdq0";
+  };
+
+  propagatedBuildInputs = [ django ];
+
+  # tests appear to be broken on 0.6.1 at least
+  doCheck = ( version != "0.6.1" );
+
+  meta = with stdenv.lib; {
+    description = "Class based template tags for Django";
+    homepage = https://github.com/ojii/django-classy-tags;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_colorful/default.nix b/pkgs/development/python-modules/django_colorful/default.nix
new file mode 100644
index 000000000000..7da878880dab
--- /dev/null
+++ b/pkgs/development/python-modules/django_colorful/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-colorful";
+  version = "1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0y34hzvfrm1xbxrd8frybc9yzgqvz4c07frafipjikw7kfjsw8az";
+  };
+
+  # Tests aren't run
+  doCheck = false;
+
+  # Requires Django >= 1.8
+  buildInputs = [ django ];
+
+  meta = with stdenv.lib; {
+    description = "Django extension that provides database and form color fields";
+    homepage = https://github.com/charettes/django-colorful;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_contrib_comments/default.nix b/pkgs/development/python-modules/django_contrib_comments/default.nix
new file mode 100644
index 000000000000..f850350ee168
--- /dev/null
+++ b/pkgs/development/python-modules/django_contrib_comments/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-contrib-comments";
+  version = "1.9.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "689f3f80ff7ea8ab9f712ae5fe17ffa2ee8babbf8d75229ee8acc7bad461dfef";
+  };
+
+  propagatedBuildInputs = [ django ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/django/django-contrib-comments;
+    description = "The code formerly known as django.contrib.comments";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_environ/default.nix b/pkgs/development/python-modules/django_environ/default.nix
new file mode 100644
index 000000000000..15eafa6dd855
--- /dev/null
+++ b/pkgs/development/python-modules/django_environ/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "django-environ";
+  version = "0.4.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0i32vsgk1xmwpi7i6f6v5hg653y9dl0fsz5qmv94skz6hwgm5kvh";
+  };
+
+  # The testsuite fails to modify the base environment
+  doCheck = false;
+  propagatedBuildInputs = [ django six ];
+
+  meta = with stdenv.lib; {
+    description = "Utilize environment variables to configure your Django application";
+    homepage = https://github.com/joke2k/django-environ/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_evolution/default.nix b/pkgs/development/python-modules/django_evolution/default.nix
new file mode 100644
index 000000000000..92ed3d572a1e
--- /dev/null
+++ b/pkgs/development/python-modules/django_evolution/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django_evolution";
+  version = "0.7.5";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1qbcx54hq8iy3n2n6cki3bka1m9rp39np4hqddrm9knc954fb7nv";
+  };
+
+  propagatedBuildInputs = [ django ];
+
+  meta = with stdenv.lib; {
+    description = "A database schema evolution tool for the Django web framework";
+    homepage = http://code.google.com/p/django-evolution/;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_modelcluster/default.nix b/pkgs/development/python-modules/django_modelcluster/default.nix
new file mode 100644
index 000000000000..3a2aad16ba5f
--- /dev/null
+++ b/pkgs/development/python-modules/django_modelcluster/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytz
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "django-modelcluster";
+  version = "0.6.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1plsdi44dvsj2sfx79lsrccjfg0ymajcsf5n0mln4cwd4qi5mwpx";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ pytz six ];
+
+  meta = with stdenv.lib; {
+    description = "Django extension to allow working with 'clusters' of models as a single unit, independently of the database";
+    homepage = https://github.com/torchbox/django-modelcluster/;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ desiderius ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_nose/default.nix b/pkgs/development/python-modules/django_nose/default.nix
new file mode 100644
index 000000000000..9d16ee343d6a
--- /dev/null
+++ b/pkgs/development/python-modules/django_nose/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-nose";
+  version = "1.4.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1fm47fkza2lk0xgc6qpi9vs78zg7q8cgl6mdan69sbycgy909ff0";
+  };
+
+  # vast dependency list
+  doCheck = false;
+
+  propagatedBuildInputs = [ django nose ];
+
+  meta = with stdenv.lib; {
+    description = "Provides all the goodness of nose in your Django tests";
+    homepage = https://github.com/django-nose/django-nose;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_reversion/default.nix b/pkgs/development/python-modules/django_reversion/default.nix
new file mode 100644
index 000000000000..038a3d439fac
--- /dev/null
+++ b/pkgs/development/python-modules/django_reversion/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-reversion";
+  version = "1.10.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01iv8w6lmmq98qjhxmnp8ddjxifmhxcmp612ijd91wc8nv8lk12w";
+  };
+
+  propagatedBuildInputs = [ django ];
+
+  meta = with stdenv.lib; {
+    description = "An extension to the Django web framework that provides comprehensive version control facilities";
+    homepage = https://github.com/etianen/django-reversion;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_silk/default.nix b/pkgs/development/python-modules/django_silk/default.nix
new file mode 100644
index 000000000000..ad8d0bee7f45
--- /dev/null
+++ b/pkgs/development/python-modules/django_silk/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+, pygments
+, simplejson
+, dateutil
+, requests
+, sqlparse
+, jinja2
+, autopep8
+, pytz
+, pillow
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "django-silk";
+  version = "0.5.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "845abc688738858ce06e993c4b7dbbcfcecf33029e828f143463ff96f9a78947";
+  };
+
+  doCheck = false;
+
+  buildInputs = [ mock ];
+  propagatedBuildInputs = [ django pygments simplejson dateutil requests sqlparse jinja2 autopep8 pytz pillow ];
+
+  meta = with stdenv.lib; {
+    description = "Silky smooth profiling for the Django Framework";
+    homepage = https://github.com/mtford90/silk;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_taggit/default.nix b/pkgs/development/python-modules/django_taggit/default.nix
new file mode 100644
index 000000000000..276097802e70
--- /dev/null
+++ b/pkgs/development/python-modules/django_taggit/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+  pname = "django-taggit";
+  version = "0.17.0";
+  disabled = pythonOlder "2.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1xy4mm1y6z6bpakw907859wz7fiw7jfm586dj89w0ggdqlb0767b";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "django-taggit is a reusable Django application for simple tagging";
+    homepage = https://github.com/alex/django-taggit/tree/master/;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ desiderius ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/django_treebeard/default.nix b/pkgs/development/python-modules/django_treebeard/default.nix
new file mode 100644
index 000000000000..5c45b18be640
--- /dev/null
+++ b/pkgs/development/python-modules/django_treebeard/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, django
+}:
+
+buildPythonPackage rec {
+  pname = "django-treebeard";
+  version = "4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c21db06a8d4943bf2a28d9d7a119058698fb76116df2679ecbf15a46a501de42";
+  };
+
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ django ];
+
+  # tests fail  "AppRegistryNotReady("Apps aren't loaded yet.")"
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Efficient tree implementations for Django 1.6+";
+    homepage = https://tabo.pe/projects/django-treebeard/;
+    maintainers = with maintainers; [ desiderius ];
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/dominate/default.nix b/pkgs/development/python-modules/dominate/default.nix
index 86b3271990d5..4e918968f44a 100644
--- a/pkgs/development/python-modules/dominate/default.nix
+++ b/pkgs/development/python-modules/dominate/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "dominate";
-  version = "2.3.1";
+  version = "2.3.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0s9s9j9xmhkzw7apqx170fyvc0f800fd4a5jfn8xvj9k6vryd32b";
+    sha256 = "8dfcca2bde3937a2d03db6e55efcb0c0dea0d4ab0923dc983d794b19e9247328";
   };
 
   doCheck = !isPy3k;
diff --git a/pkgs/development/python-modules/dtopt/default.nix b/pkgs/development/python-modules/dtopt/default.nix
new file mode 100644
index 000000000000..601ebf6d9a99
--- /dev/null
+++ b/pkgs/development/python-modules/dtopt/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "dtopt";
+  version = "0.1";
+  # Test contain Python 2 print
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06ae07a12294a7ba708abaa63f838017d1a2faf6147a1e7a14ca4fa28f86da7f";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Add options to doctest examples while they are running";
+    homepage = https://pypi.python.org/pypi/dtopt;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/dynd/default.nix b/pkgs/development/python-modules/dynd/default.nix
new file mode 100644
index 000000000000..8d8fbf7a7cef
--- /dev/null
+++ b/pkgs/development/python-modules/dynd/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPyPy
+, isPy3k
+, cython
+, numpy
+, pkgs
+}:
+
+buildPythonPackage rec {
+  version = "0.7.2";
+  pname = "dynd";
+  disabled = isPyPy || !isPy3k; # tests fail on python2, 2018-04-11
+
+  src = pkgs.fetchFromGitHub {
+    owner = "libdynd";
+    repo = "dynd-python";
+    rev = "v${version}";
+    sha256 = "19igd6ibf9araqhq9bxmzbzdz05vp089zxvddkiik3b5gb7l17nh";
+  };
+
+  # setup.py invokes git on build but we're fetching a tarball, so
+  # can't retrieve git version. We hardcode:
+  preConfigure = ''
+    substituteInPlace setup.py --replace "ver = check_output(['git', 'describe', '--dirty'," "ver = '${version}'"
+    substituteInPlace setup.py --replace "'--always', '--match', 'v*']).decode('ascii').strip('\n')" ""
+  '';
+
+  # Python 3 works but has a broken import test that I couldn't
+  # figure out.
+  doCheck = !isPy3k;
+  buildInputs = [ pkgs.cmake pkgs.libdynd.dev cython ];
+  propagatedBuildInputs = [ numpy pkgs.libdynd ];
+
+  meta = with stdenv.lib; {
+    homepage = http://libdynd.org;
+    license = licenses.bsd2;
+    description = "Python exposure of dynd";
+    maintainers = with maintainers; [ teh ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ecdsa/default.nix b/pkgs/development/python-modules/ecdsa/default.nix
new file mode 100644
index 000000000000..e9fdc71cd64a
--- /dev/null
+++ b/pkgs/development/python-modules/ecdsa/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "ecdsa";
+  version = "0.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4";
+  };
+
+  # Only needed for tests
+  buildInputs = [ pkgs.openssl ];
+
+  meta = with stdenv.lib; {
+    description = "ECDSA cryptographic signature library";
+    homepage = "https://github.com/warner/python-ecdsa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aszlig ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/editorconfig/default.nix b/pkgs/development/python-modules/editorconfig/default.nix
new file mode 100644
index 000000000000..97e486a0532b
--- /dev/null
+++ b/pkgs/development/python-modules/editorconfig/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, cmake
+}:
+
+buildPythonPackage rec {
+  pname = "EditorConfig";
+  version = "0.12.1";
+
+  # fetchgit used to ensure test submodule is available
+  src = fetchgit {
+    url = "https://github.com/editorconfig/editorconfig-core-py";
+    rev = "refs/tags/v${version}";
+    sha256 = "0svk7id7ncygj2rnxhm7602xizljyidk4xgrl6i0xgq3829cz4bl";
+  };
+
+  buildInputs = [ cmake ];
+  checkPhase = ''
+    cmake .
+    # utf_8_char fails with python3
+    ctest -E "utf_8_char" .
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://editorconfig.org;
+    description = "EditorConfig File Locator and Interpreter for Python";
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/elpy/default.nix b/pkgs/development/python-modules/elpy/default.nix
new file mode 100644
index 000000000000..79ec94a2c828
--- /dev/null
+++ b/pkgs/development/python-modules/elpy/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, rope
+, flake8
+, autopep8
+, jedi
+, importmagic
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "elpy";
+  version = "1.9.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "419f7b05b19182bc1aedde1ae80812c1534e59a0493476aa01ea819e76ba26f0";
+  };
+
+  propagatedBuildInputs = [ flake8 autopep8 jedi importmagic ]
+    ++ stdenv.lib.optionals isPy27 [ rope ];
+
+  doCheck = false; # there are no tests
+
+  meta = with stdenv.lib; {
+    description = "Backend for the elpy Emacs mode";
+    homepage = "https://github.com/jorgenschaefer/elpy";
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/emoji/default.nix b/pkgs/development/python-modules/emoji/default.nix
index 019c29d79cd4..082958fcce19 100644
--- a/pkgs/development/python-modules/emoji/default.nix
+++ b/pkgs/development/python-modules/emoji/default.nix
@@ -6,7 +6,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0gmdcdvh21v33ldg8kbxi7lph7znl2zdz1ic45100z4hx65w1sd9";
+    sha256 = "a9e9c08be9907c0042212c86dfbea0f61f78e9897d4df41a1d6307017763ad3e";
   };
 
   checkInputs = [ nose ];
diff --git a/pkgs/development/python-modules/enum/default.nix b/pkgs/development/python-modules/enum/default.nix
new file mode 100644
index 000000000000..70462e5f4033
--- /dev/null
+++ b/pkgs/development/python-modules/enum/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "enum";
+  version = "0.4.4";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "9bdfacf543baf2350df7613eb37f598a802f346985ca0dc1548be6494140fdff";
+  };
+
+  doCheck = !isPyPy;
+
+  meta = with stdenv.lib; {
+    homepage = https://pypi.python.org/pypi/enum/;
+    description = "Robust enumerated type support in Python";
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/enum34/default.nix b/pkgs/development/python-modules/enum34/default.nix
new file mode 100644
index 000000000000..a5175eba49d8
--- /dev/null
+++ b/pkgs/development/python-modules/enum34/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pythonAtLeast
+, python
+}:
+
+if pythonAtLeast "3.4" then null else buildPythonPackage rec {
+  pname = "enum34";
+  version = "1.1.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1";
+  };
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://pypi.python.org/pypi/enum34;
+    description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/epc/default.nix b/pkgs/development/python-modules/epc/default.nix
new file mode 100644
index 000000000000..621f450f2eb0
--- /dev/null
+++ b/pkgs/development/python-modules/epc/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, sexpdata
+}:
+
+buildPythonPackage rec {
+  pname = "epc";
+  version = "0.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "30b594bd4a4acbd5bda0d3fa3d25b4e8117f2ff8f24d2d1e3e36c90374f3c55e";
+  };
+
+  propagatedBuildInputs = [ sexpdata ];
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "EPC (RPC stack for Emacs Lisp) implementation in Python";
+    homepage = "https://github.com/tkf/python-epc";
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/et_xmlfile/default.nix b/pkgs/development/python-modules/et_xmlfile/default.nix
new file mode 100644
index 000000000000..619b0e0c77c8
--- /dev/null
+++ b/pkgs/development/python-modules/et_xmlfile/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, lxml
+, pytest
+}:
+
+buildPythonPackage rec {
+  version = "1.0.1";
+  pname = "et_xmlfile";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256="0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1";
+  };
+
+  buildInputs = [ lxml pytest ];
+  checkPhase = ''
+    py.test $out
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An implementation of lxml.xmlfile for the standard library";
+    longDescription = ''
+      et_xmlfile is a low memory library for creating large XML files.
+
+      It is based upon the xmlfile module from lxml with the aim of
+      allowing code to be developed that will work with both
+      libraries. It was developed initially for the openpyxl project
+      but is now a standalone module.
+
+      The code was written by Elias Rabel as part of the Python
+      Düsseldorf openpyxl sprint in September 2014.
+    '';
+    homepage = "https://pypi.python.org/pypi/et_xmlfile";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sjourdois ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/etcd/default.nix b/pkgs/development/python-modules/etcd/default.nix
new file mode 100644
index 000000000000..1e6e1e70944d
--- /dev/null
+++ b/pkgs/development/python-modules/etcd/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, simplejson
+, pytz
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "etcd";
+  version = "2.0.8";
+
+  # PyPI package is incomplete
+  src = fetchurl {
+    url = "https://github.com/dsoprea/PythonEtcdClient/archive/${version}.tar.gz";
+    sha256 = "0fi6rxa1yxvz7nwrc7dw6fax3041d6bj3iyhywjgbkg7nadi9i8v";
+  };
+
+  patchPhase = ''
+    sed -i -e '13,14d;37d' setup.py
+  '';
+
+  propagatedBuildInputs = [ simplejson pytz requests ];
+
+  # No proper tests are available
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A Python etcd client that just works";
+    homepage = https://github.com/dsoprea/PythonEtcdClient;
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/eve/default.nix b/pkgs/development/python-modules/eve/default.nix
index b145f1b2e2b8..4d85add4e3e5 100644
--- a/pkgs/development/python-modules/eve/default.nix
+++ b/pkgs/development/python-modules/eve/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "Eve";
-  version = "0.8";
+  version = "0.8.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "9f926c715f88c7a92dc2b950ccc09cccd91f72fe0e93cde806b85d25b947df2f";
+    sha256 = "88105080e8a2567a1a8d50a5cded0d7d95e95f704b310c8107ef2ff7696f5316";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/eventlet/default.nix b/pkgs/development/python-modules/eventlet/default.nix
new file mode 100644
index 000000000000..afc880b2ba28
--- /dev/null
+++ b/pkgs/development/python-modules/eventlet/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, httplib2
+, pyopenssl
+, greenlet
+, enum-compat
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "eventlet";
+  version = "0.20.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15bq5ybbigxnp5xwkps53zyhlg15lmcnq3ny2dppj0r0bylcs5rf";
+  };
+
+  buildInputs = [ nose httplib2 pyopenssl ];
+
+  doCheck = false;  # too much transient errors to bother
+
+  propagatedBuildInputs = [ enum-compat ]
+    ++ stdenv.lib.optionals (!isPyPy) [ greenlet ];
+
+  meta = with stdenv.lib; {
+    homepage = https://pypi.python.org/pypi/eventlet/;
+    description = "A concurrent networking library for Python";
+  };
+
+}
diff --git a/pkgs/development/python-modules/eventlib/default.nix b/pkgs/development/python-modules/eventlib/default.nix
new file mode 100644
index 000000000000..147e18d45f42
--- /dev/null
+++ b/pkgs/development/python-modules/eventlib/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, fetchdarcs
+, greenlet
+}:
+
+buildPythonPackage rec {
+  pname = "python-eventlib";
+  version = "0.2.2";
+  # Judging from SyntaxError
+  disabled = isPy3k;
+
+  src = fetchdarcs {
+    url = "http://devel.ag-projects.com/repositories/${pname}";
+    rev = "release-${version}";
+    sha256 = "1zxhpq8i4jwsk7wmfncqfm211hqikj3hp38cfv509924bi76wak8";
+  };
+
+  propagatedBuildInputs = [ greenlet ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Eventlib bindings for python";
+    homepage    = "http://ag-projects.com/";
+    license     = licenses.lgpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/execnet/default.nix b/pkgs/development/python-modules/execnet/default.nix
new file mode 100644
index 000000000000..8c2ff6d82f41
--- /dev/null
+++ b/pkgs/development/python-modules/execnet/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, setuptools_scm
+, apipkg
+}:
+
+buildPythonPackage rec {
+  pname = "execnet";
+  version = "1.4.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn";
+  };
+
+  buildInputs = [ pytest setuptools_scm ];
+  propagatedBuildInputs = [ apipkg ];
+
+  # remove vbox tests
+  postPatch = ''
+    rm -v testing/test_termination.py
+    rm -v testing/test_channel.py
+    rm -v testing/test_xspec.py
+    rm -v testing/test_gateway.py
+  '';
+
+  checkPhase = ''
+    py.test testing
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with stdenv.lib; {
+    description = "Rapid multi-Python deployment";
+    license = licenses.gpl2;
+    homepage = "http://codespeak.net/execnet";
+    maintainers = with maintainers; [ nand0p ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/exifread/default.nix b/pkgs/development/python-modules/exifread/default.nix
new file mode 100644
index 000000000000..61593b625f72
--- /dev/null
+++ b/pkgs/development/python-modules/exifread/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "ExifRead";
+  version = "2.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Easy to use Python module to extract Exif metadata from tiff and jpeg files";
+    homepage    = "https://github.com/ianare/exif-py";
+    license     = licenses.bsd0;
+    maintainers = with maintainers; [ vozz ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/eyed3/default.nix b/pkgs/development/python-modules/eyed3/default.nix
new file mode 100644
index 000000000000..e42d7956dd56
--- /dev/null
+++ b/pkgs/development/python-modules/eyed3/default.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, paver
+, python
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  version = "0.7.8";
+  pname    = "eyeD3";
+  disabled = isPyPy;
+
+  src = fetchurl {
+    url = "http://eyed3.nicfit.net/releases/${pname}-${version}.tar.gz";
+    sha256 = "1nv7nhfn1d0qm7rgkzksbccgqisng8klf97np0nwaqwd5dbmdf86";
+  };
+
+  buildInputs = [ paver ];
+
+  postInstall = ''
+    for prog in "$out/bin/"*; do
+      wrapProgram "$prog" --prefix PYTHONPATH : "$PYTHONPATH" \
+                          --prefix PATH : ${python}/bin
+    done
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python module and command line program for processing ID3 tags";
+    homepage    = http://eyed3.nicfit.net/;
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.unix;
+    longDescription = ''
+      eyeD3 is a Python module and command line program for processing ID3
+      tags. Information about mp3 files (i.e bit rate, sample frequency, play
+      time, etc.) is also provided. The formats supported are ID3 v1.0/v1.1
+      and v2.3/v2.4.
+    '';
+  };
+
+}
diff --git a/pkgs/development/python-modules/factory_boy/default.nix b/pkgs/development/python-modules/factory_boy/default.nix
new file mode 100644
index 000000000000..1e5da699894e
--- /dev/null
+++ b/pkgs/development/python-modules/factory_boy/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, fake_factory
+}:
+
+buildPythonPackage rec {
+  pname = "factory_boy";
+  version = "2.6.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0a21f8kq917fj8xgmyp6gy8vcrlzzgwn80qas0d76h3vjbdy0bdq";
+  };
+
+  propagatedBuildInputs = [ fake_factory ];
+
+  meta = with stdenv.lib; {
+    description = "A Python package to create factories for complex objects";
+    homepage    = https://github.com/rbarrois/factory_boy;
+    license     = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/fake_factory/default.nix b/pkgs/development/python-modules/fake_factory/default.nix
new file mode 100644
index 000000000000..26dd14b73adf
--- /dev/null
+++ b/pkgs/development/python-modules/fake_factory/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, python
+, six
+, dateutil
+, ipaddress
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "fake-factory";
+  version = "0.6.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "09sgk0kylsshs64a1xsz3qr187sbnqrbf4z8k3dgsy32lsgyffv2";
+  };
+
+  propagatedBuildInputs = [ six dateutil ipaddress mock ];
+  checkPhase = ''
+    ${python.interpreter} -m unittest faker.tests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python package that generates fake data for you";
+    homepage    = https://pypi.python.org/pypi/fake-factory;
+    license     = licenses.mit;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/falcon/default.nix b/pkgs/development/python-modules/falcon/default.nix
new file mode 100644
index 000000000000..1bca7eddde04
--- /dev/null
+++ b/pkgs/development/python-modules/falcon/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, coverage
+, ddt
+, nose
+, pyyaml
+, requests
+, testtools
+, six
+, python_mimeparse
+}:
+
+buildPythonPackage rec {
+  pname = "falcon";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "ddce23a2dd0abba6d19775e9bf7ba64e184b15a0e7163e65f62af63354193f63";
+  };
+
+  checkInputs = [coverage ddt nose pyyaml requests testtools];
+  propagatedBuildInputs = [ six python_mimeparse ];
+
+  # The travis build fails since the migration from multiprocessing to threading for hosting the API under test.
+  # OSError: [Errno 98] Address already in use
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "An unladen web framework for building APIs and app backends";
+    homepage = http://falconframework.org;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ desiderius ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/fdroidserver/default.nix b/pkgs/development/python-modules/fdroidserver/default.nix
new file mode 100644
index 000000000000..b9b936ae83e8
--- /dev/null
+++ b/pkgs/development/python-modules/fdroidserver/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitLab
+, libcloud
+, pyyaml
+, paramiko
+, pyasn1
+, pyasn1-modules
+, pillow
+, mwclient
+, GitPython
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "2016-05-31";
+  pname = "fdroidserver-git";
+  disabled = ! isPy3k;
+
+  src = fetchFromGitLab {
+    owner = "fdroid";
+    repo = "fdroidserver";
+    rev = "401649e0365e6e365fc48ae8a3af94768af865f3";
+    sha256 = "1mmi2ffpym1qw694yj938kc7b4xhq0blri7wkjaqddcyykjyr94d";
+  };
+
+  propagatedBuildInputs = [ libcloud pyyaml paramiko pyasn1 pyasn1-modules pillow mwclient GitPython ];
+
+  meta = with stdenv.lib; {
+    homepage = https://f-droid.org;
+    description = "Server and tools for F-Droid, the Free Software repository system for Android";
+    license = licenses.agpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/feedparser/default.nix b/pkgs/development/python-modules/feedparser/default.nix
new file mode 100644
index 000000000000..ac91fe51d899
--- /dev/null
+++ b/pkgs/development/python-modules/feedparser/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "feedparser";
+  version = "5.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ycva69bqssalhqg45rbrfipz3l6hmycszy26k0351fhq990c0xx";
+  };
+
+  # lots of networking failures
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://code.google.com/p/feedparser/;
+    description = "Universal feed parser";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/filebrowser_safe/default.nix b/pkgs/development/python-modules/filebrowser_safe/default.nix
new file mode 100644
index 000000000000..8e95d1e413e4
--- /dev/null
+++ b/pkgs/development/python-modules/filebrowser_safe/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+}:
+
+buildPythonPackage rec {
+  version = "0.5.0";
+  pname = "filebrowser_safe";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5dcd31dd79684025139b43841f6515af1da5a4bb0de15bc4d88003db1970648e";
+  };
+
+  buildInputs = [ django ];
+
+  # There is no test embedded
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A snapshot of django-filebrowser for the Mezzanine CMS";
+    longDescription = ''
+      filebrowser_safe was created to provide a snapshot of the
+      FileBrowser asset manager for Django, to be referenced as a
+      dependency for the Mezzanine CMS for Django.
+
+      At the time of filebrowser_safe's creation, FileBrowser was
+      incorrectly packaged on PyPI, and had also dropped compatibility
+      with Django 1.1 - filebrowser_safe was therefore created to
+      address these specific issues.
+    '';
+    homepage = https://github.com/stephenmcd/filebrowser-safe;
+    downloadPage = https://pypi.python.org/pypi/filebrowser_safe/;
+    license = licenses.free;
+    maintainers = with maintainers; [ prikhi ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/filebytes/default.nix b/pkgs/development/python-modules/filebytes/default.nix
new file mode 100644
index 000000000000..3dbcbe594425
--- /dev/null
+++ b/pkgs/development/python-modules/filebytes/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "filebytes";
+  version = "0.9.12";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "6cd1c4ca823f6541c963a317e55382609789802dedad08209f4d038369e3f0ac";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://scoding.de/filebytes-introduction";
+    license = licenses.gpl2;
+    description = "Scripts to parse ELF, PE, Mach-O and OAT (Android Runtime)";
+    maintainers = with maintainers; [ bennofs ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/filelock/default.nix b/pkgs/development/python-modules/filelock/default.nix
index cfa0e1be74f5..80e3429b644a 100644
--- a/pkgs/development/python-modules/filelock/default.nix
+++ b/pkgs/development/python-modules/filelock/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "filelock";
-  version = "3.0.6";
+  version = "3.0.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "59ccab92fe118da7e5ce5a9fcd95506ade58d9d5f606db4922192524edfac820";
+    sha256 = "97694f181bdf58f213cca0a7cb556dc7bf90e2f8eb9aa3151260adac56701afb";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/flaky/default.nix b/pkgs/development/python-modules/flaky/default.nix
new file mode 100644
index 000000000000..192b4829a41d
--- /dev/null
+++ b/pkgs/development/python-modules/flaky/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "flaky";
+  version = "3.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1x9ixika7wqjj52x8wnsh1vk7jadkdqpx01plj7mlh8slwyq4s41";
+  };
+
+  buildInputs = [ mock pytest ];
+
+  # waiting for feedback https://github.com/box/flaky/issues/97
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/box/flaky;
+    description = "Plugin for nose or py.test that automatically reruns flaky tests";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/flask-autoindex/default.nix b/pkgs/development/python-modules/flask-autoindex/default.nix
index 0c353a34c385..afd3db60ffcf 100644
--- a/pkgs/development/python-modules/flask-autoindex/default.nix
+++ b/pkgs/development/python-modules/flask-autoindex/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "Flask-AutoIndex";
-  version = "0.6.1";
+  version = "0.6.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0v87sa073hmj64f47sazbiw08kyxsxay100bd5084jwq7c1y92d7";
+    sha256 = "af2cdb34eefe6edbf43ce19200880829e8c2df3598000e75dc63c9b7e3478706";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/flowlogs_reader/default.nix b/pkgs/development/python-modules/flowlogs_reader/default.nix
new file mode 100644
index 000000000000..1f2984990bb9
--- /dev/null
+++ b/pkgs/development/python-modules/flowlogs_reader/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, botocore
+, boto3
+, docutils
+, unittest2
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "flowlogs_reader";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0158aki6m3pkf98hpd60088qyhrfxkmybdf8hv3qfl8nb61vaiwf";
+  };
+
+  propagatedBuildInputs = [ botocore boto3 docutils ];
+  buildInputs = [ unittest2 mock ];
+
+  meta = with stdenv.lib; {
+    description = "Python library to make retrieving Amazon VPC Flow Logs from CloudWatch Logs a bit easier";
+    homepage = "https://github.com/obsrvbl/flowlogs-reader";
+    maintainers = with maintainers; [ cransom ];
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/flup/default.nix b/pkgs/development/python-modules/flup/default.nix
new file mode 100644
index 000000000000..8256f5a1063d
--- /dev/null
+++ b/pkgs/development/python-modules/flup/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "flup";
+  version = "1.0.3";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5eb09f26eb0751f8380d8ac43d1dfb20e1d42eca0fa45ea9289fa532a79cd159";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "http://trac.saddi.com/flup";
+    description = "FastCGI Python module set";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/fonttools/default.nix b/pkgs/development/python-modules/fonttools/default.nix
index 4759e9d3c837..ed0b508a8acf 100644
--- a/pkgs/development/python-modules/fonttools/default.nix
+++ b/pkgs/development/python-modules/fonttools/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "fonttools";
-  version = "3.29.0";
+  version = "3.29.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "aab38c8c131670684321437d4857dcb4de1c775efd152a9ca9c4d81f1cb97fe7";
+    sha256 = "a687ca070daddb7ee25e3472b631acd0e53dbf11ecdf8e76248ee556472ede9d";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/foolscap/default.nix b/pkgs/development/python-modules/foolscap/default.nix
new file mode 100644
index 000000000000..94b90a25d137
--- /dev/null
+++ b/pkgs/development/python-modules/foolscap/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+, twisted
+, pyopenssl
+, service-identity
+}:
+
+buildPythonPackage rec {
+  pname = "foolscap";
+  version = "0.12.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1bpmqq6485mmr5jza9q2c55l9m1bfsvsbd9drsip7p5qcsi22jrz";
+  };
+
+  propagatedBuildInputs = [ mock twisted pyopenssl service-identity ];
+
+  checkPhase = ''
+    # Either uncomment this, or remove this custom check phase entirely, if
+    # you wish to do battle with the foolscap tests. ~ C.
+    # trial foolscap
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://foolscap.lothar.com/;
+    description = "Foolscap, an RPC protocol for Python that follows the distributed object-capability model";
+    longDescription = ''
+      "Foolscap" is the name for the next-generation RPC protocol,
+      intended to replace Perspective Broker (part of Twisted).
+      Foolscap is a protocol to implement a distributed
+      object-capabilities model in Python.
+    '';
+    # See http://foolscap.lothar.com/trac/browser/LICENSE.
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/forbiddenfruit/default.nix b/pkgs/development/python-modules/forbiddenfruit/default.nix
new file mode 100644
index 000000000000..4d2f656b36a3
--- /dev/null
+++ b/pkgs/development/python-modules/forbiddenfruit/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "forbiddenfruit";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0xra2kw6m8ag29ifwmhi5zqksh4cr0yy1waqd488rm59kcr3zl79";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Patch python built-in objects";
+    homepage = https://pypi.python.org/pypi/forbiddenfruit;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/fudge/default.nix b/pkgs/development/python-modules/fudge/default.nix
new file mode 100644
index 000000000000..0f6d10c3c523
--- /dev/null
+++ b/pkgs/development/python-modules/fudge/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, nosejs
+, sphinx
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "fudge";
+  version = "1.1.0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "eba59a926fa1df1ab6dddd69a7a8af21865b16cad800cb4d1af75070b0f52afb";
+  };
+
+  buildInputs = [ nose nosejs ];
+  propagatedBuildInputs = [ sphinx ];
+
+  checkPhase = ''
+    nosetests -v
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/fudge-py/fudge;
+    description = "Replace real objects with fakes (mocks, stubs, etc) while testing";
+    license = licenses.mit;
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/funcparserlib/default.nix b/pkgs/development/python-modules/funcparserlib/default.nix
new file mode 100644
index 000000000000..6c3f5f6d0186
--- /dev/null
+++ b/pkgs/development/python-modules/funcparserlib/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, python
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "funcparserlib";
+  version = "0.3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "b7992eac1a3eb97b3d91faa342bfda0729e990bd8a43774c1592c091e563c91d";
+  };
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
+  # Tests are Python 2.x only judging from SyntaxError
+  doCheck = !(isPy3k);
+
+  meta = with stdenv.lib; {
+    description = "Recursive descent parsing library based on functional combinators";
+    homepage = https://code.google.com/p/funcparserlib/;
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/functools32/default.nix b/pkgs/development/python-modules/functools32/default.nix
new file mode 100644
index 000000000000..fea79db3d05b
--- /dev/null
+++ b/pkgs/development/python-modules/functools32/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+if isPy3k then null else buildPythonPackage rec {
+  pname = "functools32";
+  version = "3.2.3-2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn";
+  };
+
+  meta = with stdenv.lib; {
+    description = "This is a backport of the functools standard library module from";
+    homepage = "https://github.com/MiCHiLU/python-functools32";
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/fusepy/default.nix b/pkgs/development/python-modules/fusepy/default.nix
new file mode 100644
index 000000000000..74ab0fc01a69
--- /dev/null
+++ b/pkgs/development/python-modules/fusepy/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "fusepy";
+  version = "2.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h";
+  };
+
+  propagatedBuildInputs = [ pkgs.fuse ];
+
+  # No tests included
+  doCheck = false;
+
+  patchPhase = ''
+    substituteInPlace fuse.py --replace \
+      "find_library('fuse')" "'${pkgs.fuse}/lib/libfuse.so'"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Simple ctypes bindings for FUSE";
+    longDescription = ''
+      Python module that provides a simple interface to FUSE and MacFUSE.
+      It's just one file and is implemented using ctypes.
+    '';
+    homepage = https://github.com/terencehonles/fusepy;
+    license = licenses.isc;
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gateone/default.nix b/pkgs/development/python-modules/gateone/default.nix
new file mode 100644
index 000000000000..136c089ee4b6
--- /dev/null
+++ b/pkgs/development/python-modules/gateone/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, tornado
+, futures
+, html5lib
+, pkgs
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  name = "gateone-1.2-0d57c3";
+  disabled = isPy3k;
+
+  src = pkgs.fetchFromGitHub {
+    rev = "1d0e8037fbfb7c270f3710ce24154e24b7031bea";
+    owner= "liftoff";
+    repo = "GateOne";
+    sha256 = "1ghrawlqwv7wnck6alqpbwy9mpv0y21cw2jirrvsxaracmvgk6vv";
+  };
+
+  propagatedBuildInputs = [tornado futures html5lib pkgs.openssl pkgs.cacert pkgs.openssh];
+
+  postInstall=''
+    cp -R "$out/gateone/"* $out/lib/python2.7/site-packages/gateone
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://liftoffsoftware.com/;
+    description = "GateOne is a web-based terminal emulator and SSH client";
+    maintainers = with maintainers; [ tomberek ];
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gcovr/default.nix b/pkgs/development/python-modules/gcovr/default.nix
new file mode 100644
index 000000000000..4812744bfa85
--- /dev/null
+++ b/pkgs/development/python-modules/gcovr/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "gcovr";
+  version = "2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "2c878e03c2eff2282e64035bec0a30532b2b1173aadf08486401883b79e4dab1";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A Python script for summarizing gcov data";
+    license = licenses.bsd0;
+    homepage = http://gcovr.com/;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gcutil/default.nix b/pkgs/development/python-modules/gcutil/default.nix
new file mode 100644
index 000000000000..85c0fbb4d609
--- /dev/null
+++ b/pkgs/development/python-modules/gcutil/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, gflags
+, iso8601
+, ipaddr
+, httplib2
+, google_apputils
+, google_api_python_client
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  name = "gcutil-1.16.1";
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = https://dl.google.com/dl/cloudsdk/release/artifacts/gcutil-1.16.1.tar.gz;
+    sha256 = "00jaf7x1ji9y46fbkww2sg6r6almrqfsprydz3q2swr4jrnrsx9x";
+  };
+
+  propagatedBuildInputs = [ gflags iso8601 ipaddr httplib2 google_apputils google_api_python_client ];
+
+  prePatch = ''
+    sed -i -e "s|google-apputils==0.4.0|google-apputils==0.4.1|g" setup.py
+    substituteInPlace setup.py \
+      --replace "httplib2==0.8" "httplib2" \
+      --replace "iso8601==0.1.4" "iso8601" \
+      --replace "ipaddr==2.1.10" "ipaddr" \
+      --replace "google-api-python-client==1.2" "google-api-python-client" \
+      --replace "python-gflags==2.0" "python-gflags"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Command-line tool for interacting with Google Compute Engine";
+    homepage = "https://cloud.google.com/compute/docs/gcutil/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ phreedom ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/gdrivefs/default.nix b/pkgs/development/python-modules/gdrivefs/default.nix
new file mode 100644
index 000000000000..7cbf09fa49fa
--- /dev/null
+++ b/pkgs/development/python-modules/gdrivefs/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, isPy3k
+, gipc
+, greenlet
+, httplib2
+, six
+, dateutil
+, fusepy
+, google_api_python_client
+}:
+
+buildPythonPackage rec {
+  version = "0.14.9";
+  pname = "gdrivefs";
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = "https://github.com/dsoprea/GDriveFS/archive/${version}.tar.gz";
+    sha256 = "1mc2r35nf5k8vzwdcdhi0l9rb97amqd5xb53lhydj8v8f4rndk7a";
+  };
+
+  buildInputs = [ gipc greenlet httplib2 six ];
+  propagatedBuildInputs = [ dateutil fusepy google_api_python_client ];
+
+  patchPhase = ''
+    substituteInPlace gdrivefs/resources/requirements.txt \
+      --replace "==" ">="
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Mount Google Drive as a local file system";
+    longDescription = ''
+      GDriveFS is a FUSE wrapper for Google Drive developed. Design goals:
+      - Thread for monitoring changes via "changes" functionality of API.
+      - Complete stat() implementation.
+      - Seamlessly work around duplicate-file allowances in Google Drive.
+      - Seamlessly manage file-type versatility in Google Drive
+        (Google Doc files do not have a particular format).
+      - Allow for the same file at multiple paths.
+    '';
+    homepage = https://github.com/dsoprea/GDriveFS;
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/genanki/default.nix b/pkgs/development/python-modules/genanki/default.nix
index bcc462e7237d..45906c3c434d 100644
--- a/pkgs/development/python-modules/genanki/default.nix
+++ b/pkgs/development/python-modules/genanki/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "genanki";
-  version = "0.6.0";
+  version = "0.6.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0xj8yd3acl8h457sh42balvcd0z4mg5idd4q63f7qlfzc5wgbb74";
+    sha256 = "2408f7d9955c8963fd9b1ecbb873f5d18dee786e060dcb083aef5dd86c736773";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/genshi/default.nix b/pkgs/development/python-modules/genshi/default.nix
new file mode 100644
index 000000000000..ad6f4ee1b21e
--- /dev/null
+++ b/pkgs/development/python-modules/genshi/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "Genshi";
+  version = "0.7.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0d87ae62cf2ed92133f35725da51e02d09f79bb4cb986f0d948408a0279dd3f8";
+  };
+
+  # FAIL: test_sanitize_remove_script_elem (genshi.filters.tests.html.HTMLSanitizerTestCase)
+  # FAIL: test_sanitize_remove_src_javascript (genshi.filters.tests.html.HTMLSanitizerTestCase)
+  doCheck = false;
+
+  buildInputs = [ setuptools ];
+
+  meta = with stdenv.lib; {
+    description = "Python components for parsing HTML, XML and other textual content";
+    longDescription = ''
+      Python library that provides an integrated set of components for
+      parsing, generating, and processing HTML, XML or other textual
+      content for output generation on the web.
+    '';
+    homepage = https://genshi.edgewall.org/;
+    license = licenses.bsd0;
+  };
+}
diff --git a/pkgs/development/python-modules/genzshcomp/default.nix b/pkgs/development/python-modules/genzshcomp/default.nix
new file mode 100644
index 000000000000..87ca3aaeff44
--- /dev/null
+++ b/pkgs/development/python-modules/genzshcomp/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "genzshcomp";
+  version = "0.5.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c77d007cc32cdff836ecf8df6192371767976c108a75b055e057bb6f4a09cd42";
+  };
+
+  buildInputs = [ setuptools ];
+
+  meta = with stdenv.lib; {
+    description = "Automatically generated zsh completion function for Python's option parser modules";
+    homepage = http://bitbucket.org/hhatto/genzshcomp/;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gevent-socketio/default.nix b/pkgs/development/python-modules/gevent-socketio/default.nix
new file mode 100644
index 000000000000..e95519a346c5
--- /dev/null
+++ b/pkgs/development/python-modules/gevent-socketio/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, versiontools
+, gevent-websocket
+, mock
+, pytest
+, gevent
+}:
+
+buildPythonPackage rec {
+  pname = "gevent-socketio";
+  version = "0.3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1zra86hg2l1jcpl9nsnqagy3nl3akws8bvrbpgdxk15x7ywllfak";
+  };
+
+  buildInputs = [ versiontools gevent-websocket mock pytest ];
+  propagatedBuildInputs = [ gevent ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/abourget/gevent-socketio;
+    description = "SocketIO server based on the Gevent pywsgi server, a Python network library";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gevent-websocket/default.nix b/pkgs/development/python-modules/gevent-websocket/default.nix
new file mode 100644
index 000000000000..28dab3a257f0
--- /dev/null
+++ b/pkgs/development/python-modules/gevent-websocket/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, gevent
+}:
+
+buildPythonPackage rec {
+  pname = "gevent-websocket";
+  version = "0.9.3";
+  # SyntaxError in tests.
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "07rqwfpbv13mk6gg8mf0bmvcf6siyffjpgai1xd8ky7r801j4xb4";
+  };
+
+  propagatedBuildInputs = [ gevent ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gitlab.com/noppo/gevent-websocket;
+    description = "Websocket handler for the gevent pywsgi server, a Python network library";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/geventhttpclient/default.nix b/pkgs/development/python-modules/geventhttpclient/default.nix
new file mode 100644
index 000000000000..6a78d60544db
--- /dev/null
+++ b/pkgs/development/python-modules/geventhttpclient/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, gevent
+, certifi
+, six
+, backports_ssl_match_hostname
+}:
+
+buildPythonPackage rec {
+  pname = "geventhttpclient";
+  version = "1.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "bd87af8854f5fb05738916c8973671f7035568aec69b7c842887d6faf9c0a01d";
+  };
+
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ gevent certifi six backports_ssl_match_hostname ];
+
+  # Several tests fail that require network
+  doCheck = false;
+  checkPhase = ''
+    py.test $out
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/gwik/geventhttpclient;
+    description = "HTTP client library for gevent";
+    license = licenses.mit;
+    maintainers = with maintainers; [ koral ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/gipc/default.nix b/pkgs/development/python-modules/gipc/default.nix
new file mode 100644
index 000000000000..9780b46fa5a0
--- /dev/null
+++ b/pkgs/development/python-modules/gipc/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, gevent
+}:
+
+buildPythonPackage rec {
+  pname = "gipc";
+  version = "0.5.0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "08c35xzv7nr12d9xwlywlbyzzz2igy0yy6y52q2nrkmh5d4slbpc";
+  };
+
+  propagatedBuildInputs = [ gevent ];
+
+  meta = with stdenv.lib; {
+    description = "gevent-cooperative child processes and IPC";
+    longDescription = ''
+      Usage of Python's multiprocessing package in a gevent-powered
+      application may raise problems and most likely breaks the application
+      in various subtle ways. gipc (pronunciation "gipsy") is developed with
+      the motivation to solve many of these issues transparently. With gipc,
+      multiprocessing. Process-based child processes can safely be created
+      anywhere within your gevent-powered application.
+    '';
+    homepage = http://gehrcke.de/gipc;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/git-sweep/default.nix b/pkgs/development/python-modules/git-sweep/default.nix
new file mode 100644
index 000000000000..e2182892e851
--- /dev/null
+++ b/pkgs/development/python-modules/git-sweep/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, GitPython
+}:
+
+buildPythonPackage rec {
+  pname = "git-sweep";
+  version = "0.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1csp0zd049d643d409rfivbswwzrayb4i6gkypp5mc27fb1z2afd";
+  };
+
+  propagatedBuildInputs = [ GitPython ];
+
+  meta = with stdenv.lib; {
+    description = "A command-line tool that helps you clean up Git branches";
+    homepage = https://github.com/arc90/git-sweep;
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/github-webhook/default.nix b/pkgs/development/python-modules/github-webhook/default.nix
new file mode 100644
index 000000000000..99af2830167f
--- /dev/null
+++ b/pkgs/development/python-modules/github-webhook/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, flask
+}:
+
+buildPythonPackage rec {
+  pname = "github-webhook";
+  version = "unstable-2016-03-11";
+
+  # There is a PyPI package but an older one.
+  src = fetchgit {
+    url = "https://github.com/bloomberg/python-github-webhook.git";
+    rev = "ca1855479ee59c4373da5425dbdce08567605d49";
+    sha256 = "0mqwig9281iyzbphp1d21a4pqdrf98vs9k8lqpqx6spzgqaczx5f";
+  };
+
+  propagatedBuildInputs = [ flask ];
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A framework for writing webhooks for GitHub";
+    license = licenses.mit;
+    homepage = https://github.com/bloomberg/python-github-webhook;
+  };
+
+}
diff --git a/pkgs/development/python-modules/github3_py/default.nix b/pkgs/development/python-modules/github3_py/default.nix
new file mode 100644
index 000000000000..8968585d9cdd
--- /dev/null
+++ b/pkgs/development/python-modules/github3_py/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, unittest2
+, pytest
+, mock
+, betamax
+, betamax-matchers
+, dateutil
+, requests
+, pyopenssl
+, uritemplate_py
+, ndg-httpsclient
+, requests_toolbelt
+, pyasn1
+}:
+
+buildPythonPackage rec {
+  pname = "github3.py";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1cxaqdqmz9w2afc0cw2jyv783fp0grydbik0frzj79azzkhyg4gf";
+  };
+
+  buildInputs = [ unittest2 pytest mock betamax betamax-matchers dateutil ];
+  propagatedBuildInputs = [ requests pyopenssl uritemplate_py ndg-httpsclient requests_toolbelt pyasn1 ];
+
+  postPatch = ''
+    sed -i -e 's/mock ==1.0.1/mock>=1.0.1/' setup.py
+    sed -i -e 's/unittest2 ==0.5.1/unittest2>=0.5.1/' setup.py
+  '';
+
+  # TODO: only disable the tests that require network
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://github3py.readthedocs.org/en/master/;
+    description = "A wrapper for the GitHub API written in python";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/gmusicapi/default.nix b/pkgs/development/python-modules/gmusicapi/default.nix
new file mode 100644
index 000000000000..f96e94a34a04
--- /dev/null
+++ b/pkgs/development/python-modules/gmusicapi/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, validictory
+, decorator
+, mutagen
+, protobuf
+, setuptools
+, requests
+, dateutil
+, proboscis
+, mock
+, appdirs
+, oauth2client
+, pyopenssl
+, gpsoauth
+, MechanicalSoup
+, future
+}:
+
+buildPythonPackage rec {
+  pname = "gmusicapi";
+  version = "10.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0smlrafh1bjzrcjzl7im8pf8f04gcnx92lf3g5qr7yzgq8k20xa2";
+  };
+
+  propagatedBuildInputs = [ validictory decorator mutagen protobuf setuptools requests dateutil proboscis mock appdirs oauth2client pyopenssl gpsoauth MechanicalSoup future ];
+
+  meta = with stdenv.lib; {
+    description = "An unofficial API for Google Play Music";
+    homepage = https://pypi.python.org/pypi/gmusicapi/;
+    license = licenses.bsd3;
+  };
+}
diff --git a/pkgs/development/python-modules/gnureadline/default.nix b/pkgs/development/python-modules/gnureadline/default.nix
new file mode 100644
index 000000000000..2feab78f6a83
--- /dev/null
+++ b/pkgs/development/python-modules/gnureadline/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+, pkgs
+}:
+
+buildPythonPackage rec {
+  version = "6.3.3";
+  pname = "gnureadline";
+  disabled = isPyPy;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ghck2zz4xbqa3wz73brgjhrqj55p9hc1fq6c9zb09dnyhwb0nd2";
+  };
+
+  buildInputs = [ pkgs.ncurses ];
+  patchPhase = ''
+    substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "The standard Python readline extension statically linked against the GNU readline library";
+    homepage = http://github.com/ludwigschwardt/python-gnureadline;
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gnutls/default.nix b/pkgs/development/python-modules/gnutls/default.nix
new file mode 100644
index 000000000000..a58177e7544c
--- /dev/null
+++ b/pkgs/development/python-modules/gnutls/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "python-gnutls";
+  version = "3.0.0";
+
+  # https://github.com/AGProjects/python-gnutls/issues/2
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1yrdxcj5rzvz8iglircz6icvyggz5fmdcd010n6w3j60yp4p84kc";
+  };
+
+  propagatedBuildInputs = [ pkgs.gnutls ];
+  patchPhase = ''
+    substituteInPlace gnutls/library/__init__.py --replace "/usr/local/lib" "${pkgs.gnutls.out}/lib"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Python wrapper for the GnuTLS library";
+    homepage = https://github.com/AGProjects/python-gnutls;
+    license = licenses.lgpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/goobook/default.nix b/pkgs/development/python-modules/goobook/default.nix
new file mode 100644
index 000000000000..91a99103af57
--- /dev/null
+++ b/pkgs/development/python-modules/goobook/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, oauth2client
+, gdata
+, simplejson
+, httplib2
+, keyring
+, six
+, rsa
+}:
+
+buildPythonPackage rec {
+  pname = "goobook";
+  version = "1.9";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02xmq8sjavza17av44ks510934wrshxnsm6lvhvazs45s92b671i";
+  };
+
+  propagatedBuildInputs = [ oauth2client gdata simplejson httplib2 keyring six rsa ];
+
+  preConfigure = ''
+    sed -i '/distribute/d' setup.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Search your google contacts from the command-line or mutt";
+    homepage    = https://pypi.python.org/pypi/goobook;
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ lovek323 hbunke ];
+    platforms   = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/google_apputils/default.nix b/pkgs/development/python-modules/google_apputils/default.nix
new file mode 100644
index 000000000000..66bad999dfb0
--- /dev/null
+++ b/pkgs/development/python-modules/google_apputils/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytz
+, gflags
+, dateutil
+, mox
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "google-apputils";
+  version = "0.4.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1sxsm5q9vr44qzynj8l7p3l7ffb0zl1jdqhmmzmalkx941nbnj1b";
+  };
+
+  preConfigure = ''
+    sed -i '/ez_setup/d' setup.py
+  '';
+
+  propagatedBuildInputs = [ pytz gflags dateutil mox ];
+
+  checkPhase = ''
+    ${python.executable} setup.py google_test
+  '';
+
+  doCheck = true;
+
+  meta = with stdenv.lib; {
+    description = "Google Application Utilities for Python";
+    homepage = http://code.google.com/p/google-apputils-python;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gpapi/default.nix b/pkgs/development/python-modules/gpapi/default.nix
index da3bbcf28db3..13ba4f934e89 100644
--- a/pkgs/development/python-modules/gpapi/default.nix
+++ b/pkgs/development/python-modules/gpapi/default.nix
@@ -1,12 +1,12 @@
 { stdenv, buildPythonPackage, fetchPypi, requests, protobuf, pycryptodome }:
 
 buildPythonPackage rec {
-  version = "0.4.2";
+  version = "0.4.3";
   pname = "gpapi";
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "1fv2y3xbwn512fjxrdwgq6cz0xjd7mh54nq1f18wyz8w40vcznns";
+    sha256 = "9fd1351eb29c4da92d3a0ed2cd4e3c1634ea16afddbca133f6acc54766d61b02";
   };
 
   propagatedBuildInputs = [ requests protobuf pycryptodome ];
diff --git a/pkgs/development/python-modules/gpsoauth/default.nix b/pkgs/development/python-modules/gpsoauth/default.nix
new file mode 100644
index 000000000000..68dce423390a
--- /dev/null
+++ b/pkgs/development/python-modules/gpsoauth/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, cffi
+, cryptography
+, enum34
+, idna
+, ipaddress
+, ndg-httpsclient
+, pyopenssl
+, pyasn1
+, pycparser
+, pycryptodome
+, requests
+, six
+}:
+
+buildPythonPackage rec {
+  version = "0.2.0";
+  pname = "gpsoauth";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01zxw8rhml8xfwda7ba8983890bzwkfa55ijd6qf8qrdy6ja1ncn";
+  };
+
+  propagatedBuildInputs = [ cffi cryptography enum34 idna ipaddress ndg-httpsclient pyopenssl pyasn1 pycparser pycryptodome requests six ];
+
+  meta = with stdenv.lib; {
+    description = "A python client library for Google Play Services OAuth";
+    homepage = "https://github.com/simon-weber/gpsoauth";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jgillich ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/gpy/default.nix b/pkgs/development/python-modules/gpy/default.nix
index 72415879b412..0b9717b3feed 100644
--- a/pkgs/development/python-modules/gpy/default.nix
+++ b/pkgs/development/python-modules/gpy/default.nix
@@ -3,12 +3,12 @@
 
 buildPythonPackage rec {
   pname = "GPy";
-  version = "1.9.2";
+  version = "1.9.5";
   name  = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "372e43d41df5c90e0958d3073070994b351a7409c2e5fbd349cffe13bc24c10a";
+    sha256 = "97519bea69e7d7a703d9575c31d68a7c6f974ae125ee9d4a3e1fb510eadfb97e";
   };
 
   # running tests produces "ImportError: cannot import name 'linalg_cython'"
diff --git a/pkgs/development/python-modules/graphite-web/default.nix b/pkgs/development/python-modules/graphite-web/default.nix
index 791eb1b8cf0f..51a7fd9b5d26 100644
--- a/pkgs/development/python-modules/graphite-web/default.nix
+++ b/pkgs/development/python-modules/graphite-web/default.nix
@@ -6,13 +6,13 @@ if django.version != "1.8.18"
 then throw "graphite-web should be build with django_1_8 and django_tagging_0_4_3"
 else buildPythonPackage rec {
   pname = "graphite-web";
-  version = "1.1.3";
+  version = "1.1.4";
 
   disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0nvyq1859abdch2l90avsjk9vb03s7wgxgrjsqvjhf2b9c1ncsfh";
+    sha256 = "4430929f954998d77aa0a61246c62d64a00a2f9464320f9a462294dd3448e522";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/graphviz/default.nix b/pkgs/development/python-modules/graphviz/default.nix
new file mode 100644
index 000000000000..42a698906814
--- /dev/null
+++ b/pkgs/development/python-modules/graphviz/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "graphviz";
+  version = "0.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "14r9brj4r31b3qy1nnn34v3l4h0n39bqxg9sn2fz4p3pp5mglnl6";
+  };
+
+  propagatedBuildInputs = [ pkgs.graphviz ];
+
+  meta = with stdenv.lib; {
+    description = "Simple Python interface for Graphviz";
+    homepage = https://github.com/xflr6/graphviz;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/grappelli_safe/default.nix b/pkgs/development/python-modules/grappelli_safe/default.nix
new file mode 100644
index 000000000000..bbba074b3f52
--- /dev/null
+++ b/pkgs/development/python-modules/grappelli_safe/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.5.1";
+  pname = "grappelli_safe";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "27660faa628186d74258781edfa03ef812555d49b4925cfe19c05bcd3da85e40";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A snapshot of django-grappelli for the Mezzanine CMS";
+    longDescription = ''
+      grappelli_safe was created to provide a snapshot of the
+      Grappelli admin skin for Django, to be referenced as a
+      dependency for the Mezzanine CMS for Django.
+
+      At the time of grappelli_safe's creation, Grappelli was
+      incorrectly packaged on PyPI, and had also dropped compatibility
+      with Django 1.1 - grappelli_safe was therefore created to
+      address these specific issues.
+    '';
+    homepage = https://github.com/stephenmcd/grappelli-safe;
+    downloadPage = http://pypi.python.org/pypi/grappelli_safe/;
+    license = licenses.free;
+    maintainers = with maintainers; [ prikhi ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/greenlet/default.nix b/pkgs/development/python-modules/greenlet/default.nix
index 58b240297cfd..3754f08c28be 100644
--- a/pkgs/development/python-modules/greenlet/default.nix
+++ b/pkgs/development/python-modules/greenlet/default.nix
@@ -8,12 +8,12 @@
 
 buildPythonPackage rec {
   pname = "greenlet";
-  version = "0.4.14";
+  version = "0.4.15";
   disabled = isPyPy;  # builtin for pypy
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f1cc268a15ade58d9a0c04569fe6613e19b8b0345b64453064e2c3c6d79051af";
+    sha256 = "9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc";
   };
 
   propagatedBuildInputs = [ six ];
diff --git a/pkgs/development/python-modules/grpcio-tools/default.nix b/pkgs/development/python-modules/grpcio-tools/default.nix
index c111e5f75a73..7c58c866f52e 100644
--- a/pkgs/development/python-modules/grpcio-tools/default.nix
+++ b/pkgs/development/python-modules/grpcio-tools/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "grpcio-tools";
-  version = "1.14.1";
+  version = "1.14.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "4ce5aa660d7884f23aac1eafa93b97a4c3e2b512edff871e91fdb6ee86ebd5ea";
+    sha256 = "b3fd64a5b8c1d981f6d68a331449109633710a346051c44e0f0cca1812e2b4b0";
   };
 
   enableParallelBuilding = true;
diff --git a/pkgs/development/python-modules/gspread/default.nix b/pkgs/development/python-modules/gspread/default.nix
new file mode 100644
index 000000000000..1a07e7ecfc06
--- /dev/null
+++ b/pkgs/development/python-modules/gspread/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.2.3";
+  pname = "gspread";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "dba45ef9e652dcd8cf561ae65569bd6ecd18fcc77b991521490698fb2d847106";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Google Spreadsheets client library";
+    homepage = "https://github.com/burnash/gspread";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gtimelog/default.nix b/pkgs/development/python-modules/gtimelog/default.nix
new file mode 100644
index 000000000000..40115f398c62
--- /dev/null
+++ b/pkgs/development/python-modules/gtimelog/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, pkgs
+, python
+, pygobject3
+}:
+
+buildPythonPackage rec {
+  pname = "gtimelog";
+  version = "0.9.1";
+
+  src = pkgs.fetchurl {
+    url = "https://github.com/gtimelog/gtimelog/archive/${version}.tar.gz";
+    sha256 = "0qk8fv8cszzqpdi3wl9vvkym1jil502ycn6sic4jrxckw5s9jsfj";
+  };
+
+  buildInputs = [ pkgs.glibcLocales ];
+
+  LC_ALL="en_US.UTF-8";
+
+  # TODO: AppIndicator
+  propagatedBuildInputs = [ pkgs.gobjectIntrospection pygobject3 pkgs.makeWrapper pkgs.gtk3 ];
+
+  checkPhase = ''
+    substituteInPlace runtests --replace "/usr/bin/env python" "${python}/bin/${python.executable}"
+    ./runtests
+  '';
+
+  preFixup = ''
+      wrapProgram $out/bin/gtimelog \
+        --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
+        --prefix LD_LIBRARY_PATH ":" "${pkgs.gtk3.out}/lib" \
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A small Gtk+ app for keeping track of your time. It's main goal is to be as unintrusive as possible";
+    homepage = https://mg.pov.lt/gtimelog/;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ocharles ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/gyp/default.nix b/pkgs/development/python-modules/gyp/default.nix
new file mode 100644
index 000000000000..46b0dde636af
--- /dev/null
+++ b/pkgs/development/python-modules/gyp/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "gyp";
+  version = "2015-06-11";
+  disabled = isPy3k;
+
+  src = fetchgit {
+    url = "https://chromium.googlesource.com/external/gyp.git";
+    rev = "fdc7b812f99e48c00e9a487bd56751bbeae07043";
+    sha256 = "1imgxsl4mr1662vsj2mlnpvvrbz71yk00w8p85vi5bkgmc6awgiz";
+  };
+
+  prePatch = stdenv.lib.optionals stdenv.isDarwin ''
+    sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' pylib/gyp/xcode_emulation.py
+  '';
+
+  patches = stdenv.lib.optionals stdenv.isDarwin [
+    ./no-darwin-cflags.patch
+    ./no-xcode.patch
+  ];
+
+  meta = with stdenv.lib; {
+    description = "A tool to generate native build files";
+    homepage = https://chromium.googlesource.com/external/gyp/+/master/README.md;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ codyopel ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/hawkauthlib/default.nix b/pkgs/development/python-modules/hawkauthlib/default.nix
new file mode 100644
index 000000000000..46e49ba6b88b
--- /dev/null
+++ b/pkgs/development/python-modules/hawkauthlib/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, requests
+, webob
+}:
+
+buildPythonPackage rec {
+  pname = "hawkauthlib";
+  version = "0.1.1";
+
+  src = fetchgit {
+    url = https://github.com/mozilla-services/hawkauthlib.git;
+    rev = "refs/tags/v${version}";
+    sha256 = "0mr1mpx4j9q7sch9arwfvpysnpf2p7ijy7072wilxm8pnj0bwvsi";
+  };
+
+  propagatedBuildInputs = [ requests webob ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mozilla-services/hawkauthlib;
+    description = "Hawk Access Authentication protocol";
+    license = licenses.mpl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hdbscan/default.nix b/pkgs/development/python-modules/hdbscan/default.nix
index 3c86563adac2..27d83d9c6c23 100644
--- a/pkgs/development/python-modules/hdbscan/default.nix
+++ b/pkgs/development/python-modules/hdbscan/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "hdbscan";
-  version = "0.8.15";
+  version = "0.8.18";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "446f98e1ea622a39c1f396d839fa2b1c35db98234e373336de61c3bd6ffaec78";
+    sha256 = "4d6782f08872f4c54983873a41759daae680d6247b0db363f3510cb001108f02";
   };
 
   checkInputs = [ nose ];
diff --git a/pkgs/development/python-modules/helper/default.nix b/pkgs/development/python-modules/helper/default.nix
index 15dadd0bf114..8aa6e1e921fb 100644
--- a/pkgs/development/python-modules/helper/default.nix
+++ b/pkgs/development/python-modules/helper/default.nix
@@ -1,21 +1,20 @@
 { stdenv, buildPythonPackage, fetchPypi, pyyaml, mock }:
- 
+
 buildPythonPackage rec {
   pname = "helper";
   version = "2.4.2";
-  name = "${pname}-${version}";
-  
+
   src = fetchPypi {
     inherit pname version;
     sha256 = "0p56dvjpaz9wnr0ik2wmvgqjf9ji180bhjky7q272l5dan94lgd6";
   };
-  
-  buildInputs = [ mock ];
+
+  checkInputs = [ mock ];
   propagatedBuildInputs = [ pyyaml ];
-  
+
   # No tests in the pypi tarball
   doCheck = false;
-  
+
   meta = with stdenv.lib; {
     description = "Development library for quickly writing configurable applications and daemons";
     homepage = https://helper.readthedocs.org/;
diff --git a/pkgs/development/python-modules/hetzner/default.nix b/pkgs/development/python-modules/hetzner/default.nix
new file mode 100644
index 000000000000..ccf4e1a5ba7f
--- /dev/null
+++ b/pkgs/development/python-modules/hetzner/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+}:
+
+buildPythonPackage rec {
+  pname = "hetzner";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    repo = "hetzner";
+    owner = "aszlig";
+    rev = "v${version}";
+    sha256 = "1xd1klvjskv0pg8ginih597jkk491a55b8dq80dsm61m5sbsx3vq";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/RedMoonStudios/hetzner";
+    description = "High-level Python API for accessing the Hetzner robot";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ aszlig ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/hg-git/default.nix b/pkgs/development/python-modules/hg-git/default.nix
new file mode 100644
index 000000000000..2b32afc2f824
--- /dev/null
+++ b/pkgs/development/python-modules/hg-git/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, dulwich
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "hg-git";
+  version = "0.8.11";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08kw1sj3sq1q1571hwkc51w20ks9ysmlg93pcnmd6gr66bz02dyn";
+  };
+
+  propagatedBuildInputs = [ dulwich ];
+
+  meta = with stdenv.lib; {
+    description = "Push and pull from a Git server using Mercurial";
+    homepage = http://hg-git.github.com/;
+    maintainers = with maintainers; [ koral ];
+    license = stdenv.lib.licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hkdf/default.nix b/pkgs/development/python-modules/hkdf/default.nix
new file mode 100644
index 000000000000..3a159e6d3493
--- /dev/null
+++ b/pkgs/development/python-modules/hkdf/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "hkdf";
+  version = "0.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2";
+  };
+
+  buildInputs = [ nose ];
+
+  checkPhase = ''
+    nosetests
+  '';
+
+  meta = with stdenv.lib; {
+    description = "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)";
+    homepage = "https://github.com/casebeer/python-hkdf";
+    license = licenses.bsd2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hovercraft/default.nix b/pkgs/development/python-modules/hovercraft/default.nix
new file mode 100644
index 000000000000..e598fd41bab1
--- /dev/null
+++ b/pkgs/development/python-modules/hovercraft/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, docutils
+, lxml
+, manuel
+, pygments
+, svg-path
+, watchdog
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "hovercraft";
+  version = "2.0";
+  disabled = ! isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0lqxr816lymgnywln8bbv9nrmkyahjjcjkm9kjyny9bflayz4f1g";
+  };
+
+  propagatedBuildInputs = [ docutils lxml manuel pygments svg-path watchdog ];
+
+  # one test assumes we have docutils 0.12
+  # TODO: enable tests after upgrading docutils to 0.12
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A tool to make impress.js presentations from reStructuredText";
+    homepage = https://github.com/regebro/hovercraft;
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/hpack/default.nix b/pkgs/development/python-modules/hpack/default.nix
new file mode 100644
index 000000000000..5e85dd51e768
--- /dev/null
+++ b/pkgs/development/python-modules/hpack/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "hpack";
+  version = "2.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1ad0fx4d7a52zf441qzhjc7vwy9v3qdrk1zyf06ikz8y2nl9mgai";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Pure-Python HPACK header compression";
+    homepage = "http://hyper.rtfd.org";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hsaudiotag/default.nix b/pkgs/development/python-modules/hsaudiotag/default.nix
new file mode 100644
index 000000000000..d08d9e06b719
--- /dev/null
+++ b/pkgs/development/python-modules/hsaudiotag/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "hsaudiotag";
+  version = "1.1.1";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15hgm128p8nysfi0jb127awga3vlj0iw82l50swjpvdh01m7rda8";
+  };
+
+  # no tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A pure Python library that lets one to read metadata from media files";
+    homepage = http://hg.hardcoded.net/hsaudiotag/;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hsaudiotag3k/default.nix b/pkgs/development/python-modules/hsaudiotag3k/default.nix
new file mode 100644
index 000000000000..06f89f733331
--- /dev/null
+++ b/pkgs/development/python-modules/hsaudiotag3k/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "hsaudiotag3k";
+  version = "1.1.3";
+  disabled = !isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0bv5k5594byr2bmhh77xv10fkdpckcmxg3w380yp30aqf83rcsx3";
+  };
+
+  # no tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A pure Python library that lets one to read metadata from media files";
+    homepage = http://hg.hardcoded.net/hsaudiotag/;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/htmllaundry/default.nix b/pkgs/development/python-modules/htmllaundry/default.nix
new file mode 100644
index 000000000000..787163d477e3
--- /dev/null
+++ b/pkgs/development/python-modules/htmllaundry/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi, nose
+, six
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "htmllaundry";
+  version = "2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "e428cba78d5a965e959f5dac2eb7d5f7d627dd889990d5efa8d4e03f3dd768d9";
+  };
+
+  buildInputs = [ nose ];
+  propagatedBuildInputs = [ six lxml ];
+
+  # some tests fail, probably because of changes in lxml
+  # not relevant for me, if releavnt for you, fix it...
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Simple HTML cleanup utilities";
+    license = licenses.bsd3;
+    homepage = https://pypi.org/project/htmllaundry/;
+  };
+
+}
diff --git a/pkgs/development/python-modules/http_signature/default.nix b/pkgs/development/python-modules/http_signature/default.nix
new file mode 100644
index 000000000000..48f06db1ba5d
--- /dev/null
+++ b/pkgs/development/python-modules/http_signature/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, pycrypto
+}:
+
+buildPythonPackage rec {
+  pname = "http_signature";
+  version = "0.1.4";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "14acc192ef20459d5e11b4e800dd3a4542f6bd2ab191bf5717c696bf30936c62";
+  };
+
+  propagatedBuildInputs = [ pycrypto ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/atl/py-http-signature;
+    description = "Simple secure signing for HTTP requests using http-signature";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/httpauth/default.nix b/pkgs/development/python-modules/httpauth/default.nix
new file mode 100644
index 000000000000..f1afd41ebed5
--- /dev/null
+++ b/pkgs/development/python-modules/httpauth/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.3";
+  pname = "httpauth";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0qas7876igyz978pgldp5r7n7pis8n4vf0v87gxr9l7p7if5lr3l";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "WSGI HTTP Digest Authentication middleware";
+    homepage = https://github.com/jonashaag/httpauth;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/httpretty/default.nix b/pkgs/development/python-modules/httpretty/default.nix
new file mode 100644
index 000000000000..1f135255bc04
--- /dev/null
+++ b/pkgs/development/python-modules/httpretty/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, tornado
+, requests
+, httplib2
+, sure
+, nose
+, coverage
+, certifi
+, urllib3
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "httpretty";
+  version = "0.8.10";
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1nmdk6d89z14x3wg4yxywlxjdip16zc8bqnfb471z1365mr74jj7";
+  };
+
+  buildInputs = [ tornado requests httplib2 sure nose coverage certifi ];
+  propagatedBuildInputs = [ urllib3 ];
+
+  postPatch = ''
+    sed -i -e 's/==.*$//' *requirements.txt
+    # XXX: Drop this after version 0.8.4 is released.
+    patch httpretty/core.py <<DIFF
+    ***************
+    *** 566 ****
+    !                 'content-length': len(self.body)
+    --- 566 ----
+    !                 'content-length': str(len(self.body))
+    DIFF
+
+    # Explicit encoding flag is required with python3, unless locale is set.
+    ${if !isPy3k then "" else
+      "patch -p0 -i ${./setup.py.patch}"}
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://falcao.it/HTTPretty/";
+    description = "HTTP client request mocking tool";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/hug/default.nix b/pkgs/development/python-modules/hug/default.nix
new file mode 100644
index 000000000000..4aeffc75823b
--- /dev/null
+++ b/pkgs/development/python-modules/hug/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy27
+, falcon
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "hug";
+  version = "2.1.2";
+  disabled = isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "93325e13706594933a9afb0d4f0b0748134494299038f07df41152baf6f89f4c";
+  };
+
+  propagatedBuildInputs = [ falcon requests ];
+
+  # tests are not shipped in the tarball
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A Python framework that makes developing APIs as simple as possible, but no simpler";
+    homepage = https://github.com/timothycrosley/hug;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/humanize/default.nix b/pkgs/development/python-modules/humanize/default.nix
new file mode 100644
index 000000000000..25c335c0016f
--- /dev/null
+++ b/pkgs/development/python-modules/humanize/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+}:
+
+buildPythonPackage rec {
+  version = "0.5.1";
+  pname = "humanize";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19";
+  };
+
+  buildInputs = [ mock ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python humanize utilities";
+    homepage = https://github.com/jmoiron/humanize;
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux; # can only test on linux
+  };
+
+}
diff --git a/pkgs/development/python-modules/hupper/default.nix b/pkgs/development/python-modules/hupper/default.nix
index 5131e64a3c2b..5f6a4a35ce11 100644
--- a/pkgs/development/python-modules/hupper/default.nix
+++ b/pkgs/development/python-modules/hupper/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "hupper";
-  version = "1.3";
+  version = "1.3.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "20387760e4d32bd4813c2cabc8e51d92b2c22c546102a0af182c33c152cd7ede";
+    sha256 = "899a1da85b71b62d903b5732703cad7454425b4ba9a6453930ad9168ec08ae0e";
   };
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/hvac/default.nix b/pkgs/development/python-modules/hvac/default.nix
index 310bd91b22bf..7bc0d9d21074 100644
--- a/pkgs/development/python-modules/hvac/default.nix
+++ b/pkgs/development/python-modules/hvac/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "hvac";
-  version = "0.6.3";
+  version = "0.6.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "54672a93f75453a7de13c7c10c6d8a51630e2559a8e2a563d8e272e9e188443f";
+    sha256 = "d7f23883c44458078359142608d0bc6373c4bcec107bdb609c827ee1dda61431";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/pkgs/development/python-modules/i3-py/default.nix b/pkgs/development/python-modules/i3-py/default.nix
new file mode 100644
index 000000000000..e433cd51c20c
--- /dev/null
+++ b/pkgs/development/python-modules/i3-py/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.6.4";
+  pname = "i3-py";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1sgl438jrb4cdyl7hbc3ymwsf7y3zy09g1gh7ynilxpllp37jc8y";
+  };
+
+  # no tests in tarball
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Tools for i3 users and developers";
+    homepage =  "https://github.com/ziberna/i3-py";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/icalendar/default.nix b/pkgs/development/python-modules/icalendar/default.nix
new file mode 100644
index 000000000000..b83785211f88
--- /dev/null
+++ b/pkgs/development/python-modules/icalendar/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, setuptools
+, dateutil
+, pytz
+}:
+
+buildPythonPackage rec {
+  version = "3.9.0";
+  pname = "icalendar";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "93d0b94eab23d08f62962542309916a9681f16de3d5eca1c75497f30f1b07792";
+  };
+
+  buildInputs = [ setuptools ];
+  propagatedBuildInputs = [ dateutil pytz ];
+
+  meta = with stdenv.lib; {
+    description = "A parser/generator of iCalendar files";
+    homepage = "http://icalendar.readthedocs.org/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ olcai ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/identify/default.nix b/pkgs/development/python-modules/identify/default.nix
index b4b5d9c87275..1d6b1ed0b193 100644
--- a/pkgs/development/python-modules/identify/default.nix
+++ b/pkgs/development/python-modules/identify/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "identify";
-  version = "1.1.4";
+  version = "1.1.7";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0hvwfpf6fmgn93abrvj88pi7sbcib32s4c5r99lw67kbziq5x129";
+    sha256 = "5e956558a9a1e3b3891d7c6609fc9709657a11878af288ace484d1a46a93922b";
   };
 
   # Tests not included in PyPI tarball
diff --git a/pkgs/development/python-modules/imageio/default.nix b/pkgs/development/python-modules/imageio/default.nix
new file mode 100644
index 000000000000..cdbcfee7180f
--- /dev/null
+++ b/pkgs/development/python-modules/imageio/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, pytest
+, numpy
+}:
+
+buildPythonPackage rec {
+  pname = "imageio";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "https://github.com/imageio/imageio/archive/v${version}.tar.gz";
+    sha256 = "195snkk3fsbjqd5g1cfsd9alzs5q45gdbi2ka9ph4yxqb31ijrbv";
+  };
+
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ numpy ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  # Tries to write in /var/tmp/.imageio
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats";
+    homepage = http://imageio.github.io/;
+    license = licenses.bsd2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/imagesize/default.nix b/pkgs/development/python-modules/imagesize/default.nix
new file mode 100644
index 000000000000..32a8310334ae
--- /dev/null
+++ b/pkgs/development/python-modules/imagesize/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "imagesize";
+  version = "0.7.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0msgz4ncp2nb5nbsxnf8kvxsl6nhwvc3b46ik097fvznl3y10gdv";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Getting image size from png/jpeg/jpeg2000/gif file";
+    homepage = https://github.com/shibukawa/imagesize_py;
+    license = with licenses; [ mit ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/imread/default.nix b/pkgs/development/python-modules/imread/default.nix
new file mode 100644
index 000000000000..9a67568d9e52
--- /dev/null
+++ b/pkgs/development/python-modules/imread/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, nose
+, pkgs
+, numpy
+}:
+
+buildPythonPackage rec {
+  pname = "python-imread";
+  version = "0.6";
+
+  src = pkgs.fetchurl {
+    url = "https://github.com/luispedro/imread/archive/release-${version}.tar.gz";
+    sha256 = "0i14bc67200zhzxc41g5dfp2m0pr1zaa2gv59p2va1xw0ji2dc0f";
+  };
+
+  nativeBuildInputs = [ pkgs.pkgconfig ];
+  buildInputs = [ nose pkgs.libjpeg pkgs.libpng pkgs.libtiff pkgs.libwebp ];
+  propagatedBuildInputs = [ numpy ];
+
+  meta = with stdenv.lib; {
+    description = "Python package to load images as numpy arrays";
+    homepage = https://imread.readthedocs.io/en/latest/;
+    maintainers = with maintainers; [ luispedro ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/inflect/default.nix b/pkgs/development/python-modules/inflect/default.nix
index 94b0fc801fa9..8c58a4f9de76 100644
--- a/pkgs/development/python-modules/inflect/default.nix
+++ b/pkgs/development/python-modules/inflect/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "inflect";
-  version = "1.0.0";
+  version = "1.0.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0ll34l5b2wsbcw9i2hvkhmq6szxrp7fzc2hjmpz1cvny81bhg3kx";
+    sha256 = "ec42f5d5d2baa54ba6e3fa23698554c09362dd478cc66b3c28c5d0b76d7d0581";
   };
 
   buildInputs = [ setuptools_scm ];
diff --git a/pkgs/development/python-modules/influxdb/default.nix b/pkgs/development/python-modules/influxdb/default.nix
new file mode 100644
index 000000000000..100ca5b0ff9a
--- /dev/null
+++ b/pkgs/development/python-modules/influxdb/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, requests
+, dateutil
+, pytz
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "influxdb";
+  version = "4.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0injsml6zmb3hkgc03117fdlg573kbfgjbijpd5npf0vsy0xnpvz";
+  };
+
+  # ImportError: No module named tests
+  doCheck = false;
+  propagatedBuildInputs = [ requests dateutil pytz six ];
+
+  meta = with stdenv.lib; {
+    description = "Python client for InfluxDB";
+    homepage = https://github.com/influxdb/influxdb-python;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/infoqscraper/default.nix b/pkgs/development/python-modules/infoqscraper/default.nix
new file mode 100644
index 000000000000..f9ced7e63daf
--- /dev/null
+++ b/pkgs/development/python-modules/infoqscraper/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, html5lib
+, six
+, beautifulsoup4
+, pkgs
+}:
+
+buildPythonPackage rec {
+  version = "0.1.0";
+  pname = "infoqscraper";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "cykl";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "07mxp4mla7fwfc032f3mxrhjarnhkjqdxxibf9ba87c93z3dq8jj";
+  };
+
+  # requires network
+  doCheck = false;
+
+  buildInputs = [ html5lib ];
+  propagatedBuildInputs = [ six beautifulsoup4 pkgs.ffmpeg pkgs.swftools pkgs.rtmpdump ];
+
+  meta = with stdenv.lib; {
+    description = "Discover presentations and/or create a movie consisting of slides and audio track from an infoq url";
+    homepage = "https://github.com/cykl/infoqscraper/wiki";
+    license = licenses.mit;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/inifile/default.nix b/pkgs/development/python-modules/inifile/default.nix
new file mode 100644
index 000000000000..e64ef76356d1
--- /dev/null
+++ b/pkgs/development/python-modules/inifile/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "inifile";
+  version = "0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0zgd53czc1irwx6b5zip8xlmyfr40hz2pd498d8yv61znj6lm16h";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A small INI library for Python";
+    homepage    = "https://github.com/mitsuhiko/python-inifile";
+    license     = licenses.bsd0;
+    maintainers = with maintainers; [ vozz ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/iniparse/default.nix b/pkgs/development/python-modules/iniparse/default.nix
new file mode 100644
index 000000000000..e0c2fd765c98
--- /dev/null
+++ b/pkgs/development/python-modules/iniparse/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "iniparse";
+  version = "0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0m60k46vr03x68jckachzsipav0bwhhnqb8715hm1cngs89fxhdb";
+  };
+
+  checkPhase = ''
+    ${python.interpreter} runtests.py
+  '';
+
+  # Does not install tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Accessing and Modifying INI files";
+    homepage = http://code.google.com/p/iniparse/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ danbst ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipaddr/default.nix b/pkgs/development/python-modules/ipaddr/default.nix
new file mode 100644
index 000000000000..4325e6ea8844
--- /dev/null
+++ b/pkgs/development/python-modules/ipaddr/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "ipaddr";
+  version = "2.1.11";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Google's IP address manipulation library";
+    homepage = http://code.google.com/p/ipaddr-py/;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipaddress/default.nix b/pkgs/development/python-modules/ipaddress/default.nix
new file mode 100644
index 000000000000..5052c3dc2f4e
--- /dev/null
+++ b/pkgs/development/python-modules/ipaddress/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pythonAtLeast
+, python
+}:
+
+if (pythonAtLeast "3.3") then null else buildPythonPackage rec {
+  pname = "ipaddress";
+  version = "1.0.18";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1q8klj9d84cmxgz66073x1j35cplr3r77vx1znhxiwl5w74391ax";
+  };
+
+  checkPhase = ''
+    ${python.interpreter} test_ipaddress.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Port of the 3.3+ ipaddress module to 2.6, 2.7, and 3.2";
+    homepage = https://github.com/phihag/ipaddress;
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipdb/default.nix b/pkgs/development/python-modules/ipdb/default.nix
new file mode 100644
index 000000000000..3203963b29da
--- /dev/null
+++ b/pkgs/development/python-modules/ipdb/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, ipython
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "ipdb";
+  version = "0.8.1";
+  disabled = isPyPy;  # setupterm: could not find terminfo database
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "1763d1564113f5eb89df77879a8d3213273c4d7ff93dcb37a3070cdf0c34fd7c";
+  };
+
+  propagatedBuildInputs = [ ipython ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/gotcha/ipdb;
+    description = "IPython-enabled pdb";
+    license = licenses.bsd0;
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipdbplugin/default.nix b/pkgs/development/python-modules/ipdbplugin/default.nix
new file mode 100644
index 000000000000..1f5435461abc
--- /dev/null
+++ b/pkgs/development/python-modules/ipdbplugin/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, ipython
+}:
+
+buildPythonPackage rec {
+  pname = "ipdbplugin";
+  version = "1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "4778d78b5d0af1a2a6d341aed9e72eb73b1df6b179e145b4845d3a209137029c";
+  };
+
+  propagatedBuildInputs = [ nose ipython ];
+
+  meta = with stdenv.lib; {
+    homepage = http://github.com/flavioamieiro/nose-ipdb/tree/master;
+    description = "Nose plugin to use iPdb instead of Pdb when tests fail";
+    license = licenses.lgpl2;
+    maintainers = [ maintainers.costrouc ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipfsapi/default.nix b/pkgs/development/python-modules/ipfsapi/default.nix
new file mode 100644
index 000000000000..377ed8549cff
--- /dev/null
+++ b/pkgs/development/python-modules/ipfsapi/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, six
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "ipfsapi";
+  version = "0.4.2.post1";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "ipfs";
+    repo = "py-ipfs-api";
+    rev = "0c485544a114f580c65e2ffbb5782efbf7fd9f61";
+    sha256 = "1v7f77cv95yv0v80gisdh71mj7jcq41xcfip6bqm57zfdbsa0xpn";
+  };
+
+  propagatedBuildInputs = [ six requests ];
+
+  meta = with stdenv.lib; {
+    description = "A python client library for the IPFS API";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mguentner ];
+    homepage = "https://pypi.python.org/pypi/ipfsapi";
+  };
+
+}
diff --git a/pkgs/development/python-modules/iptools/default.nix b/pkgs/development/python-modules/iptools/default.nix
new file mode 100644
index 000000000000..e5c5d298b431
--- /dev/null
+++ b/pkgs/development/python-modules/iptools/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  version = "0.6.1";
+  pname = "iptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0f03875a5bed740ba4bf44decb6a78679cca914a1ee8a6cc468114485c4d98e3";
+  };
+
+  buildInputs = [ nose ];
+
+  meta = with stdenv.lib; {
+    description = "Utilities for manipulating IP addresses including a class that can be used to include CIDR network blocks in Django's INTERNAL_IPS setting";
+    homepage = https://pypi.python.org/pypi/iptools;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/ipywidgets/default.nix b/pkgs/development/python-modules/ipywidgets/default.nix
index dde041140b94..b91b5d7a775b 100644
--- a/pkgs/development/python-modules/ipywidgets/default.nix
+++ b/pkgs/development/python-modules/ipywidgets/default.nix
@@ -14,11 +14,11 @@
 
 buildPythonPackage rec {
   pname = "ipywidgets";
-  version = "7.4.0";
+  version = "7.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "fd24a66d82f2ea49e281da7714a7c656340d3ec24dff376b17590fa59469b817";
+    sha256 = "a3e224f430163f767047ab9a042fc55adbcab0c24bbe6cf9f306c4f89fdf0ba3";
   };
 
   # Tests are not distributed
diff --git a/pkgs/development/python-modules/itsdangerous/default.nix b/pkgs/development/python-modules/itsdangerous/default.nix
new file mode 100644
index 000000000000..385708f436ec
--- /dev/null
+++ b/pkgs/development/python-modules/itsdangerous/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "itsdangerous";
+  version = "0.24";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Helpers to pass trusted data to untrusted environments and back";
+    homepage = "https://pypi.python.org/pypi/itsdangerous/";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/j2cli/default.nix b/pkgs/development/python-modules/j2cli/default.nix
new file mode 100644
index 000000000000..d8da0d8f1291
--- /dev/null
+++ b/pkgs/development/python-modules/j2cli/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, nose
+, jinja2
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "j2cli";
+  version = "0.3.1-0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0y3w1x9935qzx8w6m2r6g4ghyjmxn33wryiif6xb56q7cj9w1433";
+  };
+
+  buildInputs = [ nose ];
+  propagatedBuildInputs = [ jinja2 pyyaml ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kolypto/j2cli;
+    description = "Jinja2 Command-Line Tool";
+    license = licenses.bsd3;
+    longDescription = ''
+      J2Cli is a command-line tool for templating in shell-scripts,
+      leveraging the Jinja2 library.
+    '';
+    maintainers = with maintainers; [ rushmorem ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/jdatetime/default.nix b/pkgs/development/python-modules/jdatetime/default.nix
index a7c362231cab..03aa9d0d0f81 100644
--- a/pkgs/development/python-modules/jdatetime/default.nix
+++ b/pkgs/development/python-modules/jdatetime/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "jdatetime";
-  version = "3.0.0";
+  version = "3.0.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07cdb02e8d6610c38e8ae7746b12cbc39068cc5d54fb2baa915579b60d781b5b";
+    sha256 = "21824ab1e29e9ccbca85e77562a090067882976880603c41af8d9c4cffc1d4fc";
   };
 
   propagatedBuildInputs = [ six ];
diff --git a/pkgs/development/python-modules/jinja2_time/default.nix b/pkgs/development/python-modules/jinja2_time/default.nix
new file mode 100644
index 000000000000..69fbffa92b2f
--- /dev/null
+++ b/pkgs/development/python-modules/jinja2_time/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, arrow
+, jinja2
+}:
+
+buildPythonPackage rec {
+  version = "0.2.0";
+  pname = "jinja2-time";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni";
+  };
+
+  propagatedBuildInputs = [ arrow jinja2 ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/hackebrot/jinja2-time;
+    description = "Jinja2 Extension for Dates and Times";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/jmespath/default.nix b/pkgs/development/python-modules/jmespath/default.nix
new file mode 100644
index 000000000000..c4755b45eec3
--- /dev/null
+++ b/pkgs/development/python-modules/jmespath/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, ply
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "jmespath";
+  version = "0.9.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8";
+  };
+
+  buildInputs = [ nose ];
+  propagatedBuildInputs = [ ply ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/boto/jmespath;
+    description = "JMESPath allows you to declaratively specify how to extract elements from a JSON document";
+    license = "BSD";
+  };
+
+}
diff --git a/pkgs/development/python-modules/jsonpath_rw/default.nix b/pkgs/development/python-modules/jsonpath_rw/default.nix
new file mode 100644
index 000000000000..a109404c06f5
--- /dev/null
+++ b/pkgs/development/python-modules/jsonpath_rw/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+, ply
+, six
+, decorator
+}:
+
+buildPythonPackage rec {
+  pname = "jsonpath-rw";
+  version = "1.4.0";
+  disabled = isPyPy;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "05c471281c45ae113f6103d1268ec7a4831a2e96aa80de45edc89b11fac4fbec";
+  };
+
+  propagatedBuildInputs = [ ply six decorator ];
+
+  # ImportError: No module named tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/kennknowles/python-jsonpath-rw;
+    description = "A robust and significantly extended implementation of JSONPath for Python, with a clear AST for metaprogramming";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/jsonpointer/default.nix b/pkgs/development/python-modules/jsonpointer/default.nix
new file mode 100644
index 000000000000..c07a4bf3a358
--- /dev/null
+++ b/pkgs/development/python-modules/jsonpointer/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "jsonpointer";
+  version = "1.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "39403b47a71aa782de6d80db3b78f8a5f68ad8dfc9e674ca3bb5b32c15ec7308";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Resolve JSON Pointers in Python";
+    homepage = "https://github.com/stefankoegl/python-json-pointer";
+    license = stdenv.lib.licenses.bsd2; # "Modified BSD license, says pypi"
+  };
+
+}
diff --git a/pkgs/development/python-modules/jsonrpclib/default.nix b/pkgs/development/python-modules/jsonrpclib/default.nix
index 9f3efdf627ef..81dcdc074739 100644
--- a/pkgs/development/python-modules/jsonrpclib/default.nix
+++ b/pkgs/development/python-modules/jsonrpclib/default.nix
@@ -1,10 +1,15 @@
-{ lib, buildPythonPackage, fetchPypi, isPy27, cjson }:
+{ lib
+, buildPythonPackage
+, fetchPypi
+, cjson
+, isPy3k
+}:
 
 buildPythonPackage rec {
   pname = "jsonrpclib";
   version = "0.1.7";
 
-  disabled = !isPy27;
+  disabled = isPy3k;
 
   src = fetchPypi {
     inherit pname version;
@@ -13,7 +18,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ cjson ];
 
-  meta = {
+  meta = with lib; {
     description = "JSON RPC client library";
     homepage = https://pypi.python.org/pypi/jsonrpclib/;
     license = lib.licenses.asl20;
diff --git a/pkgs/development/python-modules/jsonwatch/default.nix b/pkgs/development/python-modules/jsonwatch/default.nix
new file mode 100644
index 000000000000..177b0d4cfee9
--- /dev/null
+++ b/pkgs/development/python-modules/jsonwatch/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, six
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "jsonwatch";
+  version = "0.2.0";
+  disabled = isPyPy; # doesn't find setuptools
+
+  src = fetchurl {
+    url = "https://github.com/dbohdan/jsonwatch/archive/v0.2.0.tar.gz";
+    sha256 = "04b616ef97b9d8c3887004995420e52b72a4e0480a92dbf60aa6c50317261e06";
+  };
+
+  propagatedBuildInputs = [ six ];
+
+  meta = with stdenv.lib; {
+    description = "Like watch -d but for JSON";
+    longDescription = ''
+      jsonwatch is a command line utility with which you can track
+      changes in JSON data delivered by a shell command or a web
+      (HTTP/HTTPS) API.  jsonwatch requests data from the designated
+      source repeatedly at a set interval and displays the
+      differences when the data changes. It is similar in its
+      behavior to how watch(1) with the -d switch works for
+      plain-text data.
+    '';
+    homepage = "https://github.com/dbohdan/jsonwatch";
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/development/python-modules/jupyter/default.nix b/pkgs/development/python-modules/jupyter/default.nix
new file mode 100644
index 000000000000..14f836725536
--- /dev/null
+++ b/pkgs/development/python-modules/jupyter/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, notebook
+, qtconsole
+, jupyter_console
+, nbconvert
+, ipykernel
+, ipywidgets
+}:
+
+buildPythonPackage rec {
+  version = "1.0.0";
+  pname = "jupyter";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f";
+  };
+
+  propagatedBuildInputs = [ notebook qtconsole jupyter_console nbconvert ipykernel ipywidgets ];
+
+  # Meta-package, no tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Installs all the Jupyter components in one go";
+    homepage = "http://jupyter.org/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    priority = 100; # This is a metapackage which is unimportant
+  };
+
+}
diff --git a/pkgs/development/python-modules/jupyterlab/default.nix b/pkgs/development/python-modules/jupyterlab/default.nix
index 23aaff8a7281..f0bd058271a9 100644
--- a/pkgs/development/python-modules/jupyterlab/default.nix
+++ b/pkgs/development/python-modules/jupyterlab/default.nix
@@ -1,12 +1,12 @@
 { lib, buildPythonPackage, isPy3k, fetchPypi, ipython_genutils, jupyterlab_launcher, notebook }:
 buildPythonPackage rec {
   pname = "jupyterlab";
-  version = "0.34.6";
+  version = "0.34.12";
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d6e5a3855a0d55e6aa4ab704379da5da3db2e652442e79acfa2e9d14ef50ccb3";
+    sha256 = "7d8378d19a0ae173e91a493db996c37828b410b7ee556da21a153486168ecf87";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/kajiki/default.nix b/pkgs/development/python-modules/kajiki/default.nix
new file mode 100644
index 000000000000..2391b334d617
--- /dev/null
+++ b/pkgs/development/python-modules/kajiki/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, Babel
+, pytz
+, nine
+}:
+
+buildPythonPackage rec {
+  pname = "Kajiki";
+  version = "0.5.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "effcae388e25c3358eb0bbd733448509d11a1ec500e46c69241fc673021f0517";
+  };
+
+  propagatedBuildInputs = [ Babel pytz nine ];
+
+  meta = with stdenv.lib; {
+    description = "Kajiki provides fast well-formed XML templates";
+    homepage = "https://github.com/nandoflorestan/kajiki";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/kaptan/default.nix b/pkgs/development/python-modules/kaptan/default.nix
new file mode 100644
index 000000000000..af24471d68de
--- /dev/null
+++ b/pkgs/development/python-modules/kaptan/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "kaptan";
+  version = "0.5.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1b8r86yyvdvyxd6f10mhkl6cr2jhxm80jjqr4zch96w9hs9rh5vq";
+  };
+
+  propagatedBuildInputs = [ pyyaml ];
+
+  meta = with stdenv.lib; {
+    description = "Configuration manager for python applications";
+    homepage = https://emre.github.io/kaptan/;
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jgeerds ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/kazoo/default.nix b/pkgs/development/python-modules/kazoo/default.nix
new file mode 100644
index 000000000000..ae9d15dd7866
--- /dev/null
+++ b/pkgs/development/python-modules/kazoo/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, six
+, eventlet
+, gevent
+, nose
+, mock
+, coverage
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "kazoo";
+  version = "2.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "10pb864if9qi2pq9lfb9m8f7z7ss6rml80gf1d9h64lap5crjnjj";
+  };
+
+  propagatedBuildInputs = [ six ];
+  buildInputs = [ eventlet gevent nose mock coverage pkgs.openjdk8 ];
+
+  # not really needed
+  preBuild = ''
+    sed -i '/flake8/d' setup.py
+  '';
+
+  preCheck = ''
+    sed -i 's/test_unicode_auth/noop/' kazoo/tests/test_client.py
+  '';
+
+  # tests take a long time to run and leave threads hanging
+  doCheck = false;
+  #ZOOKEEPER_PATH = "${pkgs.zookeeper}";
+
+  meta = with stdenv.lib; {
+    homepage = "https://kazoo.readthedocs.org";
+    description = "Higher Level Zookeeper Client";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/keepalive/default.nix b/pkgs/development/python-modules/keepalive/default.nix
new file mode 100644
index 000000000000..c53bc25d198d
--- /dev/null
+++ b/pkgs/development/python-modules/keepalive/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "keepalive";
+  version = "0.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "3c6b96f9062a5a76022f0c9d41e9ef5552d80b1cadd4fccc1bf8f183ba1d1ec1";
+  };
+
+  # No tests included
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "An HTTP handler for `urllib2` that supports HTTP 1.1 and keepalive";
+    homepage = "https://github.com/wikier/keepalive";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/keras-applications/default.nix b/pkgs/development/python-modules/keras-applications/default.nix
index f9617f03d8e4..a069c205144d 100644
--- a/pkgs/development/python-modules/keras-applications/default.nix
+++ b/pkgs/development/python-modules/keras-applications/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "Keras_Applications";
-  version = "1.0.5";
+  version = "1.0.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "26a7318b9d8d5be80d75ab08a1284aaf4b94125dd8271b18ca89791e16eb2cfc";
+    sha256 = "a03af60ddc9c5afdae4d5c9a8dd4ca857550e0b793733a5072e0725829b87017";
   };
 
   # Cyclic dependency: keras-applications requires keras, which requires keras-applications
diff --git a/pkgs/development/python-modules/keras-preprocessing/default.nix b/pkgs/development/python-modules/keras-preprocessing/default.nix
index 45ce1d7f61d5..a57b6f7dfa38 100644
--- a/pkgs/development/python-modules/keras-preprocessing/default.nix
+++ b/pkgs/development/python-modules/keras-preprocessing/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "Keras_Preprocessing";
-  version = "1.0.3";
+  version = "1.0.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "02ba0a3b31ed89c4b0c21d55ba7d87529097d56f394e3850b6d3c9e6c63ce7ae";
+    sha256 = "ef2e482c4336fcf7180244d06f4374939099daa3183816e82aee7755af35b754";
   };
 
   # Cyclic dependency: keras-preprocessing requires keras, which requires keras-preprocessing
diff --git a/pkgs/development/python-modules/keras/default.nix b/pkgs/development/python-modules/keras/default.nix
index 43f3bd935d24..83ef23282797 100644
--- a/pkgs/development/python-modules/keras/default.nix
+++ b/pkgs/development/python-modules/keras/default.nix
@@ -6,11 +6,11 @@
 
 buildPythonPackage rec {
   pname = "Keras";
-  version = "2.2.2";
+  version = "2.2.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "468d98da104ec5c3dbb10c2ef6bb345ab154f6ca2d722d4c250ef4d6105de17a";
+    sha256 = "90b610a3dbbf6d257b20a079eba3fdf2eed2158f64066a7c6f7227023fd60bc9";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/kerberos/default.nix b/pkgs/development/python-modules/kerberos/default.nix
new file mode 100644
index 000000000000..fdaec0d817df
--- /dev/null
+++ b/pkgs/development/python-modules/kerberos/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "kerberos";
+  version = "1.2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "11q9jhzdl88jh8jgn7cycq034m36g2ncxds7mr3vqkngpcirkx6n";
+  };
+
+  buildInputs = [ pkgs.kerberos ];
+
+  meta = with stdenv.lib; {
+    description = "Kerberos high-level interface";
+    homepage = https://pypi.python.org/pypi/kerberos;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lazy-object-proxy/default.nix b/pkgs/development/python-modules/lazy-object-proxy/default.nix
new file mode 100644
index 000000000000..f72e71fd4bd6
--- /dev/null
+++ b/pkgs/development/python-modules/lazy-object-proxy/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "lazy-object-proxy";
+  version = "1.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "22ed751a2c63c6cf718674fd7461b1dfc45215bab4751ca32b6c9b8cb2734cb3";
+  };
+
+  buildInputs = [ pytest ];
+  checkPhase = ''
+    py.test tests
+  '';
+
+  # Broken tests. Seem to be fixed upstream according to Travis.
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A fast and thorough lazy object proxy";
+    homepage = https://github.com/ionelmc/python-lazy-object-proxy;
+    license = with licenses; [ bsd2 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/le/default.nix b/pkgs/development/python-modules/le/default.nix
new file mode 100644
index 000000000000..cb0a8bc63481
--- /dev/null
+++ b/pkgs/development/python-modules/le/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, isPy3k
+, simplejson
+, psutil
+}:
+
+buildPythonPackage rec {
+  pname = "le";
+  version = "1.4.29";
+
+  src = fetchurl {
+    url = "https://github.com/logentries/le/archive/v${version}.tar.gz";
+    sha256 = "d29738937cb6e714b6ec2ae74b66b1983482ffd54b4faa40767af18509521d4c";
+  };
+
+  disabled = isPy3k;
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ simplejson psutil ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/rapid7/le;
+    description = "Logentries agent";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/ledgerblue/default.nix b/pkgs/development/python-modules/ledgerblue/default.nix
index d324afcc647a..52d7cba3f958 100644
--- a/pkgs/development/python-modules/ledgerblue/default.nix
+++ b/pkgs/development/python-modules/ledgerblue/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "ledgerblue";
-  version = "0.1.19";
+  version = "0.1.20";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3969b3c375c0f3fb60ff1645621ebf2f39fb697a53851620705f27ed7b283097";
+    sha256 = "fb7ac6389ad13d3c9baa149b527e2cb5798e749e2b6729e5fe8437092ece6164";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/development/python-modules/lektor/default.nix b/pkgs/development/python-modules/lektor/default.nix
new file mode 100644
index 000000000000..6eb84043d784
--- /dev/null
+++ b/pkgs/development/python-modules/lektor/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, click
+, watchdog
+, exifread
+, requests
+, mistune
+, inifile
+, Babel
+, jinja2
+, flask
+, pyopenssl
+, ndg-httpsclient
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "lektor";
+  version = "2.3";
+
+  src = fetchgit {
+    url = "https://github.com/lektor/lektor";
+    rev = "refs/tags/${version}";
+    sha256 = "1n0ylh1sbpvi9li3g6a7j7m28njfibn10y6s2gayjxwm6fpphqxy";
+  };
+
+  buildInputs = [ pkgs.glibcLocales ];
+  propagatedBuildInputs = [
+    click watchdog exifread requests mistune inifile Babel jinja2
+    flask pyopenssl ndg-httpsclient
+  ];
+
+  LC_ALL="en_US.UTF-8";
+
+  # No tests included in archive
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A static content management system";
+    homepage    = "https://www.getlektor.com/";
+    license     = licenses.bsd0;
+    maintainers = with maintainers; [ vozz ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/libcloud/default.nix b/pkgs/development/python-modules/libcloud/default.nix
new file mode 100644
index 000000000000..90688d8e4ea2
--- /dev/null
+++ b/pkgs/development/python-modules/libcloud/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+, pycrypto
+}:
+
+buildPythonPackage rec {
+  pname = "apache-libcloud";
+  version = "1.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0qlhyz5f32xg8i10biyzqscks8d28vklk63hvj45vzy1amw60kqz";
+  };
+
+  buildInputs = [ mock ];
+  propagatedBuildInputs = [ pycrypto ];
+
+  preConfigure = "cp libcloud/test/secrets.py-dist libcloud/test/secrets.py";
+
+  # failing tests for 26 and 27
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A unified interface to many cloud providers";
+    homepage = http://incubator.apache.org/libcloud/;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/librosa/default.nix b/pkgs/development/python-modules/librosa/default.nix
new file mode 100644
index 000000000000..adc740fbcf00
--- /dev/null
+++ b/pkgs/development/python-modules/librosa/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, joblib
+, matplotlib
+, six
+, scikitlearn
+, decorator
+, audioread
+, resampy
+}:
+
+buildPythonPackage rec {
+  pname = "librosa";
+  version = "0.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "209626c53556ca3922e52d2fae767bf5b398948c867fcc8898f948695dacb247";
+  };
+
+  propagatedBuildInputs = [ joblib matplotlib six scikitlearn decorator audioread resampy ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python module for audio and music processing";
+    homepage = http://librosa.github.io/;
+    license = licenses.isc;
+  };
+
+}
diff --git a/pkgs/development/python-modules/libthumbor/default.nix b/pkgs/development/python-modules/libthumbor/default.nix
new file mode 100644
index 000000000000..6c9987a5b8e8
--- /dev/null
+++ b/pkgs/development/python-modules/libthumbor/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, django
+, six
+, pycrypto
+}:
+
+buildPythonPackage rec {
+  pname = "libthumbor";
+  version = "1.3.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1vjhszsf8wl9k16wyg2rfjycjnawzl7z8j39bhiysbz5x4lqg91b";
+  };
+
+  buildInputs = [ django ];
+  propagatedBuildInputs = [ six pycrypto ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "libthumbor is the python extension to thumbor";
+    homepage = https://github.com/heynemann/libthumbor;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lightblue/default.nix b/pkgs/development/python-modules/lightblue/default.nix
new file mode 100644
index 000000000000..f826bbecb0a3
--- /dev/null
+++ b/pkgs/development/python-modules/lightblue/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, pkgs
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "lightblue";
+  version = "0.4";
+  disabled = isPy3k; # build fails, 2018-04-11
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "016h1mlhpqxjj25lcvl4fqc19k8ifmsv6df7rhr12fyfcrp5i14d";
+  };
+
+  buildInputs = [ pkgs.bluez pkgs.openobex ];
+
+  meta = with stdenv.lib; {
+    homepage = http://lightblue.sourceforge.net;
+    description = "Cross-platform Bluetooth API for Python";
+    maintainers = with maintainers; [ leenaars ];
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lightning/default.nix b/pkgs/development/python-modules/lightning/default.nix
new file mode 100644
index 000000000000..d0e1a10ae008
--- /dev/null
+++ b/pkgs/development/python-modules/lightning/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, jinja2
+, matplotlib
+, numpy
+, requests
+, six
+}:
+
+buildPythonPackage rec {
+  version = "1.2.1";
+  pname = "lightning-python";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "3987d7d4a634bdb6db9bcf212cf4d2f72bab5bc039f4f6cbc02c9d01c4ade792";
+  };
+
+  buildInputs = [ pytest ];
+  propagatedBuildInputs = [ jinja2 matplotlib numpy requests six ];
+
+  meta = with stdenv.lib; {
+    description = "A Python client library for the Lightning data visualization server";
+    homepage = http://lightning-viz.org;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/limnoria/default.nix b/pkgs/development/python-modules/limnoria/default.nix
new file mode 100644
index 000000000000..96490c8f0a01
--- /dev/null
+++ b/pkgs/development/python-modules/limnoria/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "limnoria";
+  version = "2016.05.06";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "09kbii5559d09jjb6cryj8rva1050r54dvb67hlcvxhy8g3gr1y3";
+  };
+
+  patchPhase = ''
+    sed -i 's/version=version/version="${version}"/' setup.py
+  '';
+  buildInputs = [ pkgs.git ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A modified version of Supybot, an IRC bot";
+    homepage = http://supybot.fr.cr;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ goibhniu ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/linode/default.nix b/pkgs/development/python-modules/linode/default.nix
new file mode 100644
index 000000000000..d0c8b0ff7943
--- /dev/null
+++ b/pkgs/development/python-modules/linode/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "linode";
+  version = "0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "db3c2a7fab8966d903a63f16c515bff241533e4ef2d746aa7aae4a49bba5e573";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/ghickman/linode";
+    description = "A thin python wrapper around Linode's API";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nslqqq ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/livestreamer-curses/default.nix b/pkgs/development/python-modules/livestreamer-curses/default.nix
new file mode 100644
index 000000000000..bf3b2cc1164c
--- /dev/null
+++ b/pkgs/development/python-modules/livestreamer-curses/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, isPyPy
+, livestreamer
+}:
+
+buildPythonPackage rec {
+  version = "1.5.2";
+  pname = "livestreamer-curses";
+  disabled = isPyPy;
+
+  src = fetchurl {
+    url = "https://github.com/gapato/livestreamer-curses/archive/v${version}.tar.gz";
+    sha256 = "1v49sym6mrci9dxy0a7cpbp4bv6fg2ijj6rwk4wzg18c2x4qzkhn";
+  };
+
+  propagatedBuildInputs = [ livestreamer ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/gapato/livestreamer-curses;
+    description = "Curses frontend for livestreamer";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/livestreamer/default.nix b/pkgs/development/python-modules/livestreamer/default.nix
new file mode 100644
index 000000000000..94394c11e04e
--- /dev/null
+++ b/pkgs/development/python-modules/livestreamer/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, pkgs
+, isPyPy
+, pycrypto
+, requests
+, singledispatch
+, futures
+, isPy27
+, isPy33
+}:
+
+buildPythonPackage rec {
+  version = "1.12.2";
+  pname = "livestreamer";
+  disabled = isPyPy;
+
+  src = pkgs.fetchurl {
+    url = "https://github.com/chrippa/livestreamer/archive/v${version}.tar.gz";
+    sha256 = "1fp3d3z2grb1ls97smjkraazpxnvajda2d1g1378s6gzmda2jvjd";
+  };
+
+  buildInputs = [ pkgs.makeWrapper ];
+
+  propagatedBuildInputs = [ pkgs.rtmpdump pycrypto requests ]
+    ++ stdenv.lib.optionals isPy27 [ singledispatch futures ]
+    ++ stdenv.lib.optionals isPy33 [ singledispatch ];
+
+  postInstall = ''
+    wrapProgram $out/bin/livestreamer --prefix PATH : ${pkgs.rtmpdump}/bin
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://livestreamer.tanuki.se;
+    description = ''
+      Livestreamer is CLI program that extracts streams from various
+      services and pipes them into a video player of choice.
+    '';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fuuzetsu ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/llfuse/default.nix b/pkgs/development/python-modules/llfuse/default.nix
index 7eac54d84d87..78daa85ea806 100644
--- a/pkgs/development/python-modules/llfuse/default.nix
+++ b/pkgs/development/python-modules/llfuse/default.nix
@@ -4,12 +4,12 @@
 
 buildPythonPackage rec {
   pname = "llfuse";
-  version = "1.3.4";
+  version = "1.3.5";
   name = pname + "-" + version;
 
   src = fetchurl {
     url = "mirror://pypi/l/llfuse/${name}.tar.bz2";
-    sha256 = "50396c5f3c49c3145e696e5b62df4fcca8b66634788020fba7b6932a858c78c2";
+    sha256 = "6e412a3d9be69162d49b8a4d6fb3c343d1c1fba847f4535d229e0ece2548ead8";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/python-modules/lmdb/default.nix b/pkgs/development/python-modules/lmdb/default.nix
new file mode 100644
index 000000000000..d46b51e27d3f
--- /dev/null
+++ b/pkgs/development/python-modules/lmdb/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "lmdb";
+  version = "0.92";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01nw6r08jkipx6v92kw49z34wmwikrpvc5j9xawdiyg1n2526wrx";
+  };
+
+  # Some sort of mysterious failure with lmdb.tool
+  doCheck = !isPy3k;
+
+  meta = with stdenv.lib; {
+    description = "Universal Python binding for the LMDB 'Lightning' Database";
+    homepage = "https://github.com/dw/py-lmdb";
+    license = licenses.openldap;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/logilab_astng/default.nix b/pkgs/development/python-modules/logilab_astng/default.nix
new file mode 100644
index 000000000000..53284d122287
--- /dev/null
+++ b/pkgs/development/python-modules/logilab_astng/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, logilab_common
+}:
+
+buildPythonPackage rec {
+  pname = "logilab-astng";
+  version = "0.24.3";
+
+  src = fetchurl {
+    url = "http://download.logilab.org/pub/astng/${pname}-${version}.tar.gz";
+    sha256 = "0np4wpxyha7013vkkrdy54dvnil67gzi871lg60z8lap0l5h67wn";
+  };
+
+  propagatedBuildInputs = [ logilab_common ];
+
+  meta = with stdenv.lib; {
+    homepage = https://www.logilab.org/project/logilab-astng;
+    description = "Python Abstract Syntax Tree New Generation";
+    license = licenses.lgpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/logutils/default.nix b/pkgs/development/python-modules/logutils/default.nix
new file mode 100644
index 000000000000..d6595b19db6f
--- /dev/null
+++ b/pkgs/development/python-modules/logutils/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "logutils";
+  version = "0.3.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "173w55fg3hp5dhx7xvssmgqkcv5fjlaik11w5dah2fxygkjvhhj0";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Logging utilities";
+    homepage = http://code.google.com/p/logutils/;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lpod/default.nix b/pkgs/development/python-modules/lpod/default.nix
new file mode 100644
index 000000000000..dd40ac851865
--- /dev/null
+++ b/pkgs/development/python-modules/lpod/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, lxml
+, docutils
+, pillow
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "1.1.7";
+  pname = "python-lpod";
+  # lpod library currently does not support Python 3.x
+  disabled = isPy3k;
+
+  propagatedBuildInputs = [ lxml docutils pillow ];
+
+  src = fetchFromGitHub {
+    owner = "lpod";
+    repo = "lpod-python";
+    rev = "dee32120ee582ff337b0c52a95a9a87cca71fd67";
+    sha256 = "1mikvzp27wxkzpr2lii4wg1hhx8h610agckqynvsrdc8v3nw9ciw";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/lpod/lpod-python/;
+    description = "Library implementing the ISO/IEC 26300 OpenDocument Format standard (ODF) ";
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lsi/default.nix b/pkgs/development/python-modules/lsi/default.nix
new file mode 100644
index 000000000000..ebf98d9e7b26
--- /dev/null
+++ b/pkgs/development/python-modules/lsi/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+, colored
+, boto
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "lsi";
+  version = "0.2.2";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0429iilb06yhsmvj3xp6wyhfh1rp4ndxlhwrm80r97z0w7plrk94";
+  };
+
+  propagatedBuildInputs = [ colored boto pkgs.openssh pkgs.which ];
+
+  meta = with stdenv.lib; {
+    description = "CLI for querying and SSHing onto AWS EC2 instances";
+    homepage = https://github.com/NarrativeScience/lsi;
+    maintainers = [maintainers.adnelson];
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/lxc/default.nix b/pkgs/development/python-modules/lxc/default.nix
new file mode 100644
index 000000000000..a078d33a8895
--- /dev/null
+++ b/pkgs/development/python-modules/lxc/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "python-lxc-unstable";
+  version = "2016-08-25";
+  disabled = isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "lxc";
+    repo = "python2-lxc";
+    rev = "0553f05d23b56b59bf3015fa5e45bfbfab9021ef";
+    sha256 = "0p9kb20xvq91gx2wfs3vppb7vsp8kmd90i3q95l4nl1y4aismdn4";
+  };
+
+  buildInputs = [ pkgs.lxc ];
+
+  meta = with stdenv.lib; {
+    description = "Out of tree python 2.7 binding for liblxc";
+    homepage = https://github.com/lxc/python2-lxc;
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ mic92 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/lxml/default.nix b/pkgs/development/python-modules/lxml/default.nix
index 3778098922a8..5672fce602e7 100644
--- a/pkgs/development/python-modules/lxml/default.nix
+++ b/pkgs/development/python-modules/lxml/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "lxml";
-  version = "4.2.4";
+  version = "4.2.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "e2afbe403090f5893e254958d02875e0732975e73c4c0cdd33c1f009a61963ca";
+    sha256 = "36720698c29e7a9626a0dc802ef8885f8f0239bfd1689628ecd459a061f2807f";
   };
 
   buildInputs = [ libxml2 libxslt ];
diff --git a/pkgs/development/python-modules/m2crypto/default.nix b/pkgs/development/python-modules/m2crypto/default.nix
new file mode 100644
index 000000000000..87a74c79f553
--- /dev/null
+++ b/pkgs/development/python-modules/m2crypto/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+
+buildPythonPackage rec {
+  version = "0.24.0";
+  pname = "M2Crypto";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1s2y0pf2zg7xf4nfwrw7zhwbk615r5a7bgi5wwkwzh6jl50n99c0";
+  };
+
+  buildInputs = [ pkgs.swig2 pkgs.openssl ];
+
+  preConfigure = ''
+    substituteInPlace setup.py --replace "self.openssl = '/usr'" "self.openssl = '${pkgs.openssl.dev}'"
+  '';
+
+  doCheck = false; # another test that depends on the network.
+
+  meta = with stdenv.lib; {
+    description = "A Python crypto and SSL toolkit";
+    homepage = http://chandlerproject.org/Projects/MeTooCrypto;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/magic/default.nix b/pkgs/development/python-modules/magic/default.nix
new file mode 100644
index 000000000000..41c932ed1117
--- /dev/null
+++ b/pkgs/development/python-modules/magic/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, pkgs
+}:
+
+buildPythonPackage rec {
+  name = "${pkgs.file.name}";
+
+  src = pkgs.file.src;
+
+  patchPhase = ''
+    substituteInPlace python/magic.py --replace "find_library('magic')" "'${pkgs.file}/lib/libmagic${stdenv.hostPlatform.extensions.sharedLibrary}'"
+  '';
+
+  buildInputs = [ pkgs.file ];
+
+  preConfigure = "cd python";
+
+  # No test suite
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A Python wrapper around libmagic";
+    homepage = http://www.darwinsys.com/file/;
+    license = licenses.lgpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mailchimp/default.nix b/pkgs/development/python-modules/mailchimp/default.nix
new file mode 100644
index 000000000000..b9640a4ab5d5
--- /dev/null
+++ b/pkgs/development/python-modules/mailchimp/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, docopt
+, requests
+}:
+
+buildPythonPackage rec {
+  version = "2.0.9";
+  pname = "mailchimp";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0351ai0jqv3dzx0xxm1138sa7mb42si6xfygl5ak8wnfc95ff770";
+  };
+
+  buildInputs = [ docopt ];
+  propagatedBuildInputs = [ requests ];
+  patchPhase = ''
+    sed -i 's/==/>=/' setup.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A CLI client and Python API library for the MailChimp email platform";
+    homepage = "http://apidocs.mailchimp.com/api/2.0/";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/manuel/default.nix b/pkgs/development/python-modules/manuel/default.nix
new file mode 100644
index 000000000000..1030ee215562
--- /dev/null
+++ b/pkgs/development/python-modules/manuel/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, six
+, zope_testing
+}:
+
+buildPythonPackage rec {
+  pname = "manuel";
+  version = "1.8.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1diyj6a8bvz2cdf9m0g2bbx9z2yjjnn3ylbg1zinpcjj6vldfx59";
+  };
+
+  propagatedBuildInputs = [ six zope_testing ];
+
+  meta = with stdenv.lib; {
+    description = "A documentation builder";
+    homepage = https://pypi.python.org/pypi/manuel;
+    license = licenses.zpl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mapsplotlib/default.nix b/pkgs/development/python-modules/mapsplotlib/default.nix
new file mode 100644
index 000000000000..861f3069bb02
--- /dev/null
+++ b/pkgs/development/python-modules/mapsplotlib/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+, matplotlib
+, scipy
+, pandas
+, requests
+, pillow
+}:
+
+buildPythonPackage rec {
+  pname = "mapsplotlib";
+  version = "1.0.6";
+
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "09gpws3x0jd88n636baxx5izjffrpjy4j6jl8l7vj29yzvrdr2bp";
+  };
+
+  propagatedBuildInputs = [ matplotlib scipy pandas requests pillow ];
+
+  meta = with stdenv.lib; {
+    description = "Custom Python plots on a Google Maps background";
+    homepage = https://github.com/tcassou/mapsplotlib;
+    license = licenses.mit;
+    maintainers = [ maintainers.rob ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/markdown-macros/default.nix b/pkgs/development/python-modules/markdown-macros/default.nix
new file mode 100644
index 000000000000..98dce9130464
--- /dev/null
+++ b/pkgs/development/python-modules/markdown-macros/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, fetchpatch
+, markdown
+}:
+
+buildPythonPackage rec {
+  pname = "markdown-macros";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1lzvrb7nci22yp21ab2qqc9p0fhkazqj29vw0wln2r4ckb2nbawv";
+  };
+
+  patches = [
+    # Fixes a bug with markdown>2.4
+    (fetchpatch {
+      url = "https://github.com/wnielson/markdown-macros/pull/1.patch";
+      sha256 = "17njbgq2srzkf03ar6yn92frnsbda3g45cdi529fdh0x8mmyxci0";
+    })
+  ];
+
+  prePatch = ''
+    substituteInPlace setup.py --replace "distribute" "setuptools"
+  '';
+
+  propagatedBuildInputs = [ markdown ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "An extension for python-markdown that makes writing trac-like macros easy";
+    homepage = https://github.com/wnielson/markdown-macros;
+    license = licenses.mit;
+    maintainers = [ maintainers.abigailbuccaneer ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/markdown2/default.nix b/pkgs/development/python-modules/markdown2/default.nix
index f49b2630b6c7..a07e0b14fdce 100644
--- a/pkgs/development/python-modules/markdown2/default.nix
+++ b/pkgs/development/python-modules/markdown2/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "markdown2";
-  version = "2.3.5";
+  version = "2.3.6";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "8bb9a24eb2aa02f1427aabe46483f0f0215ab18c8a345315ae8e2ee3c3a09c03";
+    sha256 = "08a124043aa0ad36ba2136239547d5011a2b770278abb11a5609611e0040ea05";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/markupsafe/default.nix b/pkgs/development/python-modules/markupsafe/default.nix
new file mode 100644
index 000000000000..069b71de00d3
--- /dev/null
+++ b/pkgs/development/python-modules/markupsafe/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "MarkupSafe";
+  version = "1.0";
+
+ src = fetchPypi {
+    inherit pname version;
+    sha256 = "0rdn1s8x9ni7ss8rfiacj7x1085lx8mh2zdwqslnw8xc3l4nkgm6";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Implements a XML/HTML/XHTML Markup safe string";
+    homepage = http://dev.pocoo.org;
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ domenkozar garbas ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/marshmallow/default.nix b/pkgs/development/python-modules/marshmallow/default.nix
index 20543faeb16b..cd4e86d4687a 100644
--- a/pkgs/development/python-modules/marshmallow/default.nix
+++ b/pkgs/development/python-modules/marshmallow/default.nix
@@ -4,7 +4,7 @@
 
 buildPythonPackage rec {
   pname = "marshmallow";
-  version = "2.15.4";
+  version = "2.15.6";
 
   meta = {
     homepage = "https://github.com/marshmallow-code/marshmallow";
@@ -17,7 +17,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0f3776aa5b5405f6000c9304841abe6d4d708bb08207fc89a5ecd86622ec9e54";
+    sha256 = "485ac6ed0dff5e1af6ea1e3a54425a448968f581b065424c89a5375e4d4866fd";
   };
 
   propagatedBuildInputs = [ dateutil simplejson ];
diff --git a/pkgs/development/python-modules/mathics/default.nix b/pkgs/development/python-modules/mathics/default.nix
new file mode 100644
index 000000000000..b20cc0709092
--- /dev/null
+++ b/pkgs/development/python-modules/mathics/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, django
+, python
+, cython
+, sympy
+, ply
+, mpmath
+, dateutil
+, colorama
+, six
+, pexpect
+}:
+
+if (stdenv.lib.versionOlder django.version "1.8") ||
+   (stdenv.lib.versionAtLeast django.version "1.9")
+   then throw "mathics only supports django-1.8.x"
+   else buildPythonPackage rec {
+  pname = "mathics";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "mathics";
+    repo = "Mathics";
+    rev = "v${version}";
+    sha256 = "0xzz7j8xskj5y6as178mjmm0i2xbhd4q4mwmdnvghpd2aqq3qx1c";
+  };
+
+  buildInputs = [ pexpect ];
+
+  prePatch = ''
+    substituteInPlace setup.py --replace "sympy==0.7.6" "sympy"
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/bin $out
+    patchPythonScript $out/${python.sitePackages}/mathics/manage.py
+  '';
+
+  propagatedBuildInputs = [ cython sympy django ply mpmath dateutil colorama six ];
+
+  meta = with stdenv.lib; {
+    description = "A general-purpose computer algebra system";
+    homepage = http://www.mathics.org;
+    license = licenses.gpl3;
+    maintainers = [ maintainers.benley ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/mechanize/default.nix b/pkgs/development/python-modules/mechanize/default.nix
new file mode 100644
index 000000000000..d797190cb896
--- /dev/null
+++ b/pkgs/development/python-modules/mechanize/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, html5lib
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "mechanize";
+  version = "0.3.5";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0rki9nl4y42q694parafcsdcdqvkdjckrbg6n0691302lfsrkyfl";
+  };
+
+  propagatedBuildInputs = [ html5lib ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Stateful programmatic web browsing in Python";
+    homepage = http://wwwsearch.sourceforge.net/;
+    license = "BSD-style";
+  };
+
+}
diff --git a/pkgs/development/python-modules/meld3/default.nix b/pkgs/development/python-modules/meld3/default.nix
new file mode 100644
index 000000000000..12b518484bc2
--- /dev/null
+++ b/pkgs/development/python-modules/meld3/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "meld3";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "57b41eebbb5a82d4a928608962616442e239ec6d611fe6f46343e765e36f0b2b";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "An HTML/XML templating engine used by supervisor";
+    homepage = https://github.com/supervisor/meld3;
+    license = licenses.free;
+  };
+
+}
diff --git a/pkgs/development/python-modules/memcached/default.nix b/pkgs/development/python-modules/memcached/default.nix
new file mode 100644
index 000000000000..854f7440daa1
--- /dev/null
+++ b/pkgs/development/python-modules/memcached/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "memcached-1.51";
+  version = "1.51";
+
+  src = if isPy3k then fetchPypi {
+    inherit pname version;
+    sha256 = "0na8b369q8fivh3y0nvzbvhh3lgvxiyyv9xp93cnkvwfsr8mkgkw";
+  } else fetchurl {
+    url = "http://ftp.tummy.com/pub/python-memcached/old-releases/python-${pname}-${version}.tar.gz";
+    sha256 = "124s98m6hvxj6x90d7aynsjfz878zli771q96ns767r2mbqn7192";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Python API for communicating with the memcached distributed memory object cache daemon";
+    homepage = http://www.tummy.com/Community/software/python-memcached/;
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/memory_profiler/default.nix b/pkgs/development/python-modules/memory_profiler/default.nix
new file mode 100644
index 000000000000..5f40ce0f1aad
--- /dev/null
+++ b/pkgs/development/python-modules/memory_profiler/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "memory_profiler";
+  version = "0.41";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "dce6e931c281662a500b142595517d095267216472c2926e5ec8edab89898d10";
+  };
+
+  # Tests don't import profile
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A module for monitoring memory usage of a python program";
+    homepage = https://pypi.python.org/pypi/memory_profiler;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mezzanine/default.nix b/pkgs/development/python-modules/mezzanine/default.nix
new file mode 100644
index 000000000000..1a7478b266ab
--- /dev/null
+++ b/pkgs/development/python-modules/mezzanine/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+, pyflakes
+, pep8
+, django
+, django_contrib_comments
+, filebrowser_safe
+, grappelli_safe
+, bleach
+, tzlocal
+, beautifulsoup4
+, requests
+, requests_oauthlib
+, future
+, pillow
+, chardet
+}:
+
+buildPythonPackage rec {
+  version = "4.3.1";
+  pname = "Mezzanine";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "42c7909953cc5aea91921b47d804b61e14893bf48a2a476ce49a96559a0fa1d3";
+  };
+
+  disabled = isPyPy;
+
+  buildInputs = [ pyflakes pep8 ];
+  propagatedBuildInputs = [ django django_contrib_comments filebrowser_safe grappelli_safe bleach tzlocal beautifulsoup4 requests requests_oauthlib future pillow chardet ];
+
+  # Tests Fail Due to Syntax Warning, Fixed for v3.1.11+
+  doCheck = false;
+  # sed calls will be unecessary in v3.1.11+
+  preConfigure = ''
+    sed -i 's/==/>=/' setup.py
+  '';
+
+  LC_ALL="en_US.UTF-8";
+
+  meta = with stdenv.lib; {
+    description = ''
+      A content management platform built using the Django framework
+    '';
+    longDescription = ''
+      Mezzanine is a powerful, consistent, and flexible content
+      management platform. Built using the Django framework, Mezzanine
+      provides a simple yet highly extensible architecture that
+      encourages diving in and hacking on the code. Mezzanine is BSD
+      licensed and supported by a diverse and active community.
+
+      In some ways, Mezzanine resembles tools such as Wordpress that
+      provide an intuitive interface for managing pages, blog posts,
+      form data, store products, and other types of content. But
+      Mezzanine is also different.  Unlike many other platforms that
+      make extensive use of modules or reusable applications,
+      Mezzanine provides most of its functionality by default. This
+      approach yields a more integrated and efficient platform.
+    '';
+    homepage = http://mezzanine.jupo.org/;
+    downloadPage = https://github.com/stephenmcd/mezzanine/releases;
+    license = licenses.free;
+    maintainers = with maintainers; [ prikhi ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mezzanine/writable_settings.patch b/pkgs/development/python-modules/mezzanine/writable_settings.patch
deleted file mode 100644
index 4b5be7b5950c..000000000000
--- a/pkgs/development/python-modules/mezzanine/writable_settings.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Nur mezzanine-3.1.10/mezzanine/bin/mezzanine_project.py mezzanine-3.1.10-patched/mezzanine/bin/mezzanine_project.py
---- mezzanine-3.1.10/mezzanine/bin/mezzanine_project.py	2014-08-30 07:12:19.000000000 +0200
-+++ mezzanine-3.1.10-patched/mezzanine/bin/mezzanine_project.py	2016-10-31 14:47:30.982401818 +0100
-@@ -5,6 +5,7 @@
- from distutils.dir_util import copy_tree
- from optparse import OptionParser
- import os
-+import stat
- from shutil import move
- from uuid import uuid4
- 
-@@ -61,6 +62,9 @@
-         copy_tree(os.path.join(package_path, "project_template"), project_path)
-         move(local_settings_path + ".template", local_settings_path)
- 
-+    os.chmod(local_settings_path,
-+             os.stat(local_settings_path).st_mode | stat.S_IWRITE)
-+
-     # Generate a unique SECRET_KEY for the project's setttings module.
-     with open(local_settings_path, "r") as f:
-         data = f.read()
diff --git a/pkgs/development/python-modules/micawber/default.nix b/pkgs/development/python-modules/micawber/default.nix
index 5e3afe05ea79..3425440390dd 100644
--- a/pkgs/development/python-modules/micawber/default.nix
+++ b/pkgs/development/python-modules/micawber/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "micawber";
-  version = "0.3.5";
+  version = "0.3.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0pnq6j8f144virhri0drgf0058x6qcxfd5yrb0ynbwr8djh326yn";
+    sha256 = "2e128db870cf3a351f5c680b6d1ae7e097a7ff6c70c8ba78c7d3be8e3d3c20bd";
   };
 
   propagatedBuildInputs = [ beautifulsoup4 ];
diff --git a/pkgs/development/python-modules/minidb/default.nix b/pkgs/development/python-modules/minidb/default.nix
new file mode 100644
index 000000000000..209ecf998ccf
--- /dev/null
+++ b/pkgs/development/python-modules/minidb/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "minidb";
+  version = "2.0.2";
+
+  src = fetchurl {
+    url = "https://github.com/thp/minidb/archive/${version}.tar.gz";
+    sha256 = "17rvkpq8v7infvbgsi48vnxamhxb3f635nqn0sln7yyvh4i9k8a0";
+  };
+
+  checkInputs = [ nose ];
+
+  checkPhase = ''
+    nosetests test
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple SQLite3-based store for Python objects";
+    homepage = https://thp.io/2010/minidb/;
+    license = stdenv.lib.licenses.isc;
+    maintainers = [ stdenv.lib.maintainers.tv ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/minimock/default.nix b/pkgs/development/python-modules/minimock/default.nix
new file mode 100644
index 000000000000..71409785b77d
--- /dev/null
+++ b/pkgs/development/python-modules/minimock/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, nose
+}:
+
+buildPythonPackage rec {
+  version = "1.2.8";
+  pname = "minimock";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/jab/minimock/get/${version}.zip";
+    sha256 = "c88fa8a7120623f23990a7f086a9657f6ced09025a55e3be8649a30b4945441a";
+  };
+
+  buildInputs = [ nose ];
+
+  checkPhase = "./test";
+
+  meta = with stdenv.lib; {
+    description = "A minimalistic mocking library for python";
+    homepage = https://pypi.python.org/pypi/MiniMock;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mixpanel/default.nix b/pkgs/development/python-modules/mixpanel/default.nix
new file mode 100644
index 000000000000..6a99913c6c8b
--- /dev/null
+++ b/pkgs/development/python-modules/mixpanel/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchzip
+, pytest
+, mock
+, six
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "4.0.2";
+  pname = "mixpanel";
+  disabled = isPy3k;
+
+  src = fetchzip {
+    url = "https://github.com/mixpanel/mixpanel-python/archive/${version}.zip";
+    sha256 = "0yq1bcsjzsz7yz4rp69izsdn47rvkld4wki2xmapp8gg2s9i8709";
+  };
+
+  buildInputs = [ pytest mock ];
+  propagatedBuildInputs = [ six ];
+  checkPhase = "py.test tests.py";
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mixpanel/mixpanel-python;
+    description = ''This is the official Mixpanel Python library'';
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mock/default.nix b/pkgs/development/python-modules/mock/default.nix
new file mode 100644
index 000000000000..142383b8db7e
--- /dev/null
+++ b/pkgs/development/python-modules/mock/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, unittest2
+, funcsigs
+, six
+, pbr
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "mock";
+  version = "2.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i";
+  };
+
+  buildInputs = [ unittest2 ];
+  propagatedBuildInputs = [ funcsigs six pbr ];
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Mock objects for Python";
+    homepage = http://python-mock.sourceforge.net/;
+    license = stdenv.lib.licenses.bsd2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/modestmaps/default.nix b/pkgs/development/python-modules/modestmaps/default.nix
new file mode 100644
index 000000000000..f0918e4bdb6f
--- /dev/null
+++ b/pkgs/development/python-modules/modestmaps/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pillow
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "ModestMaps";
+  version = "1.4.6";
+  disabled = !isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0vyi1m9q4pc34i6rq5agb4x3qicx5sjlbxwmxfk70k2l5mnbjca3";
+  };
+
+  propagatedBuildInputs = [ pillow ];
+
+  meta = with stdenv.lib; {
+    description = "A library for building interactive maps";
+    homepage = http://modestmaps.com;
+    license = stdenv.lib.licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/monotonic/default.nix b/pkgs/development/python-modules/monotonic/default.nix
new file mode 100644
index 000000000000..b736301e5efb
--- /dev/null
+++ b/pkgs/development/python-modules/monotonic/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "monotonic";
+  version = "1.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06vw7jwq96106plhlc5vz1v1xvjismdgw9wjyzvzf0ylglnrwiib";
+  };
+
+  __propagatedImpureHostDeps = stdenv.lib.optional stdenv.isDarwin "/usr/lib/libc.dylib";
+
+  patchPhase = stdenv.lib.optionalString stdenv.isLinux ''
+    substituteInPlace monotonic.py --replace \
+      "ctypes.util.find_library('c')" "'${stdenv.glibc.out}/lib/libc.so.6'"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An implementation of time.monotonic() for Python 2 & < 3.3";
+    homepage = https://github.com/atdt/monotonic;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/moto/default.nix b/pkgs/development/python-modules/moto/default.nix
index f9d1fee8973b..4a32c5e3e373 100644
--- a/pkgs/development/python-modules/moto/default.nix
+++ b/pkgs/development/python-modules/moto/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "moto";
-  version = "1.3.5";
+  version = "1.3.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "52426f2567e51ba73fdc7c7d617236b7e7918dca2421caabe13e5290942b53d8";
+    sha256 = "58fe0a0d55cbd9a001c02c146c15790cfcebf010c6648cb9990e6c3204709cbb";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/moviepy/default.nix b/pkgs/development/python-modules/moviepy/default.nix
new file mode 100644
index 000000000000..63613b516868
--- /dev/null
+++ b/pkgs/development/python-modules/moviepy/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, numpy
+, decorator
+, imageio
+, tqdm
+}:
+
+buildPythonPackage rec {
+  pname = "moviepy";
+  version = "0.2.2.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d937d817e534efc54eaee2fc4c0e70b48fcd81e1528cd6425f22178704681dc3";
+  };
+
+  # No tests
+  doCheck = false;
+  propagatedBuildInputs = [ numpy decorator imageio tqdm ];
+
+  meta = with stdenv.lib; {
+    description = "Video editing with Python";
+    homepage = http://zulko.github.io/moviepy/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mox/default.nix b/pkgs/development/python-modules/mox/default.nix
new file mode 100644
index 000000000000..d9b5a5aa111e
--- /dev/null
+++ b/pkgs/development/python-modules/mox/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+}:
+
+buildPythonPackage rec {
+  pname = "mox";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "http://pymox.googlecode.com/files/${pname}-${version}.tar.gz";
+    sha256 = "4d18a4577d14da13d032be21cbdfceed302171c275b72adaa4c5997d589a5030";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://code.google.com/p/pymox/;
+    description = "A mock object framework for Python";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mozsvc/default.nix b/pkgs/development/python-modules/mozsvc/default.nix
new file mode 100644
index 000000000000..b7fed9e6ad98
--- /dev/null
+++ b/pkgs/development/python-modules/mozsvc/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, fetchurl
+, pyramid
+, simplejson
+, konfig
+}:
+
+buildPythonPackage rec {
+  pname = "mozsvc";
+  version = "0.8";
+
+  src = fetchgit {
+    url = https://github.com/mozilla-services/mozservices.git;
+    rev = "refs/tags/${version}";
+    sha256 = "1zci2ikk83mf7va88c83dr6snfh4ddjqw0lsg3y29qk5nxf80vx2";
+  };
+
+  patches = stdenv.lib.singleton (fetchurl {
+    url = https://github.com/nbp/mozservices/commit/f86c0b0b870cd8f80ce90accde9e16ecb2e88863.diff;
+    sha256 = "1lnghx821f6dqp3pa382ka07cncdz7hq0mkrh44d0q3grvrlrp9n";
+  });
+
+  doCheck = false; # lazy packager
+  propagatedBuildInputs = [ pyramid simplejson konfig ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mozilla-services/mozservices;
+    description = "Various utilities for Mozilla apps";
+    license = licenses.mpl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mpd/default.nix b/pkgs/development/python-modules/mpd/default.nix
new file mode 100644
index 000000000000..48693293458e
--- /dev/null
+++ b/pkgs/development/python-modules/mpd/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "python-mpd";
+  version = "0.3.0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02812eba1d2e0f46e37457f5a6fa23ba203622e4bcab0a19b265e66b08cd21b4";
+  };
+
+  meta = with stdenv.lib; {
+    description = "An MPD (Music Player Daemon) client library written in pure Python";
+    homepage = http://jatreuman.indefero.net/p/python-mpd/;
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mpd2/default.nix b/pkgs/development/python-modules/mpd2/default.nix
new file mode 100644
index 000000000000..3669b8dddbf8
--- /dev/null
+++ b/pkgs/development/python-modules/mpd2/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "mpd2";
+  version = "0.5.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1gfrxf71xll1w6zb69znqg5c9j0g7036fsalkvqprh2id640cl3a";
+  };
+
+  buildInputs = [ mock ];
+  patchPhase = ''
+    sed -i -e '/tests_require/d' \
+        -e 's/cmdclass.*/test_suite="mpd_test",/' setup.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python client module for the Music Player Daemon";
+    homepage = "https://github.com/Mic92/python-mpd2";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ rvl mic92 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/mpmath/default.nix b/pkgs/development/python-modules/mpmath/default.nix
new file mode 100644
index 000000000000..50e68352e782
--- /dev/null
+++ b/pkgs/development/python-modules/mpmath/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "mpmath";
+  version = "0.19";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage    = http://mpmath.googlecode.com;
+    description = "A pure-Python library for multiprecision floating arithmetic";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mpv/default.nix b/pkgs/development/python-modules/mpv/default.nix
new file mode 100644
index 000000000000..cd9ca9451b8b
--- /dev/null
+++ b/pkgs/development/python-modules/mpv/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "mpv";
+  version = "0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0b9kd70mshdr713f3l1lbnz1q0vlg2y76h5d8liy1bzqm7hjcgfw";
+  };
+
+  buildInputs = [ pkgs.mpv ];
+  patchPhase = "substituteInPlace mpv.py --replace libmpv.so ${pkgs.mpv}/lib/libmpv.so";
+
+  meta = with stdenv.lib; {
+    description = "A python interface to the mpv media player";
+    homepage = "https://github.com/jaseg/python-mpv";
+    license = licenses.agpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/msgpack-numpy/default.nix b/pkgs/development/python-modules/msgpack-numpy/default.nix
index e04e9d1e802d..06063fd8b998 100644
--- a/pkgs/development/python-modules/msgpack-numpy/default.nix
+++ b/pkgs/development/python-modules/msgpack-numpy/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "msgpack-numpy";
-  version = "0.4.3.1";
+  version = "0.4.4.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "31fd5dd009bbee7f8b107db8c859e3a0a2793acc196f25ffbbae1e71b4c63ca5";
+    sha256 = "ac15d3a7b9e29d3e10a2683dc00ea495891b9b4cbb502ab0b0d2e516bd0b2eab";
   };
 
   buildInputs = [
diff --git a/pkgs/development/python-modules/msrplib/default.nix b/pkgs/development/python-modules/msrplib/default.nix
new file mode 100644
index 000000000000..32a759a6a49e
--- /dev/null
+++ b/pkgs/development/python-modules/msrplib/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchdarcs
+, eventlib
+, application
+, gnutls
+}:
+
+buildPythonPackage rec {
+  pname = "python-msrplib";
+  version = "0.19";
+
+  src = fetchdarcs {
+    url = "http://devel.ag-projects.com/repositories/${pname}";
+    rev = "release-${version}";
+    sha256 = "0jqvvssbwzq7bwqn3wrjfnpj8zb558mynn2visnlrcma6b57yhwd";
+  };
+
+  propagatedBuildInputs = [ eventlib application gnutls ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/AGProjects/python-msrplib;
+    description = "Client library for MSRP protocol and its relay extension (RFC 4975 and RFC4976)";
+    license = licenses.lgpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/multi_key_dict/default.nix b/pkgs/development/python-modules/multi_key_dict/default.nix
new file mode 100644
index 000000000000..a094b373f8f3
--- /dev/null
+++ b/pkgs/development/python-modules/multi_key_dict/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "multi_key_dict";
+  version = "2.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "17lkx4rf4waglwbhc31aak0f28c63zl3gx5k5i1iq2m3gb0xxsyy";
+  };
+
+  meta = with stdenv.lib; {
+    description = "multi_key_dict";
+    homepage = "https://github.com/formiaczek/multi_key_dict";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/munch/default.nix b/pkgs/development/python-modules/munch/default.nix
new file mode 100644
index 000000000000..490ff9033ed1
--- /dev/null
+++ b/pkgs/development/python-modules/munch/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "munch";
+  version = "2.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1420683a94f3a2ffc77935ddd28aa9ccb540dd02b75e02ed7ea863db437ab8b2";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A dot-accessible dictionary (a la JavaScript objects)";
+    license = licenses.mit;
+    homepage = https://github.com/Infinidat/munch;
+  };
+
+}
diff --git a/pkgs/development/python-modules/munkres/default.nix b/pkgs/development/python-modules/munkres/default.nix
new file mode 100644
index 000000000000..af69834dd6f6
--- /dev/null
+++ b/pkgs/development/python-modules/munkres/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "munkres";
+  version = "1.0.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c78f803b9b776bfb20a25c9c7bb44adbf0f9202c2024d51aa5969d21e560208d";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://bmc.github.com/munkres/;
+    description = "Munkres algorithm for the Assignment Problem";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/musicbrainzngs/default.nix b/pkgs/development/python-modules/musicbrainzngs/default.nix
new file mode 100644
index 000000000000..fd8cd516a922
--- /dev/null
+++ b/pkgs/development/python-modules/musicbrainzngs/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "musicbrainzngs";
+  version = "0.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "281388ab750d2996e9feca4580fd4215d616a698e02cd6719cb9b8562945c489";
+  };
+
+  buildInputs = [ pkgs.glibcLocales ];
+
+  LC_ALL="en_US.UTF-8";
+
+  meta = with stdenv.lib; {
+    homepage = http://alastair/python-musicbrainz-ngs;
+    description = "Python bindings for musicbrainz NGS webservice";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/mutag/default.nix b/pkgs/development/python-modules/mutag/default.nix
new file mode 100644
index 000000000000..3fbb36a37188
--- /dev/null
+++ b/pkgs/development/python-modules/mutag/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, isPy3k
+, pyparsing
+}:
+
+buildPythonPackage rec {
+  name = "mutag-0.0.2-2ffa0258ca";
+  disabled = ! isPy3k;
+
+  src = fetchgit {
+    url = "https://github.com/aroig/mutag.git";
+    sha256 = "0axdnwdypfd74a9dnw0g25m16xx1yygyl828xy0kpj8gyqdc6gb1";
+    rev = "2ffa0258cadaf79313241f43bf2c1caaf197d9c2";
+  };
+
+  propagatedBuildInputs = [ pyparsing ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/aroig/mutag;
+    description = "A script to change email tags in a mu indexed maildir";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/muttils/default.nix b/pkgs/development/python-modules/muttils/default.nix
new file mode 100644
index 000000000000..904284e5b332
--- /dev/null
+++ b/pkgs/development/python-modules/muttils/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "muttils";
+  version = "1.3";
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = https://www.blacktrash.org/hg/muttils/archive/8bb26094df06.tar.bz2;
+    sha256 = "1a4kxa0fpgg6rdj5p4kggfn8xpniqh8v5kbiaqc6wids02m7kag6";
+  };
+
+  # Tests don't work
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Utilities for use with console mail clients, like mutt";
+    homepage = https://www.blacktrash.org/hg/muttils;
+    license = licenses.gpl2Plus;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mwclient/default.nix b/pkgs/development/python-modules/mwclient/default.nix
index 186bc26f002f..3544bd631a54 100644
--- a/pkgs/development/python-modules/mwclient/default.nix
+++ b/pkgs/development/python-modules/mwclient/default.nix
@@ -23,8 +23,7 @@ buildPythonPackage rec {
 
   meta = with stdenv.lib; {
     description = "Python client library to the MediaWiki API";
-    maintainers = with maintainers; [ ];
     license = licenses.mit;
     homepage = https://github.com/mwclient/mwclient;
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/development/python-modules/mwlib-ext/default.nix b/pkgs/development/python-modules/mwlib-ext/default.nix
new file mode 100644
index 000000000000..cfcbdc2d0ac3
--- /dev/null
+++ b/pkgs/development/python-modules/mwlib-ext/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  version = "0.13.2";
+  pname = "mwlib.ext";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "9229193ee719568d482192d9d913b3c4bb96af7c589d6c31ed4a62caf5054278";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Dependencies for mwlib markup";
+    homepage = "http://pediapress.com/code/";
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mwlib-rl/default.nix b/pkgs/development/python-modules/mwlib-rl/default.nix
new file mode 100644
index 000000000000..21820d95c7fa
--- /dev/null
+++ b/pkgs/development/python-modules/mwlib-rl/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mwlib
+, mwlib-ext
+, pygments
+}:
+
+buildPythonPackage rec {
+  version = "0.14.5";
+  pname = "mwlib.rl";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "dddf9603ea0ca5aa87890217709eb5a5b16baeca547db3daad43c3ace73b6bc1";
+  };
+
+  buildInputs = [ mwlib mwlib-ext pygments ];
+
+  meta = with stdenv.lib; {
+    description = "Generate pdfs from mediawiki markup";
+    homepage = "http://pediapress.com/code/";
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/mwlib/default.nix b/pkgs/development/python-modules/mwlib/default.nix
new file mode 100644
index 000000000000..55a19e1a6da3
--- /dev/null
+++ b/pkgs/development/python-modules/mwlib/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, apipkg
+, bottle
+, gevent
+, lxml
+, odfpy
+, pillow
+, py
+, pyPdf
+, pyparsing
+, qserve
+, roman
+, simplejson
+, sqlite3dbm
+, timelib
+, pytest
+}:
+
+buildPythonPackage rec {
+  version = "0.16.1";
+  pname = "mwlib";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1dnmnkc21zdfaypskbpvkwl0wpkpn0nagj1fc338w64mbxrk8ny7";
+  };
+
+  propagatedBuildInputs = [ apipkg bottle gevent lxml odfpy pillow py pyPdf pyparsing qserve roman simplejson sqlite3dbm timelib ];
+
+  checkInputs = [ pytest ];
+
+  postPatch = ''
+    sed -i "s/odfpy>=0.9, <0.10/odfpy/" setup.py
+    sed -i "s/pyparsing>=1.4.11,<1.6/pyparsing/" setup.py
+  '';
+
+  checkPhase = ''
+    py.test
+  '';
+
+  # Tests are in build directory but we need extension modules that are in $out
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Library for parsing MediaWiki articles and converting them to different output formats";
+    homepage = "http://pediapress.com/code/";
+    license = licenses.bsd3;
+    # broken = true; # Requires different versions of packages
+  };
+
+}
diff --git a/pkgs/development/python-modules/mxnet/default.nix b/pkgs/development/python-modules/mxnet/default.nix
new file mode 100644
index 000000000000..317f79ebe081
--- /dev/null
+++ b/pkgs/development/python-modules/mxnet/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, pkgs
+, requests
+, numpy
+, graphviz
+, python
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  inherit (pkgs.mxnet) name version src meta;
+
+  buildInputs = [ pkgs.mxnet ];
+  propagatedBuildInputs = [ requests numpy graphviz ];
+
+  LD_LIBRARY_PATH = stdenv.lib.makeLibraryPath [ pkgs.mxnet ];
+
+  doCheck = !isPy3k;
+
+  postPatch = ''
+    substituteInPlace python/setup.py \
+    --replace "graphviz<0.9.0" "graphviz<0.10.0" \
+    --replace "numpy<=1.15.0" "numpy<1.16.0" \
+    --replace "requests<2.19.0" "requests<2.20.0"
+  '';
+
+  preConfigure = ''
+    cd python
+  '';
+
+  postInstall = ''
+    rm -rf $out/mxnet
+    ln -s ${pkgs.mxnet}/lib/libmxnet.so $out/${python.sitePackages}/mxnet
+  '';
+
+}
diff --git a/pkgs/development/python-modules/mysql_python/default.nix b/pkgs/development/python-modules/mysql_python/default.nix
new file mode 100644
index 000000000000..a38f7e02e1cd
--- /dev/null
+++ b/pkgs/development/python-modules/mysql_python/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, fetchPypi
+, nose
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "MySQL-python";
+  version = "1.2.5";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "0x0c2jg0bb3pp84njaqiic050qkyd7ymwhfvhipnimg58yv40441";
+  };
+
+  buildInputs = [ nose ];
+  propagatedBuildInputs = [ pkgs.mysql.connector-c ];
+
+  # plenty of failing tests
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "MySQL database binding for Python";
+    homepage = https://sourceforge.net/projects/mysql-python;
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/namebench/default.nix b/pkgs/development/python-modules/namebench/default.nix
new file mode 100644
index 000000000000..a930f250d80c
--- /dev/null
+++ b/pkgs/development/python-modules/namebench/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, buildPythonPackage
+, isPy3k
+, isPyPy
+, fetchurl
+, tkinter
+}:
+
+buildPythonPackage rec {
+  pname = "namebench";
+  version = "1.3.1";
+  disabled = isPy3k || isPyPy;
+
+  src = fetchurl {
+    url = "http://namebench.googlecode.com/files/${pname}-${version}-source.tgz";
+    sha256 = "09clbcd6wxgk4r6qw7hb78h818mvca7lijigy1mlq5y1f3lgkk1h";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  propagatedBuildInputs = [ tkinter ];
+
+  # namebench expects to be run from its own source tree (it uses relative
+  # paths to various resources), make it work.
+  postInstall = ''
+    sed -i "s|import os|import os; os.chdir(\"$out/namebench\")|" "$out/bin/namebench.py"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://namebench.googlecode.com/;
+    description = "Find fastest DNS servers available";
+    license = with licenses; [
+      asl20
+      # third-party program licenses (embedded in the sources)
+      "LGPL" # Crystal_Clear
+      free # dns
+      asl20 # graphy
+      "BSD" # jinja2
+    ];
+    longDescription = ''
+      It hunts down the fastest DNS servers available for your computer to
+      use. namebench runs a fair and thorough benchmark using your web
+      browser history, tcpdump output, or standardized datasets in order
+      to provide an individualized recommendation. namebench is completely
+      free and does not modify your system in any way.
+    '';
+  };
+
+}
diff --git a/pkgs/development/python-modules/nameparser/default.nix b/pkgs/development/python-modules/nameparser/default.nix
new file mode 100644
index 000000000000..a3e67fa7b985
--- /dev/null
+++ b/pkgs/development/python-modules/nameparser/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "nameparser";
+  version = "0.3.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1zi94m99ziwwd6kkip3w2xpnl05r2cfv9iq68inz7np81c3g8vag";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A simple Python module for parsing human names into their individual components";
+    homepage = https://github.com/derek73/python-nameparser;
+    license = licenses.lgpl21Plus;
+  };
+
+}
diff --git a/pkgs/development/python-modules/ncclient/default.nix b/pkgs/development/python-modules/ncclient/default.nix
index 9933e849d0be..24016ef8b104 100644
--- a/pkgs/development/python-modules/ncclient/default.nix
+++ b/pkgs/development/python-modules/ncclient/default.nix
@@ -12,11 +12,11 @@
 
 buildPythonPackage rec {
   pname = "ncclient";
-  version = "0.6.2";
+  version = "0.6.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6616828f9c5d318906dae22378a78342bbfa5983f1775c1af8bfecc779434c38";
+    sha256 = "3ab58ee0d71069cb5b0e2f29a4e605d1d8417bd10af45b73ee3e817fe389fadc";
   };
 
   checkInputs = [ nose rednose ];
diff --git a/pkgs/development/python-modules/ndg-httpsclient/default.nix b/pkgs/development/python-modules/ndg-httpsclient/default.nix
new file mode 100644
index 000000000000..780f2c330860
--- /dev/null
+++ b/pkgs/development/python-modules/ndg-httpsclient/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pyopenssl
+}:
+
+buildPythonPackage rec {
+  version = "0.4.2";
+  pname = "ndg-httpsclient";
+
+  propagatedBuildInputs = [ pyopenssl ];
+
+  src = fetchFromGitHub {
+    owner = "cedadev";
+    repo = "ndg_httpsclient";
+    rev = version;
+    sha256 = "1kk4knv029j0cicfiv23c1rayc1n3f1j3rhl0527gxiv0qv4jw8h";
+  };
+
+  # uses networking
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cedadev/ndg_httpsclient/;
+    description = "Provide enhanced HTTPS support for httplib and urllib2 using PyOpenSSL";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/netaddr/default.nix b/pkgs/development/python-modules/netaddr/default.nix
new file mode 100644
index 000000000000..eed3d758054b
--- /dev/null
+++ b/pkgs/development/python-modules/netaddr/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "netaddr";
+  version = "0.7.19";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+  buildInputs = [ pkgs.glibcLocales pytest ];
+
+  checkPhase = ''
+    py.test netaddr/tests
+  '';
+
+  patches = [
+    (pkgs.fetchpatch {
+      url = https://github.com/drkjam/netaddr/commit/2ab73f10be7069c9412e853d2d0caf29bd624012.patch;
+      sha256 = "0s1cdn9v5alpviabhcjmzc0m2pnpq9dh2fnnk2x96dnry1pshg39";
+    })
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/drkjam/netaddr/;
+    description = "A network address manipulation library for Python";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/netifaces/default.nix b/pkgs/development/python-modules/netifaces/default.nix
new file mode 100644
index 000000000000..8f762fb0c3d5
--- /dev/null
+++ b/pkgs/development/python-modules/netifaces/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.10.6";
+  pname = "netifaces";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1q7bi5k2r955rlcpspx4salvkkpk28jky67fjbpz2dkdycisak8c";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://alastairs-place.net/projects/netifaces/;
+    description = "Portable access to network interfaces from Python";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/neuronpy/default.nix b/pkgs/development/python-modules/neuronpy/default.nix
new file mode 100644
index 000000000000..1d258effda7d
--- /dev/null
+++ b/pkgs/development/python-modules/neuronpy/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, numpy
+, matplotlib
+, scipy
+, isPy27
+}:
+
+buildPythonPackage rec {
+  pname = "neuronpy";
+  version = "0.1.6";
+  disabled = !isPy27;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1clhc2b5fy2l8nfrji4dagmj9419nj6kam090yqxhq5c28sngk25";
+  };
+
+  propagatedBuildInputs = [ numpy matplotlib scipy ];
+
+  #No tests included
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Interfaces and utilities for the NEURON simulator and analysis of neural data";
+    maintainers = [ maintainers.nico202 ];
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nine/default.nix b/pkgs/development/python-modules/nine/default.nix
new file mode 100644
index 000000000000..a6b163ed456f
--- /dev/null
+++ b/pkgs/development/python-modules/nine/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "nine";
+  version = "0.3.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1zrsbm0hajfvklkhgysp81hy632a3bdakp31m0lcpd9xbp5265zy";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Let's write Python 3 right now!";
+    homepage = "https://github.com/nandoflorestan/nine";
+    license = licenses.free;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nipy/default.nix b/pkgs/development/python-modules/nipy/default.nix
new file mode 100644
index 000000000000..8ff7bbe24167
--- /dev/null
+++ b/pkgs/development/python-modules/nipy/default.nix
@@ -0,0 +1,49 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pythonOlder
+, nose
+, matplotlib
+, nibabel
+, numpy
+, scipy
+, sympy
+, python
+}:
+
+buildPythonPackage rec {
+  version = "0.4.0";
+  pname = "nipy";
+  disabled = pythonOlder "2.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1hnbn2i4fjxflaaz082s2c57hfp59jfra1zayz1iras5p2dy21nr";
+  };
+
+  buildInputs = stdenv.lib.optional doCheck [ nose ];
+  propagatedBuildInputs = [ matplotlib nibabel numpy scipy sympy ];
+
+  checkPhase = ''    # wants to be run in a different directory
+    mkdir nosetests
+    cd nosetests
+    ${python.interpreter} -c "import nipy; nipy.test()"
+    rm -rf .
+  '';
+
+  # failing test:
+  # nipy.algorithms.statistics.models.tests.test_olsR.test_results(11.593139639404727, 11.593140144880794, 6)  # disagrees by 1 at 6th decimal place
+  # erroring tests:
+  # nipy.modalities.fmri.fmristat.tests.test_FIAC.test_altprotocol
+  # nipy.modalities.fmri.fmristat.tests.test_FIAC.test_agreement
+  # nipy.tests.test_scripts.test_nipy_4d_realign   # because `nipy_4d_realign` script isn't found at test time; works from nix-shell, so could be patched
+  # nipy.tests.test_scripts.test_nipy_3_4d         # ditto re.: `nipy_3_4d` script
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://nipy.org/nipy/;
+    description = "Software for structural and functional neuroimaging analysis";
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nipype/default.nix b/pkgs/development/python-modules/nipype/default.nix
index a092123da826..3d8258aeb7bb 100644
--- a/pkgs/development/python-modules/nipype/default.nix
+++ b/pkgs/development/python-modules/nipype/default.nix
@@ -36,11 +36,11 @@ assert !isPy3k -> configparser != null;
 
 buildPythonPackage rec {
   pname = "nipype";
-  version = "1.1.2";
+  version = "1.1.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f2fe29bf863cb643bd5c8d2bdeaaf488308c293c9fb9913bc7a9504dc3bf8db6";
+    sha256 = "c14856f3d4823aa5d63d0c19e8f04d70c74e156361ce607d86694046bab06806";
   };
 
   # see https://github.com/nipy/nipype/issues/2240
diff --git a/pkgs/development/python-modules/nixpkgs/default.nix b/pkgs/development/python-modules/nixpkgs/default.nix
new file mode 100644
index 000000000000..71c142436d9f
--- /dev/null
+++ b/pkgs/development/python-modules/nixpkgs/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pbr
+, pythonix
+, pythonAtLeast
+}:
+
+buildPythonPackage rec {
+  pname = "nixpkgs";
+  version = "0.2.2";
+  disabled = ! pythonAtLeast "3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0gsrd99kkv99jsrh3hckz7ns1zwndi9vvh4465v4gnpz723dd6fj";
+  };
+
+  buildInputs = [ pbr ];
+  propagatedBuildInputs = [ pythonix ];
+
+  meta = with stdenv.lib; {
+    description = "Allows to `from nixpkgs import` stuff in interactive Python sessions";
+    homepage = http://github.com/t184256/nixpkgs-python-importer;
+    license = licenses.mit;
+    maintainers = with maintainers; [ t184256 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/nose-cover3/default.nix b/pkgs/development/python-modules/nose-cover3/default.nix
new file mode 100644
index 000000000000..273c0ab042f9
--- /dev/null
+++ b/pkgs/development/python-modules/nose-cover3/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "nose-cover3";
+  version = "0.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1la4hhc1yszjpcchvkqk5xmzlb2g1b3fgxj9wwc58qc549whlcc1";
+  };
+
+  propagatedBuildInputs = [ nose ];
+
+  # No tests included
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Coverage 3.x support for Nose";
+    homepage = https://github.com/ask/nosecover3;
+    license = licenses.lgpl21;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nose-cprof/default.nix b/pkgs/development/python-modules/nose-cprof/default.nix
new file mode 100644
index 000000000000..efafd6333dbb
--- /dev/null
+++ b/pkgs/development/python-modules/nose-cprof/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+
+buildPythonPackage rec {
+  pname = "nose-cprof";
+  version = "0.1.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ayy5mbjly9aa9dkgpz0l06flspnxmnj6wxdl6zr59byrrr8fqhw";
+  };
+
+  buildInputs = [ nose ];
+
+  meta = with stdenv.lib; {
+    description = "A python nose plugin to profile using cProfile rather than the default Hotshot profiler";
+    homepage = https://github.com/msherry/nose-cprof;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nose/default.nix b/pkgs/development/python-modules/nose/default.nix
new file mode 100644
index 000000000000..bec5156d22e0
--- /dev/null
+++ b/pkgs/development/python-modules/nose/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, python
+, coverage
+}:
+
+buildPythonPackage rec {
+  version = "1.3.7";
+  pname = "nose";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98";
+  };
+
+  propagatedBuildInputs = [ coverage ];
+
+  doCheck = false;  # lot's of transient errors, too much hassle
+  checkPhase = if python.is_py3k or false then ''
+    ${python}/bin/${python.executable} setup.py build_tests
+  '' else "" + ''
+    rm functional_tests/test_multiprocessing/test_concurrent_shared.py* # see https://github.com/nose-devs/nose/commit/226bc671c73643887b36b8467b34ad485c2df062
+    ${python}/bin/${python.executable} selftest.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A unittest-based testing framework for python that makes writing and running tests easier";
+    homepage = http://readthedocs.org/docs/nose/;
+    license = licenses.lgpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nose2/default.nix b/pkgs/development/python-modules/nose2/default.nix
new file mode 100644
index 000000000000..9d5c1675359e
--- /dev/null
+++ b/pkgs/development/python-modules/nose2/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "nose2";
+  version = "0.5.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0595rh6b6dncbj0jigsyrgrh6h8fsl6w1fr69h76mxv9nllv0rlr";
+  };
+
+  propagatedBuildInputs = [ six ];
+  # AttributeError: 'module' object has no attribute 'collector'
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "nose2 is the next generation of nicer testing for Python";
+    homepage = https://github.com/nose-devs/nose2;
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nosejs/default.nix b/pkgs/development/python-modules/nosejs/default.nix
new file mode 100644
index 000000000000..82c01e8643f9
--- /dev/null
+++ b/pkgs/development/python-modules/nosejs/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "NoseJS";
+  version = "0.9.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0qrhkd3sga56qf6k0sqyhwfcladwi05gl6aqmr0xriiq1sgva5dy";
+  };
+
+  buildInputs = [ nose ];
+
+  checkPhase = ''
+    nosetests -v
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://pypi.org/project/NoseJS/;
+    description = "A Nose plugin for integrating JavaScript tests into a Python test suite";
+    license = licenses.free;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nosexcover/default.nix b/pkgs/development/python-modules/nosexcover/default.nix
new file mode 100644
index 000000000000..aa238bce79ad
--- /dev/null
+++ b/pkgs/development/python-modules/nosexcover/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, coverage
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "nosexcover";
+  version = "1.0.10";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f5b3a7c936c4f703f15418c1f325775098184b69fa572f868edb8a99f8f144a8";
+  };
+
+  propagatedBuildInputs = [ coverage nose ];
+
+  meta = with stdenv.lib; {
+    description = "Extends nose.plugins.cover to add Cobertura-style XML reports";
+    homepage = https://github.com/cmheisel/nose-xcover/;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/notify/default.nix b/pkgs/development/python-modules/notify/default.nix
new file mode 100644
index 000000000000..f87424b439c6
--- /dev/null
+++ b/pkgs/development/python-modules/notify/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, fetchurl
+, python
+, pygobject2
+, pygtk
+, pkgs
+}:
+
+stdenv.mkDerivation rec {
+  name = "python-notify-${version}";
+  version = "0.1.1";
+
+  src = fetchurl {
+    url = http://www.galago-project.org/files/releases/source/notify-python/notify-python-0.1.1.tar.bz2;
+    sha256 = "1kh4spwgqxm534qlzzf2ijchckvs0pwjxl1irhicjmlg7mybnfvx";
+  };
+
+  patches = stdenv.lib.singleton (fetchurl {
+    name = "libnotify07.patch";
+    url = "http://src.fedoraproject.org/cgit/notify-python.git/plain/"
+        + "libnotify07.patch?id2=289573d50ae4838a1658d573d2c9f4c75e86db0c";
+    sha256 = "1lqdli13mfb59xxbq4rbq1f0znh6xr17ljjhwmzqb79jl3dig12z";
+  });
+
+  postPatch = ''
+    sed -i -e '/^PYGTK_CODEGEN/s|=.*|="${pygtk}/bin/pygtk-codegen-2.0"|' \
+      configure
+  '';
+
+  nativeBuildInputs = [ pkgs.pkgconfig ];
+  buildInputs = [ python pygobject2 pygtk pkgs.libnotify pkgs.glib pkgs.gtk2 pkgs.dbus-glib ];
+
+  postInstall = "cd $out/lib/python*/site-packages && ln -s gtk-*/pynotify .";
+
+  meta = with stdenv.lib; {
+    description = "Python bindings for libnotify";
+    homepage = http://www.galago-project.org/;
+    license = licenses.lgpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/notmuch/default.nix b/pkgs/development/python-modules/notmuch/default.nix
new file mode 100644
index 000000000000..207e59b85011
--- /dev/null
+++ b/pkgs/development/python-modules/notmuch/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, pkgs
+, python
+}:
+
+buildPythonPackage rec {
+  name = "python-${pkgs.notmuch.name}";
+
+  src = pkgs.notmuch.src;
+
+  sourceRoot = pkgs.notmuch.pythonSourceRoot;
+
+  buildInputs = [ python pkgs.notmuch ];
+
+  postPatch = ''
+    sed -i -e '/CDLL/s@"libnotmuch\.@"${pkgs.notmuch}/lib/libnotmuch.@' \
+      notmuch/globals.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python wrapper around notmuch";
+    homepage = https://notmuchmail.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ garbas ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ntfy/default.nix b/pkgs/development/python-modules/ntfy/default.nix
new file mode 100644
index 000000000000..5d54b0928b6f
--- /dev/null
+++ b/pkgs/development/python-modules/ntfy/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, appdirs
+, pyyaml
+, requests
+, dbus-python
+, emoji
+, sleekxmpp
+, mock
+}:
+
+buildPythonPackage rec {
+  version = "1.2.0";
+  pname = "ntfy";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy";
+    rev = "v${version}";
+    sha256 = "0yjxwisxpxy3vpnqk9nw5k3db3xx6wyf6sk1px9m94s30glcq2cc";
+  };
+
+  propagatedBuildInputs = [ appdirs pyyaml requests dbus-python emoji sleekxmpp mock ];
+
+  meta = with stdenv.lib; {
+    description = "A utility for sending notifications, on demand and when commands finish";
+    homepage = http://ntfy.rtfd.org/;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kamilchm ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/ntplib/default.nix b/pkgs/development/python-modules/ntplib/default.nix
new file mode 100644
index 000000000000..d6506ae4b4ad
--- /dev/null
+++ b/pkgs/development/python-modules/ntplib/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "ntplib";
+  version = "0.3.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c4621b64d50be9461d9bd9a71ba0b4af06fbbf818bbd483752d95c1a4e273ede";
+  };
+
+  # Require networking
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python NTP library";
+    homepage = http://code.google.com/p/ntplib/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/nuitka/default.nix b/pkgs/development/python-modules/nuitka/default.nix
new file mode 100644
index 000000000000..55eb4e7c97eb
--- /dev/null
+++ b/pkgs/development/python-modules/nuitka/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, vmprof
+, pyqt4
+, scons
+, isPyPy
+, pkgs
+}:
+
+let
+  # scons is needed but using it requires Python 2.7
+  # Therefore we create a separate env for it.
+  scons = pkgs.python27.withPackages(ps: [ pkgs.scons ]);
+in buildPythonPackage rec {
+  version = "0.5.25";
+  pname = "Nuitka";
+
+  # Latest version is not yet on PyPi
+  src = fetchurl {
+    url = "https://github.com/kayhayen/Nuitka/archive/${version}.tar.gz";
+    sha256 = "11psz0pyj56adv4b3f47hl8jakvp2mc2c85s092a5rsv1la1a0aa";
+  };
+
+  buildInputs = stdenv.lib.optionals doCheck [ vmprof pyqt4 ];
+
+  propagatedBuildInputs = [ scons ];
+
+  postPatch = ''
+    patchShebangs tests/run-tests
+  '' + stdenv.lib.optionalString stdenv.isLinux ''
+    substituteInPlace nuitka/plugins/standard/ImplicitImports.py --replace 'locateDLL("uuid")' '"${pkgs.utillinux.out}/lib/libuuid.so"'
+  '';
+
+  # We do not want any wrappers here.
+  postFixup = '''';
+
+  checkPhase = ''
+    tests/run-tests
+  '';
+
+  # Problem with a subprocess (parts)
+  doCheck = false;
+
+  # Requires CPython
+  disabled = isPyPy;
+
+  meta = with stdenv.lib; {
+    description = "Python compiler with full language support and CPython compatibility";
+    license = licenses.asl20;
+    homepage = http://nuitka.net/;
+  };
+
+}
diff --git a/pkgs/development/python-modules/numpy/default.nix b/pkgs/development/python-modules/numpy/default.nix
index c66650c0abf2..87428f4563d9 100644
--- a/pkgs/development/python-modules/numpy/default.nix
+++ b/pkgs/development/python-modules/numpy/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "numpy";
-  version = "1.15.1";
+  version = "1.15.2";
 
   src = fetchPypi {
     inherit pname version;
     extension = "zip";
-    sha256 = "7b9e37f194f8bcdca8e9e6af92e2cbad79e360542effc2dd6b98d63955d8d8a3";
+    sha256 = "27a0d018f608a3fe34ac5e2b876f4c23c47e38295c47dd0775cc294cd2614bc1";
   };
 
   disabled = isPyPy;
diff --git a/pkgs/development/python-modules/nxt-python/default.nix b/pkgs/development/python-modules/nxt-python/default.nix
new file mode 100644
index 000000000000..c9b523a266b9
--- /dev/null
+++ b/pkgs/development/python-modules/nxt-python/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, isPy3k
+, pyusb
+, pybluez
+, pyfantom
+, git
+}:
+
+buildPythonPackage rec {
+  version = "unstable-20160819";
+  pname = "nxt-python";
+  disabled = isPy3k;
+
+  src = fetchgit {
+    url = "http://github.com/Eelviny/nxt-python";
+    rev = "479e20b7491b28567035f4cee294c4a2af629297";
+    sha256 = "0mcsajhgm2wy4iy2lhmyi3xibgmbixbchanzmlhsxk6qyjccn9r9";
+    branchName= "pyusb";
+  };
+
+  propagatedBuildInputs = [ pyusb pybluez pyfantom git ];
+
+  # Tests fail on Mac dependency
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python driver/interface for Lego Mindstorms NXT robot";
+    homepage = https://github.com/Eelviny/nxt-python;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ leenaars ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/oauth/default.nix b/pkgs/development/python-modules/oauth/default.nix
new file mode 100644
index 000000000000..a8e5c8bf53d2
--- /dev/null
+++ b/pkgs/development/python-modules/oauth/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "oauth";
+  version = "1.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0pdgi35hczsslil4890xqawnbpdazkgf2v1443847h5hy2gq2sg7";
+  };
+
+  # No tests included in archive
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://code.google.com/p/oauth;
+    description = "Library for OAuth version 1.0a";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/oauth2/default.nix b/pkgs/development/python-modules/oauth2/default.nix
new file mode 100644
index 000000000000..e01ef7c902d9
--- /dev/null
+++ b/pkgs/development/python-modules/oauth2/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, httplib2
+, mock
+, coverage
+}:
+
+buildPythonPackage rec {
+  pname = "oauth2";
+  version = "1.9.0.post1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c006a85e7c60107c7cc6da1b184b5c719f6dd7202098196dfa6e55df669b59bf";
+  };
+
+  propagatedBuildInputs = [ httplib2 ];
+  buildInputs = [ mock coverage ];
+
+  # ServerNotFoundError: Unable to find the server at oauth-sandbox.sevengoslings.net
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/simplegeo/python-oauth2";
+    description = "Library for OAuth version 1.0";
+    license = licenses.mit;
+    maintainers = with maintainers; [ garbas ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/oauth2client/default.nix b/pkgs/development/python-modules/oauth2client/default.nix
index 81742a99da8d..8500b53b244c 100644
--- a/pkgs/development/python-modules/oauth2client/default.nix
+++ b/pkgs/development/python-modules/oauth2client/default.nix
@@ -3,11 +3,11 @@
 
 buildPythonPackage rec {
   pname = "oauth2client";
-  version = "4.1.2";
+  version = "4.1.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bd3062c06f8b10c6ef7a890b22c2740e5f87d61b6e1f4b1c90d069cdfc9dadb5";
+    sha256 = "d486741e451287f69568a4d26d70d9acd73a2bbfa275746c535b4209891cccc6";
   };
 
   propagatedBuildInputs = [ six httplib2 pyasn1-modules rsa ];
diff --git a/pkgs/development/python-modules/oauthlib/default.nix b/pkgs/development/python-modules/oauthlib/default.nix
new file mode 100644
index 000000000000..61259764becf
--- /dev/null
+++ b/pkgs/development/python-modules/oauthlib/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, mock
+, nose
+, unittest2
+, cryptography
+, blinker
+, pyjwt
+}:
+
+buildPythonPackage rec {
+  version = "2.0.0";
+  pname = "oauthlib";
+
+  src = fetchurl {
+    url = "https://github.com/idan/oauthlib/archive/v${version}.tar.gz";
+    sha256 = "02b645a8rqh4xfs1cmj8sss8wqppiadd1ndq3av1cdjz2frfqcjf";
+  };
+
+  buildInputs = [ mock nose unittest2 ];
+  propagatedBuildInputs = [ cryptography blinker pyjwt ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/idan/oauthlib;
+    downloadPage = https://github.com/idan/oauthlib/releases;
+    description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic";
+    maintainers = with maintainers; [ prikhi ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/obfsproxy/default.nix b/pkgs/development/python-modules/obfsproxy/default.nix
new file mode 100644
index 000000000000..2f435201d21d
--- /dev/null
+++ b/pkgs/development/python-modules/obfsproxy/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, pyptlib
+, argparse
+, twisted
+, pycrypto
+, pyyaml
+}:
+
+buildPythonPackage rec {
+  pname = "obfsproxy";
+  version = "0.2.13";
+
+  src = fetchgit {
+    url = meta.repositories.git;
+    rev = "refs/tags/${pname}-${version}";
+    sha256 = "04ja1cl8xzqnwrd2gi6nlnxbmjri141bzwa5gybvr44d8h3k2nfa";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "version=versioneer.get_version()" "version='${version}'"
+    substituteInPlace setup.py --replace "argparse" ""
+  '';
+
+  propagatedBuildInputs = [ pyptlib argparse twisted pycrypto pyyaml ];
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A pluggable transport proxy";
+    homepage = https://www.torproject.org/projects/obfsproxy;
+    repositories.git = https://git.torproject.org/pluggable-transports/obfsproxy.git;
+    maintainers = with maintainers; [ phreedom thoughtpolice ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/objgraph/default.nix b/pkgs/development/python-modules/objgraph/default.nix
new file mode 100644
index 000000000000..6d26d71141dc
--- /dev/null
+++ b/pkgs/development/python-modules/objgraph/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "objgraph";
+  version = "2.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "841de52715774ec1d0e97d9b4462d6e3e10406155f9b61f54ba7db984c45442a";
+  };
+
+  # Tests fail with PyPy.
+  disabled = isPyPy;
+
+  propagatedBuildInputs = [pkgs.graphviz];
+
+  meta = with stdenv.lib; {
+    description = "Draws Python object reference graphs with graphviz";
+    homepage = https://mg.pov.lt/objgraph/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/offtrac/default.nix b/pkgs/development/python-modules/offtrac/default.nix
new file mode 100644
index 000000000000..e098ecc8c31d
--- /dev/null
+++ b/pkgs/development/python-modules/offtrac/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "offtrac";
+  version = "0.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "06vd010pa1z7lyfj1na30iqzffr4kzj2k2sba09spik7drlvvl56";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://fedorahosted.org/offtrac;
+    description = "Trac xmlrpc library";
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/openant/default.nix b/pkgs/development/python-modules/openant/default.nix
new file mode 100644
index 000000000000..9b88a71c5cc0
--- /dev/null
+++ b/pkgs/development/python-modules/openant/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pyusb
+}:
+
+buildPythonPackage rec {
+  pname = "openant-unstable";
+  version = "2017-02-11";
+
+  src = fetchFromGitHub {
+    owner = "Tigge";
+    repo = "openant";
+    rev = "ed89281e37f65d768641e87356cef38877952397";
+    sha256 = "1g81l9arqdy09ijswn3sp4d6i3z18d44lzyb78bwnvdb14q22k19";
+  };
+
+  # Removes some setup.py hacks intended to install udev rules.
+  # We do the job ourselves in postInstall below.
+  postPatch = ''
+    sed -i -e '/cmdclass=.*/d' setup.py
+  '';
+
+  postInstall = ''
+    install -dm755 "$out/etc/udev/rules.d"
+    install -m644 resources/ant-usb-sticks.rules "$out/etc/udev/rules.d/99-ant-usb-sticks.rules"
+  '';
+
+  propagatedBuildInputs = [ pyusb ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/Tigge/openant";
+    description = "ANT and ANT-FS Python Library";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/openpyxl/default.nix b/pkgs/development/python-modules/openpyxl/default.nix
index 6445201c40b4..034fa8e67917 100644
--- a/pkgs/development/python-modules/openpyxl/default.nix
+++ b/pkgs/development/python-modules/openpyxl/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "openpyxl";
-  version = "2.5.6";
+  version = "2.5.8";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "04091e034911a0afc531c3a15e5ae0b1b6a43654dbf63c187f47d20cdfefac1c";
+    sha256 = "22904d7bdfaaab33d65d50a0915a65eeb2f29c85d9ec53081563850678a29927";
   };
 
   checkInputs = [ pytest ];
diff --git a/pkgs/development/python-modules/ordered-set/default.nix b/pkgs/development/python-modules/ordered-set/default.nix
index 4044ad3f2fd1..233a4d44c437 100644
--- a/pkgs/development/python-modules/ordered-set/default.nix
+++ b/pkgs/development/python-modules/ordered-set/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "ordered-set";
-  version = "3.0.1";
+  version = "3.0.2";
 
   buildInputs = [ pytest pytestrunner ];
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0yyfkkfzpwlx4jlfqzb7p1xpzmn2jyzq2qlakqx62pxizfzxfvrx";
+    sha256 = "7d292b866fa44f339ac6e624e3d338accfb415ce0a8431595d51990fbdf61d3b";
   };
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/ordereddict/default.nix b/pkgs/development/python-modules/ordereddict/default.nix
new file mode 100644
index 000000000000..27bdd728bbe6
--- /dev/null
+++ b/pkgs/development/python-modules/ordereddict/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "ordereddict";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "07qvy11nvgxpzarrni3wrww3vpc9yafgi2bch4j2vvvc42nb8d8w";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A drop-in substitute for Py2.7's new collections.OrderedDict that works in Python 2.4-2.6";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ garbas ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/osc/default.nix b/pkgs/development/python-modules/osc/default.nix
new file mode 100644
index 000000000000..87bd6ee258c0
--- /dev/null
+++ b/pkgs/development/python-modules/osc/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+, pkgs
+, urlgrabber
+, m2crypto
+, pyyaml
+, lxml
+}:
+
+buildPythonPackage {
+  pname = "osc";
+  version = "0.162.0-55-gb730f88";
+  disabled = isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "osc";
+    rev = "b730f880cfe85a8547f569355a21706f27ebfa78";
+    sha256 = "0hh9j5zd2kc0804d2jmf1q3w5xm9l9s69hhgysbncrv5fw0414lh";
+  };
+
+  buildInputs = [ pkgs.bashInteractive ]; # needed for bash-completion helper
+  propagatedBuildInputs = [ urlgrabber m2crypto pyyaml lxml ];
+
+  postInstall = ''
+    ln -s $out/bin/osc-wrapper.py $out/bin/osc
+    install -D -m444 osc.fish $out/etc/fish/completions/osc.fish
+    install -D -m555 dist/osc.complete $out/share/bash-completion/helpers/osc-helper
+    mkdir -p $out/share/bash-completion/completions
+    cat >>$out/share/bash-completion/completions/osc <<EOF
+    test -z "\$BASH_VERSION" && return
+    complete -o default _nullcommand >/dev/null 2>&1 || return
+    complete -r _nullcommand >/dev/null 2>&1         || return
+    complete -o default -C $out/share/bash-completion/helpers/osc-helper osc
+    EOF
+  '';
+
+  meta = with stdenv.lib; {
+    description = "opensuse-commander with svn like handling";
+    maintainers = [ maintainers.peti ];
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pamela/default.nix b/pkgs/development/python-modules/pamela/default.nix
new file mode 100644
index 000000000000..05254e4fd43e
--- /dev/null
+++ b/pkgs/development/python-modules/pamela/default.nix
@@ -0,0 +1,30 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "pamela";
+  version = "0.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ssxbqsshrm8p642g3h6wsq20z1fsqhpdvqdm827gn6dlr38868y";
+  };
+
+  postUnpack = ''
+    substituteInPlace $sourceRoot/pamela.py --replace \
+      'find_library("pam")' \
+      '"${stdenv.lib.getLib pkgs.pam}/lib/libpam.so"'
+  '';
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "PAM interface using ctypes";
+    homepage = "https://github.com/minrk/pamela";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/paramiko/default.nix b/pkgs/development/python-modules/paramiko/default.nix
new file mode 100644
index 000000000000..e41ec9689d28
--- /dev/null
+++ b/pkgs/development/python-modules/paramiko/default.nix
@@ -0,0 +1,48 @@
+{ pkgs
+, buildPythonPackage
+, fetchPypi
+, cryptography
+, bcrypt
+, pynacl
+, pyasn1
+, python
+, pytest
+, pytest-relaxed
+, mock
+, isPyPy
+, isPy33
+}:
+
+buildPythonPackage rec {
+  pname = "paramiko";
+  version = "2.4.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a8975a7df3560c9f1e2b43dc54ebd40fd00a7017392ca5445ce7df409f900fcb";
+  };
+
+  checkInputs = [ pytest mock pytest-relaxed ];
+  propagatedBuildInputs = [ bcrypt cryptography pynacl pyasn1 ];
+
+  __darwinAllowLocalNetworking = true;
+
+  # 2 sftp tests fail (skip for now)
+  checkPhase = ''
+    pytest tests --ignore=tests/test_sftp.py
+  '';
+
+  meta = with pkgs.lib; {
+    homepage = "https://github.com/paramiko/paramiko/";
+    description = "Native Python SSHv2 protocol library";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ aszlig ];
+
+    longDescription = ''
+      This is a library for making SSH2 connections (client or server).
+      Emphasis is on using SSH2 as an alternative to SSL for making secure
+      connections between python scripts. All major ciphers and hash methods
+      are supported. SFTP client and server mode are both supported too.
+    '';
+  };
+}
diff --git a/pkgs/development/python-modules/paramz/default.nix b/pkgs/development/python-modules/paramz/default.nix
index 718393b5e1e1..f537b8d8e314 100644
--- a/pkgs/development/python-modules/paramz/default.nix
+++ b/pkgs/development/python-modules/paramz/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "paramz";
-  version = "0.9.2";
+  version = "0.9.4";
   name  = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7b38c2487602c423ac402214c3b3fa6bbe22b294e2f9e5f9f3842182e1541599";
+    sha256 = "179ca77a965e6e724217257793e3c8c022285ea2190a85e0826ac98dea316219";
   };
 
   propagatedBuildInputs = [ numpy scipy six decorator ];
diff --git a/pkgs/development/python-modules/path-and-address/default.nix b/pkgs/development/python-modules/path-and-address/default.nix
new file mode 100644
index 000000000000..55d7afd9fa46
--- /dev/null
+++ b/pkgs/development/python-modules/path-and-address/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pytest
+}:
+
+buildPythonPackage rec {
+  version = "2.0.1";
+  pname = "path-and-address";
+
+  src = fetchFromGitHub {
+    owner = "joeyespo";
+    repo = "path-and-address";
+    rev = "v${version}";
+    sha256 = "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6";
+  };
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Functions for server CLI applications used by humans";
+    homepage = https://github.com/joeyespo/path-and-address;
+    license = licenses.mit;
+    maintainers = with maintainers; [ koral];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pathspec/default.nix b/pkgs/development/python-modules/pathspec/default.nix
index 15ff1b322415..39a2789a360f 100644
--- a/pkgs/development/python-modules/pathspec/default.nix
+++ b/pkgs/development/python-modules/pathspec/default.nix
@@ -5,12 +5,12 @@
 
 buildPythonPackage rec {
   pname   = "pathspec";
-  version = "0.5.7";
+  version = "0.5.9";
   name    = "${pname}-${version}";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "69ac7869c9ce308cfe631e29c09f9da60fae02baf31418885bbbb0c75adcd8c5";
+    sha256 = "54a5eab895d89f342b52ba2bffe70930ef9f8d96e398cccf530d21fa0516a873";
   };
 
   meta = {
diff --git a/pkgs/development/python-modules/pathtools/default.nix b/pkgs/development/python-modules/pathtools/default.nix
new file mode 100644
index 000000000000..8709662e6a18
--- /dev/null
+++ b/pkgs/development/python-modules/pathtools/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "pathtools";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Pattern matching and various utilities for file systems paths";
+    homepage = https://github.com/gorakhargosh/pathtools;
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/paver/default.nix b/pkgs/development/python-modules/paver/default.nix
new file mode 100644
index 000000000000..acdb68c0281d
--- /dev/null
+++ b/pkgs/development/python-modules/paver/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, cogapp
+, mock
+, virtualenv
+}:
+
+buildPythonPackage rec {
+  version = "1.2.2";
+  pname   = "Paver";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0lix9d33ndb3yk56sm1zlj80fbmxp0w60yk0d9pr2xqxiwi88sqy";
+  };
+
+  buildInputs = [ cogapp mock virtualenv ];
+
+  propagatedBuildInputs = [ nose ];
+
+  # the tests do not pass
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A Python-based build/distribution/deployment scripting tool";
+    homepage    = https://github.com/paver/paver;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.unix;
+  };
+
+}
diff --git a/pkgs/development/python-modules/peppercorn/default.nix b/pkgs/development/python-modules/peppercorn/default.nix
new file mode 100644
index 000000000000..5a07fc217a95
--- /dev/null
+++ b/pkgs/development/python-modules/peppercorn/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "peppercorn";
+  version = "0.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "921cba5d51fa211e6da0fbd2120b9a98d663422a80f5bb669ad81ffb0909774b";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A library for converting a token stream into a data structure for use in web form posts";
+    homepage = https://docs.pylonsproject.org/projects/peppercorn/en/latest/;
+    maintainers = with maintainers; [ garbas domenkozar ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pex/default.nix b/pkgs/development/python-modules/pex/default.nix
new file mode 100644
index 000000000000..f7efec5c70ef
--- /dev/null
+++ b/pkgs/development/python-modules/pex/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "pex";
+  version = "1.2.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1m0gx9182w1dybkyjwwjyd6i87x2dzv252ks2fj8yn6avlcp5z4q";
+  };
+
+  prePatch = ''
+    substituteInPlace setup.py --replace 'SETUPTOOLS_REQUIREMENT,' '"setuptools"'
+  '';
+
+  # A few more dependencies I don't want to handle right now...
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "A library and tool for generating .pex (Python EXecutable) files";
+    homepage = "https://github.com/pantsbuild/pex";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/phonenumbers/default.nix b/pkgs/development/python-modules/phonenumbers/default.nix
index a6ca8fae7cbd..01c387928f59 100644
--- a/pkgs/development/python-modules/phonenumbers/default.nix
+++ b/pkgs/development/python-modules/phonenumbers/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "phonenumbers";
-  version = "8.9.12";
+  version = "8.9.15";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "39cd0c67a17a9ca4c2851ab8fad5272948d811ccd2a8e52ddcc8d275a802af70";
+    sha256 = "8e9664ce0a838c81f4fb3e4d271c76859d26bde57242d64fe1632ab636f5319f";
   };
 
   meta = {
diff --git a/pkgs/development/python-modules/pillowfight/default.nix b/pkgs/development/python-modules/pillowfight/default.nix
new file mode 100644
index 000000000000..e32051bc26f9
--- /dev/null
+++ b/pkgs/development/python-modules/pillowfight/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pillow
+}:
+
+buildPythonPackage rec {
+  pname = "pillowfight";
+  version = "0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1mh1nhcjjgv7x134sv0krri59ng8bp2w6cwsxc698rixba9f3g0m";
+  };
+
+  propagatedBuildInputs = [ pillow ];
+
+  meta = with stdenv.lib; {
+    description = "Pillow Fight";
+    homepage = "https://github.com/beanbaginc/pillowfight";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pint/default.nix b/pkgs/development/python-modules/pint/default.nix
new file mode 100644
index 000000000000..74b6dd78bb35
--- /dev/null
+++ b/pkgs/development/python-modules/pint/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "pint";
+  version = "0.7.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1bbp5s34gcb9il2wyz4spznshahwbjvwi5bhjm7bnxk358spvf9q";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Physical quantities module";
+    license = licenses.bsd3;
+    homepage = "https://github.com/hgrecco/pint/";
+  };
+
+}
diff --git a/pkgs/development/python-modules/pip/default.nix b/pkgs/development/python-modules/pip/default.nix
index f5732d2cb953..7fc5adee7fbc 100644
--- a/pkgs/development/python-modules/pip/default.nix
+++ b/pkgs/development/python-modules/pip/default.nix
@@ -10,11 +10,11 @@
 
 buildPythonPackage rec {
   pname = "pip";
-  version = "18.0";
+  version = "18.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a0e11645ee37c90b40c46d607070c4fd583e2cd46231b1c06e389c5e814eed76";
+    sha256 = "c0a292bd977ef590379a3f05d7b7f65135487b67470f6281289a94e015650ea1";
   };
 
   # pip detects that we already have bootstrapped_pip "installed", so we need
diff --git a/pkgs/development/python-modules/plyvel/default.nix b/pkgs/development/python-modules/plyvel/default.nix
new file mode 100644
index 000000000000..21561fab0351
--- /dev/null
+++ b/pkgs/development/python-modules/plyvel/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, pytest
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "plyvel";
+  version = "0.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1scq75qyks9vmjd19bx57f2y60mkdr44ajvb12p3cjg439l96zaq";
+  };
+
+  buildInputs = [ pkgs.leveldb ] ++ stdenv.lib.optional isPy3k pytest;
+
+  # no tests for python2
+  doCheck = isPy3k;
+
+  meta = with stdenv.lib; {
+    description = "Fast and feature-rich Python interface to LevelDB";
+    homepage = https://github.com/wbolster/plyvel;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pocket/default.nix b/pkgs/development/python-modules/pocket/default.nix
new file mode 100644
index 000000000000..e351d26ca481
--- /dev/null
+++ b/pkgs/development/python-modules/pocket/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "pocket";
+  version = "0.3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1fc9vc5nyzf1kzmnrs18dmns7nn8wjfrg7br1w4c5sgs35mg2ywh";
+  };
+
+  buildInputs = [ requests ];
+
+  meta = with stdenv.lib; {
+    description = "Wrapper for the pocket API";
+    homepage    = "https://github.com/tapanpandita/pocket";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ ericsagnes ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/poezio/fix_gnupg_import.patch b/pkgs/development/python-modules/poezio/fix_gnupg_import.patch
deleted file mode 100644
index d75e09b722bf..000000000000
--- a/pkgs/development/python-modules/poezio/fix_gnupg_import.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Nur poezio-0.10.orig/plugins/gpg/__init__.py poezio-0.10/plugins/gpg/__init__.py
---- poezio-0.10.orig/plugins/gpg/__init__.py	2016-07-27 19:02:41.000000000 +0200
-+++ poezio-0.10/plugins/gpg/__init__.py	2016-11-16 14:17:06.011128631 +0100
-@@ -105,7 +105,7 @@
- .. _XEP-0027: http://xmpp.org/extensions/xep-0027.html
- 
- """
--from gpg import gnupg
-+import slixmpp.thirdparty.gnupg as gnupg
- from slixmpp.xmlstream.stanzabase import JID
- 
- from xml.etree import cElementTree as ET
diff --git a/pkgs/development/python-modules/poyo/default.nix b/pkgs/development/python-modules/poyo/default.nix
new file mode 100644
index 000000000000..5a05f2dcafa4
--- /dev/null
+++ b/pkgs/development/python-modules/poyo/default.nix
@@ -0,0 +1,21 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "0.4.0";
+  pname = "poyo";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1f48ffl0j1f2lmgabajps7v8w90ppxbp5168gh8kh27bjd8xk5ca";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/hackebrot/poyo;
+    description = "A lightweight YAML Parser for Python";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pudb/default.nix b/pkgs/development/python-modules/pudb/default.nix
new file mode 100644
index 000000000000..0c76974e5d99
--- /dev/null
+++ b/pkgs/development/python-modules/pudb/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pygments
+, urwid
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "pudb";
+  version = "2016.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0njhi49d9fxbwh5p8yjx8m3jlfyzfm00b5aff6bz473pn7vxfn79";
+  };
+
+  propagatedBuildInputs = [ pygments urwid ];
+
+  # Tests fail on python 3 due to writes to the read-only home directory
+  doCheck = !isPy3k;
+
+  meta = with stdenv.lib; {
+    description = "A full-screen, console-based Python debugger";
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyaxmlparser/default.nix b/pkgs/development/python-modules/pyaxmlparser/default.nix
index 7f9cbf9518e3..9f4f6627e2c8 100644
--- a/pkgs/development/python-modules/pyaxmlparser/default.nix
+++ b/pkgs/development/python-modules/pyaxmlparser/default.nix
@@ -1,12 +1,12 @@
 { buildPythonPackage, stdenv, lxml, click, fetchPypi }:
 
 buildPythonPackage rec {
-  version = "0.3.10";
+  version = "0.3.11";
   pname = "pyaxmlparser";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5c1f569f4dc2232d7f146eb190bc513373ff6555f97ae904740f966f0fb2dd77";
+    sha256 = "dbe5ca9ddcf2f5041f6e5e3acc81d2940c696db89de4f840535a256e78f5e489";
   };
 
   propagatedBuildInputs = [ lxml click ];
diff --git a/pkgs/development/python-modules/pybluez/default.nix b/pkgs/development/python-modules/pybluez/default.nix
new file mode 100644
index 000000000000..6ceca20fdd17
--- /dev/null
+++ b/pkgs/development/python-modules/pybluez/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, pkgs
+}:
+
+buildPythonPackage rec {
+  version = "unstable-20160819";
+  pname = "pybluez";
+
+  propagatedBuildInputs = [ pkgs.bluez ];
+
+  src = fetchFromGitHub {
+    owner = "karulis";
+    repo = "${pname}";
+    rev = "a0b226a61b166e170d48539778525b31e47a4731";
+    sha256 = "104dm5ngfhqisv1aszdlr3szcav2g3bhsgzmg4qfs09b3i5zj047";
+  };
+
+  # the tests do not pass
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Bluetooth Python extension module";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ leenaars ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pycallgraph/default.nix b/pkgs/development/python-modules/pycallgraph/default.nix
new file mode 100644
index 000000000000..9a6a3f4be2e9
--- /dev/null
+++ b/pkgs/development/python-modules/pycallgraph/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "pycallgraph";
+  version = "1.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0w8yr43scnckqcv5nbyd2dq4kpv74ai856lsdsf8iniik07jn9mi";
+  };
+
+  buildInputs = [ pytest ];
+
+  # Tests do not work due to this bug: https://github.com/gak/pycallgraph/issues/118
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://pycallgraph.slowchop.com;
+    description = "Call graph visualizations for Python applications";
+    maintainers = with maintainers; [ auntie ];
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pycares/default.nix b/pkgs/development/python-modules/pycares/default.nix
new file mode 100644
index 000000000000..bf863fae57b9
--- /dev/null
+++ b/pkgs/development/python-modules/pycares/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "pycares";
+  version = "1.0.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a18341ea030e2cc0743acdf4aa72302bdf6b820938b36ce4bd76e43faa2276a3";
+  };
+
+  propagatedBuildInputs = [ pkgs.c-ares ];
+
+  # No tests included
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/saghul/pycares;
+    description = "Interface for c-ares";
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pycountry/default.nix b/pkgs/development/python-modules/pycountry/default.nix
new file mode 100644
index 000000000000..90d573aaaa77
--- /dev/null
+++ b/pkgs/development/python-modules/pycountry/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+,
+}:
+
+buildPythonPackage rec {
+  pname = "pycountry";
+  version = "1.17";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1qvhq0c9xsh6d4apcvjphfzl6xnwhnk4jvhr8x2fdfnmb034lc26";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = https://bitbucket.org/flyingcircus/pycountry;
+    description = "ISO country, subdivision, language, currency and script definitions and their translations";
+    license = licenses.lgpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pycuda/default.nix b/pkgs/development/python-modules/pycuda/default.nix
index 2d1da5339af5..5f58101a8b53 100644
--- a/pkgs/development/python-modules/pycuda/default.nix
+++ b/pkgs/development/python-modules/pycuda/default.nix
@@ -22,11 +22,11 @@ let
 in
 buildPythonPackage rec {
   pname = "pycuda";
-  version = "2018.1";
+  version = "2018.1.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "7079f7738e83ee79ae26f0827ada29fe55921fec9760201199cc2bfb69446c92";
+    sha256 = "49d575fca3fd3c95467c3b0fb51967ad17d0c4cc18e078a6748309af4de36a8d";
   };
 
   preConfigure = ''
diff --git a/pkgs/development/python-modules/pyfribidi/default.nix b/pkgs/development/python-modules/pyfribidi/default.nix
new file mode 100644
index 000000000000..a5caca40650d
--- /dev/null
+++ b/pkgs/development/python-modules/pyfribidi/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  version = "0.11.0";
+  pname = "pyfribidi";
+  disabled = isPy3k || isPyPy;
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "6f7d83c09eae0cb98a40b85ba3dedc31af4dbff8fc4425f244c1e9f44392fded";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A simple wrapper around fribidi";
+    homepage = https://github.com/pediapress/pyfribidi;
+    license = stdenv.lib.licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pygal/default.nix b/pkgs/development/python-modules/pygal/default.nix
new file mode 100644
index 000000000000..d1a25caabbee
--- /dev/null
+++ b/pkgs/development/python-modules/pygal/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+, flask
+, pyquery
+, pytest
+, cairosvg
+, tinycss
+, cssselect
+, lxml
+}:
+
+buildPythonPackage rec {
+  pname = "pygal";
+  version = "2.3.1";
+
+  doCheck = !isPyPy;  # one check fails with pypy
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7ba5a191233d0c2d8bf4b4d26b06e42bd77483a59ba7d3e5b884d81d1a870667";
+  };
+
+  buildInputs = [ flask pyquery pytest ];
+  propagatedBuildInputs = [ cairosvg tinycss cssselect ]
+    ++ stdenv.lib.optionals (!isPyPy) [ lxml ];
+
+  meta = with stdenv.lib; {
+    description = "Sexy and simple python charting";
+    homepage = http://www.pygal.org;
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ sjourdois ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyhepmc/default.nix b/pkgs/development/python-modules/pyhepmc/default.nix
new file mode 100644
index 000000000000..e776749dd7ef
--- /dev/null
+++ b/pkgs/development/python-modules/pyhepmc/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, fetchurl
+, pkgs
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "pyhepmc";
+  version = "0.5.0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1rbi8gqgclfvaibv9kzhfis11gw101x8amc93qf9y08ny4jfyr1d";
+  };
+
+  patches = [
+    # merge PR https://bitbucket.org/andybuckley/pyhepmc/pull-requests/1/add-incoming-outgoing-generators-for/diff
+    ./pyhepmc_export_edges.patch
+    # add bindings to Flow class
+    ./pyhepmc_export_flow.patch
+  ];
+
+  # regenerate python wrapper
+  preConfigure = ''
+    rm hepmc/hepmcwrap.py
+    swig -c++ -I${pkgs.hepmc}/include -python hepmc/hepmcwrap.i
+  '';
+
+  buildInputs = [ pkgs.swig pkgs.hepmc ];
+
+  HEPMCPATH = pkgs.hepmc;
+
+  checkPhase = ''
+    ${python.interpreter} test/test1.py
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A simple wrapper on the main classes of the HepMC event simulation representation, making it possible to create, read and manipulate HepMC events from Python code";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ veprbl ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyhepmc_export_edges.patch b/pkgs/development/python-modules/pyhepmc/pyhepmc_export_edges.patch
index 5c6e56566a34..5c6e56566a34 100644
--- a/pkgs/development/python-modules/pyhepmc_export_edges.patch
+++ b/pkgs/development/python-modules/pyhepmc/pyhepmc_export_edges.patch
diff --git a/pkgs/development/python-modules/pyhepmc_export_flow.patch b/pkgs/development/python-modules/pyhepmc/pyhepmc_export_flow.patch
index 85e26a1a1607..85e26a1a1607 100644
--- a/pkgs/development/python-modules/pyhepmc_export_flow.patch
+++ b/pkgs/development/python-modules/pyhepmc/pyhepmc_export_flow.patch
diff --git a/pkgs/development/python-modules/pyhomematic/default.nix b/pkgs/development/python-modules/pyhomematic/default.nix
index cd10edd2b64c..95dc4798357f 100644
--- a/pkgs/development/python-modules/pyhomematic/default.nix
+++ b/pkgs/development/python-modules/pyhomematic/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "pyhomematic";
-  version = "0.1.47";
+  version = "0.1.50";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bdac91dc6810b3d9f53d26daf6e6f26480c556fc3b43890e376aa23c17afd60b";
+    sha256 = "d1b13b2786784b197e279e82fb0fbdb11cb55df91b48c12160d85de435fd4046";
   };
 
   # PyPI tarball does not include tests/ directory
diff --git a/pkgs/development/python-modules/pymatgen/default.nix b/pkgs/development/python-modules/pymatgen/default.nix
index 523e7f808064..1365cc4aeb64 100644
--- a/pkgs/development/python-modules/pymatgen/default.nix
+++ b/pkgs/development/python-modules/pymatgen/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pymatgen";
-  version = "2018.9.1";
+  version = "2018.9.30";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dee5dbd8008081de9f27759c20c550d09a07136eeebfe941e3d05fd88ccace18";
+    sha256 = "08c8da84beec153c0ad7acc47e67245e2d6598169e9803b82bd53131a67293be";
   };
 
   nativeBuildInputs = [ glibcLocales ];
diff --git a/pkgs/development/python-modules/pympler/default.nix b/pkgs/development/python-modules/pympler/default.nix
new file mode 100644
index 000000000000..1a3eb0475105
--- /dev/null
+++ b/pkgs/development/python-modules/pympler/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "Pympler";
+  version = "0.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0mhyxqlkha98y8mi5zqcjg23r30mgdjdzs05lghbmqfdyvzjh1a3";
+  };
+
+ # Remove test asizeof.flatsize(), broken and can be missed as
+ # test is only useful on python 2.5, see https://github.com/pympler/pympler/issues/22
+ patchPhase = ''
+   substituteInPlace ./test/asizeof/test_asizeof.py --replace "n, e = test_flatsize" "#n, e = test_flatsize"
+   substituteInPlace ./test/asizeof/test_asizeof.py --replace "self.assert_(n," "#self.assert_(n,"
+   substituteInPlace ./test/asizeof/test_asizeof.py --replace "self.assert_(not e" "#self.assert_(not e"
+  '';
+
+  doCheck = stdenv.hostPlatform.isLinux;
+
+  meta = with stdenv.lib; {
+    description = "Tool to measure, monitor and analyze memory behavior";
+    homepage = https://pythonhosted.org/Pympler/;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pymysqlsa/default.nix b/pkgs/development/python-modules/pymysqlsa/default.nix
new file mode 100644
index 000000000000..0167fe00ea7c
--- /dev/null
+++ b/pkgs/development/python-modules/pymysqlsa/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pymysql
+, sqlalchemy
+}:
+
+buildPythonPackage rec {
+  pname = "pymysqlsa";
+  version = "1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a2676bce514a29b2d6ab418812259b0c2f7564150ac53455420a20bd7935314a";
+  };
+
+  propagatedBuildInputs = [ pymysql sqlalchemy ];
+
+  meta = with stdenv.lib; {
+    description = "PyMySQL dialect for SQL Alchemy";
+    homepage = https://pypi.python.org/pypi/pymysql_sa;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyparsing/default.nix b/pkgs/development/python-modules/pyparsing/default.nix
index 51500281abb6..5861288926f0 100644
--- a/pkgs/development/python-modules/pyparsing/default.nix
+++ b/pkgs/development/python-modules/pyparsing/default.nix
@@ -1,11 +1,11 @@
 { stdenv, buildPythonPackage, fetchPypi }:
 buildPythonPackage rec {
     pname = "pyparsing";
-    version = "2.2.0";
+    version = "2.2.2";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "016b9gh606aa44sq92jslm89bg874ia0yyiyb643fa6dgbsbqch8";
+      sha256 = "bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a";
     };
 
     # Not everything necessary to run the tests is included in the distribution
diff --git a/pkgs/development/python-modules/pyperclip/default.nix b/pkgs/development/python-modules/pyperclip/default.nix
index 0b0737992547..762603315216 100644
--- a/pkgs/development/python-modules/pyperclip/default.nix
+++ b/pkgs/development/python-modules/pyperclip/default.nix
@@ -1,12 +1,12 @@
 { lib, buildPythonPackage, fetchPypi }:
 
 buildPythonPackage rec {
-  version = "1.6.4";
+  version = "1.6.5";
   pname = "pyperclip";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "f70e83d27c445795b6bf98c2bc826bbf2d0d63d4c7f83091c8064439042ba0dc";
+    sha256 = "406bc020d4b8e60d8673876271b815befc4c02fd8d919e4aacc667d69fab99ea";
   };
 
   doCheck = false;
diff --git a/pkgs/development/python-modules/pypoppler/default.nix b/pkgs/development/python-modules/pypoppler/default.nix
new file mode 100644
index 000000000000..ccda4f2631d2
--- /dev/null
+++ b/pkgs/development/python-modules/pypoppler/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+, pycairo
+, pygobject2
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "pypoppler";
+  version = "0.12.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "47e6ac99e5b114b9abf2d1dd1bca06f22c028d025432512989f659142470810f";
+  };
+
+  NIX_CFLAGS_COMPILE="-I${pkgs.poppler.dev}/include/poppler/";
+  nativeBuildInputs = [ pkgs.pkgconfig ];
+  buildInputs = [ pkgs.poppler.dev ];
+  propagatedBuildInputs = [ pycairo pygobject2 ];
+
+  patches = [
+    ./pypoppler-0.39.0.patch
+    ./pypoppler-poppler.c.patch
+  ];
+
+  # Not supported.
+  disabled = isPy3k;
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://code.launchpad.net/~mriedesel/poppler-python/main;
+    description = "Python bindings for poppler-glib, unofficial branch including bug fixes, and removal of gtk dependencies";
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pypoppler-0.39.0.patch b/pkgs/development/python-modules/pypoppler/pypoppler-0.39.0.patch
index b9e02242e003..b9e02242e003 100644
--- a/pkgs/development/python-modules/pypoppler-0.39.0.patch
+++ b/pkgs/development/python-modules/pypoppler/pypoppler-0.39.0.patch
diff --git a/pkgs/development/python-modules/pypoppler-poppler.c.patch b/pkgs/development/python-modules/pypoppler/pypoppler-poppler.c.patch
index 1104097cd3e7..1104097cd3e7 100644
--- a/pkgs/development/python-modules/pypoppler-poppler.c.patch
+++ b/pkgs/development/python-modules/pypoppler/pypoppler-poppler.c.patch
diff --git a/pkgs/development/python-modules/pyramid/default.nix b/pkgs/development/python-modules/pyramid/default.nix
new file mode 100644
index 000000000000..060b6b77f870
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, docutils
+, virtualenv
+, webtest
+, zope_component
+, hupper
+, PasteDeploy
+, plaster
+, plaster-pastedeploy
+, repoze_lru
+, repoze_sphinx_autointerface
+, translationstring
+, venusian
+, webob
+, zope_deprecation
+, zope_interface
+, isPy35
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid";
+  version = "1.9.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0dhbzc4q0vsnv3aihy728aczg56xs6h9s1rmvr096q4lb6yln3w4";
+  };
+
+  checkInputs = [ docutils virtualenv webtest zope_component ];
+
+  propagatedBuildInputs = [ hupper PasteDeploy plaster plaster-pastedeploy repoze_lru repoze_sphinx_autointerface translationstring venusian webob zope_deprecation zope_interface ];
+
+  # Failing tests
+  # https://github.com/Pylons/pyramid/issues/1899
+  doCheck = !isPy35;
+
+  meta = with stdenv.lib; {
+    description = "The Pyramid Web Framework, a Pylons project";
+    homepage = https://trypyramid.com/;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_chameleon/default.nix b/pkgs/development/python-modules/pyramid_chameleon/default.nix
new file mode 100644
index 000000000000..257be31f32d9
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_chameleon/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, chameleon
+, pyramid
+, zope_interface
+, setuptools
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid_chameleon";
+  version = "0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d176792a50eb015d7865b44bd9b24a7bd0489fa9a5cebbd17b9e05048cef9017";
+  };
+
+  propagatedBuildInputs = [ chameleon pyramid zope_interface setuptools ];
+
+  meta = with stdenv.lib; {
+    description = "Chameleon template compiler for pyramid";
+    homepage = https://github.com/Pylons/pyramid_chameleon;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_exclog/default.nix b/pkgs/development/python-modules/pyramid_exclog/default.nix
new file mode 100644
index 000000000000..dfdea42b02c4
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_exclog/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pyramid
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid_exclog";
+  version = "0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a58c82866c3e1a350684e6b83b440d5dc5e92ca5d23794b56d53aac06fb65a2c";
+  };
+
+  propagatedBuildInputs = [ pyramid ];
+
+  meta = with stdenv.lib; {
+    description = "A package which logs to a Python logger when an exception is raised by a Pyramid application";
+    homepage = http://docs.pylonsproject.org/;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_hawkauth/default.nix b/pkgs/development/python-modules/pyramid_hawkauth/default.nix
new file mode 100644
index 000000000000..a27232550571
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_hawkauth/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, pyramid
+, hawkauthlib
+, tokenlib
+, webtest
+}:
+
+buildPythonPackage rec {
+  pname = "pyramidhawkauth";
+  version = "0.1.0";
+
+  src = fetchgit {
+    url = https://github.com/mozilla-services/pyramid_hawkauth.git;
+    rev = "refs/tags/v${version}";
+    sha256 = "038ign7qlavlmvrhb2y8bygbxvy4j7bx2k1zg0i3wblg2ja50w7h";
+  };
+
+  propagatedBuildInputs = [ pyramid hawkauthlib tokenlib ];
+  buildInputs = [ webtest ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/mozilla-services/pyramid_hawkauth;
+    description = "A Pyramid authentication plugin for HAWK";
+    license = licenses.mpl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_jinja2/default.nix b/pkgs/development/python-modules/pyramid_jinja2/default.nix
new file mode 100644
index 000000000000..d211b9daf334
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_jinja2/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, webtest
+, jinja2
+, pyramid
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid_jinja2";
+  version = "2.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "93c86e3103b454301f4d66640191aba047f2ab85ba75647aa18667b7448396bd";
+  };
+
+  buildInputs = [ webtest ];
+  propagatedBuildInputs = [ jinja2 pyramid ];
+
+  meta = with stdenv.lib; {
+    description = "Jinja2 template bindings for the Pyramid web framework";
+    homepage = https://github.com/Pylons/pyramid_jinja2;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_mako/default.nix b/pkgs/development/python-modules/pyramid_mako/default.nix
new file mode 100644
index 000000000000..2752ba7641eb
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_mako/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, webtest
+, pyramid
+, Mako
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid_mako";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "00811djmsc4rz20kpy2paam05fbx6dmrv2i5jf90f6xp6zw4isy6";
+  };
+
+  buildInputs = [ webtest ];
+  propagatedBuildInputs = [ pyramid Mako ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/Pylons/pyramid_mako;
+    description = "Mako template bindings for the Pyramid web framework";
+    license = licenses.bsd0;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyramid_multiauth/default.nix b/pkgs/development/python-modules/pyramid_multiauth/default.nix
new file mode 100644
index 000000000000..7130e8b499f3
--- /dev/null
+++ b/pkgs/development/python-modules/pyramid_multiauth/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pyramid
+}:
+
+buildPythonPackage rec {
+  pname = "pyramid_multiauth";
+  version = "0.8.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1lq292qakrm4ixi4vaif8dqywzj08pn6qy0wi4gw28blh39p0msk";
+  };
+
+  propagatedBuildInputs = [ pyramid ];
+
+  meta = with stdenv.lib; {
+    description = "Authentication policy for Pyramid that proxies to a stack of other authentication policies";
+    homepage = https://github.com/mozilla-services/pyramid_multiauth;
+    license = licenses.mpl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyrfc3339/default.nix b/pkgs/development/python-modules/pyrfc3339/default.nix
new file mode 100644
index 000000000000..ddc47dfc2959
--- /dev/null
+++ b/pkgs/development/python-modules/pyrfc3339/default.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytz
+, nose
+}:
+
+buildPythonPackage rec {
+  pname = "pyRFC3339";
+  version = "0.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1pp648xsjaw9h1xq2mgwzda5wis2ypjmzxlksc1a8grnrdmzy155";
+  };
+
+  propagatedBuildInputs = [ pytz ];
+  buildInputs = [ nose ];
+
+  meta = with stdenv.lib; {
+    description = "Generate and parse RFC 3339 timestamps";
+    homepage = https://github.com/kurtraschke/pyRFC3339;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyroute2/default.nix b/pkgs/development/python-modules/pyroute2/default.nix
index e9c48cbb8b40..16805ac58c04 100644
--- a/pkgs/development/python-modules/pyroute2/default.nix
+++ b/pkgs/development/python-modules/pyroute2/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyroute2";
-  version = "0.5.2";
+  version = "0.5.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "42bf74495d95a0196a74dd171357f660175aba2bfc23f9b5f63e3830ccbef9ac";
+    sha256 = "79f7b4286be773c46914df0201dabaf92717a9c06e341e0c420603b2dd31c6bf";
   };
 
   # requires root priviledges
diff --git a/pkgs/development/python-modules/pyspark/default.nix b/pkgs/development/python-modules/pyspark/default.nix
index b333ca27143c..29dd344a34cb 100644
--- a/pkgs/development/python-modules/pyspark/default.nix
+++ b/pkgs/development/python-modules/pyspark/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pyspark";
-  version = "2.3.1";
+  version = "2.3.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "52d77a7ef43088b0235742cfcafc83435d0d98c5fdded1d8c600f1887e9e0213";
+    sha256 = "7fb3b4fe47edb0fb78cecec37e0f2a728590f17ef6a49eae55141a7a374c07c8";
   };
 
   # pypandoc is broken with pandoc2, so we just lose docs.
diff --git a/pkgs/development/python-modules/pysrim/default.nix b/pkgs/development/python-modules/pysrim/default.nix
index 90dfc1f56045..dc6c09f7b703 100644
--- a/pkgs/development/python-modules/pysrim/default.nix
+++ b/pkgs/development/python-modules/pysrim/default.nix
@@ -8,11 +8,11 @@
 
 buildPythonPackage rec {
   pname = "pysrim";
-  version = "0.5.8";
+  version = "0.5.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6c297b4ea6f037946c72e94ddd9a7624cf2fd97c488acbee9409001c970754f1";
+    sha256 = "071c5be48e58fa019f7848588f88ce0a09bfe6493c9ff5987829d162c0f4a497";
   };
 
   buildInputs = [ pytestrunner ];
diff --git a/pkgs/development/python-modules/pytest-isort/default.nix b/pkgs/development/python-modules/pytest-isort/default.nix
index 758a2f194b25..23cd76679925 100644
--- a/pkgs/development/python-modules/pytest-isort/default.nix
+++ b/pkgs/development/python-modules/pytest-isort/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytest-isort";
-  version = "0.2.0";
+  version = "0.2.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d4d195ecfe33d81e258d251b2679b32216bad84131fb41984da22d9d0328a6fe";
+    sha256 = "c70d0f900f4647bb714f0843dd82d7f7b759904006de31254efdb72ce88e0c0e";
   };
 
   propagatedBuildInputs = [ pytestcache pytest isort ];
diff --git a/pkgs/development/python-modules/pytest-relaxed/default.nix b/pkgs/development/python-modules/pytest-relaxed/default.nix
new file mode 100644
index 000000000000..bd92577d5bac
--- /dev/null
+++ b/pkgs/development/python-modules/pytest-relaxed/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+, six
+, decorator
+}:
+
+buildPythonPackage rec {
+  version = "1.1.4";
+  pname = "pytest-relaxed";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "511ac473252baa67d5451f7864516e2e8f1acedf0cef71f79d2ed916ee04e146";
+  };
+
+  propagatedBuildInputs = [ pytest six decorator ];
+
+  patchPhase = ''
+    sed -i "s/pytest>=3,<3.3/pytest/g" setup.py
+  '';
+
+  # skip tests due to dir requirements
+  doCheck = false;
+
+  checkPhase = ''
+    pytest tests
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://pytest-relaxed.readthedocs.io/;
+    description = "Relaxed test discovery/organization for pytest";
+    license = licenses.bsd0;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/pytest-xdist/default.nix b/pkgs/development/python-modules/pytest-xdist/default.nix
index 46d505b3801b..71d4df4a0c55 100644
--- a/pkgs/development/python-modules/pytest-xdist/default.nix
+++ b/pkgs/development/python-modules/pytest-xdist/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "pytest-xdist";
-  version = "1.23.0";
+  version = "1.23.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "28e25e79698b2662b648319d3971c0f9ae0e6500f88258ccb9b153c31110ba9b";
+    sha256 = "1ef0d05c905cfa0c5442c90e9e350e65c6ada120e33a00a066ca51c89f5f869a";
   };
 
   nativeBuildInputs = [ setuptools_scm ];
diff --git a/pkgs/development/python-modules/python-levenshtein/default.nix b/pkgs/development/python-modules/python-levenshtein/default.nix
new file mode 100644
index 000000000000..7a16621da0a5
--- /dev/null
+++ b/pkgs/development/python-modules/python-levenshtein/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "python-Levenshtein";
+  version = "0.12.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3";
+  };
+
+  # No tests included in archive
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Functions for fast computation of Levenshtein distance and string similarity";
+    homepage    = "https://github.com/ztane/python-Levenshtein";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ aske ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/python-mapnik/default.nix b/pkgs/development/python-modules/python-mapnik/default.nix
new file mode 100644
index 000000000000..692bbe4bcd89
--- /dev/null
+++ b/pkgs/development/python-modules/python-mapnik/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPyPy
+, python
+, pkgs
+, pillow
+, pycairo
+}:
+
+buildPythonPackage rec {
+  pname = "python-mapnik";
+  version = "3.0.16";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "mapnik";
+    repo = "python-mapnik";
+    rev = "v${version}";
+    sha256 = "1gqs4kvmjawdgl80j0ab5r8y0va9kw0rvwix3093xsv4hwd00lcc";
+  };
+
+  disabled = isPyPy;
+  doCheck = false; # doesn't find needed test data files
+  preBuild = let
+    pythonVersion = with stdenv.lib.versions; "${major python.version}${minor python.version}";
+  in ''
+    export BOOST_PYTHON_LIB="boost_python${pythonVersion}"
+    export BOOST_THREAD_LIB="boost_thread"
+    export BOOST_SYSTEM_LIB="boost_system"
+  '';
+  buildInputs = with pkgs; [
+      (boost.override {
+        enablePython = true;
+        inherit python;
+      })
+      (mapnik.override {
+        inherit python;
+        boost = (boost.override { enablePython = true; inherit python; });
+      })
+      cairo
+      harfbuzz
+      icu
+      libjpeg
+      libpng
+      libtiff
+      libwebp
+      proj
+      zlib
+    ];
+  propagatedBuildInputs = [ pillow pycairo ];
+
+  meta = with stdenv.lib; {
+    description = "Python bindings for Mapnik";
+    homepage = http://mapnik.org;
+    license  = licenses.lgpl21;
+  };
+
+}
diff --git a/pkgs/development/python-modules/python-otr/default.nix b/pkgs/development/python-modules/python-otr/default.nix
new file mode 100644
index 000000000000..2b08bbffa450
--- /dev/null
+++ b/pkgs/development/python-modules/python-otr/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, isPy3k
+, zope_interface
+, cryptography
+, application
+, gmpy2
+}:
+
+buildPythonPackage rec {
+  pname = "python-otr";
+  version = "1.2.0";
+  disabled = isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "AGProjects";
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "0p3b1n8jlxwd65gbk2k5007fkhdyjwcvr4982s42hncivxvabzzy";
+  };
+
+  propagatedBuildInputs = [ zope_interface cryptography application gmpy2 ];
+
+  meta = with stdenv.lib; {
+    description = "A pure python implementation of OTR";
+    homepage = https://github.com/AGProjects/otr;
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/python-slugify/default.nix b/pkgs/development/python-modules/python-slugify/default.nix
index 9c8cc68af3d0..b3e3de0285a9 100644
--- a/pkgs/development/python-modules/python-slugify/default.nix
+++ b/pkgs/development/python-modules/python-slugify/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
     pname = "python-slugify";
-    version = "1.2.5";
+    version = "1.2.6";
 
     src = fetchPypi {
       inherit pname version;
-      sha256 = "5dbb360b882b2dabe0471a1a92f604504d83c2a73c71f2098d004ab62e695534";
+      sha256 = "7723daf30996db26573176bddcdf5fcb98f66dc70df05c9cb29f2c79b8193245";
     };
     doCheck = !isPy3k;
     # (only) on python3 unittest loader (loadTestsFromModule) fails
diff --git a/pkgs/development/python-modules/python2-pythondialog/default.nix b/pkgs/development/python-modules/python2-pythondialog/default.nix
new file mode 100644
index 000000000000..33e63460d874
--- /dev/null
+++ b/pkgs/development/python-modules/python2-pythondialog/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "python2-pythondialog";
+  version = "3.3.0";
+  disabled = isPy3k;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1yhkagsh99bfi592ymczf8rnw8rk6n9hdqy3dd98m3yrx8zmjvry";
+  };
+
+  patchPhase = ''
+    substituteInPlace dialog.py --replace ":/bin:/usr/bin" ":$out/bin"
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A Python interface to the UNIX dialog utility and mostly-compatible programs (Python 2 backport)";
+    homepage = "http://pythondialog.sourceforge.net/";
+    license = licenses.lgpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/python_openzwave/default.nix b/pkgs/development/python-modules/python_openzwave/default.nix
index e04915a503db..a7973501bf74 100644
--- a/pkgs/development/python-modules/python_openzwave/default.nix
+++ b/pkgs/development/python-modules/python_openzwave/default.nix
@@ -5,13 +5,13 @@
 
 buildPythonPackage rec {
   pname = "python_openzwave";
-  version = "0.4.9";
+  version = "0.4.10";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "97ddd104f52e3a4d7115c3de5d2136631d1f66627fc9b45d56956c3f2b6e0cdb";
+    sha256 = "4bde7afd6c97637b59ee37a1c432c285daf179e535eb9a0d5dd95a65600b0cc8";
     extension = "zip";
   };
 
diff --git a/pkgs/development/python-modules/pythonirclib/default.nix b/pkgs/development/python-modules/pythonirclib/default.nix
new file mode 100644
index 000000000000..35873d301be4
--- /dev/null
+++ b/pkgs/development/python-modules/pythonirclib/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, buildPythonPackage
+, fetchurl
+, paver
+, isPy3k
+}:
+
+buildPythonPackage rec {
+  pname = "irclib";
+  version = "0.4.8";
+  disabled = isPy3k;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/python-irclib/python-irclib-${version}.tar.gz";
+    sha256 = "1x5456y4rbxmnw4yblhb4as5791glcw394bm36px3x6l05j3mvl1";
+  };
+
+  patches = [(fetchurl {
+    url = "http://trac.uwc.ac.za/trac/python_tools/browser/xmpp/resources/irc-transport/irclib.py.diff?rev=387&format=raw";
+    name = "irclib.py.diff";
+    sha256 = "5fb8d95d6c95c93eaa400b38447c63e7a176b9502bc49b2f9b788c9905f4ec5e";
+  })];
+
+  patchFlags = "irclib.py";
+
+  propagatedBuildInputs = [ paver ];
+
+  meta = with stdenv.lib; {
+    description = "Python IRC library";
+    homepage = https://bitbucket.org/jaraco/irc;
+    license = with licenses; [ lgpl21 ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/pytun/default.nix b/pkgs/development/python-modules/pytun/default.nix
new file mode 100644
index 000000000000..32e3b683e410
--- /dev/null
+++ b/pkgs/development/python-modules/pytun/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+}:
+
+buildPythonPackage rec {
+  pname = "pytun";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "montag451";
+    repo = "pytun";
+    sha256 = "1bxk0z0v8m0b01xg94f039j3bsclkshb7girvjqfzk5whbd2nryh";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/montag451/pytun;
+    description = "Linux TUN/TAP wrapper for Python";
+    license = licenses.mit;
+    maintainers = with maintainers; [ montag451 ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/pkgs/development/python-modules/pyxdg/default.nix b/pkgs/development/python-modules/pyxdg/default.nix
new file mode 100644
index 000000000000..31b2ff4e9883
--- /dev/null
+++ b/pkgs/development/python-modules/pyxdg/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "pyxdg";
+  version = "0.25";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "81e883e0b9517d624e8b0499eb267b82a815c0b7146d5269f364988ae031279d";
+  };
+
+  # error: invalid command 'test'
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://freedesktop.org/wiki/Software/pyxdg;
+    description = "Contains implementations of freedesktop.org standards";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/rainbowstream/default.nix b/pkgs/development/python-modules/rainbowstream/default.nix
new file mode 100644
index 000000000000..53c0c148eea4
--- /dev/null
+++ b/pkgs/development/python-modules/rainbowstream/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, python
+, pkgs
+, pillow
+, twitter
+, pyfiglet
+, requests
+, arrow
+, dateutil
+, pysocks
+, pocket
+}:
+
+buildPythonPackage rec {
+  pname = "rainbowstream";
+  version = "1.3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0zpi1x3b535pwx8rkq57nnrb5d5ma65vvlalar9vi6ilp124x1w2";
+  };
+
+  patches = [ ./image.patch ];
+
+  postPatch = ''
+    clib=$out/${python.sitePackages}/rainbowstream/image.so
+    substituteInPlace rainbowstream/c_image.py \
+      --replace @CLIB@ $clib
+    sed -i 's/requests.*"/requests"/' setup.py
+  '';
+
+  LC_ALL="en_US.UTF-8";
+
+  postInstall = ''
+    mkdir -p $out/lib
+    cc -fPIC -shared -o $clib rainbowstream/image.c
+    for prog in "$out/bin/"*; do
+      wrapProgram "$prog" \
+        --prefix PYTHONPATH : "$PYTHONPATH"
+    done
+  '';
+
+  buildInputs =  [ pkgs.libjpeg pkgs.freetype pkgs.zlib pkgs.glibcLocales pillow twitter pyfiglet requests arrow dateutil pysocks pocket ];
+
+  meta = with stdenv.lib; {
+    description = "Streaming command-line twitter client";
+    homepage    = "http://www.rainbowstream.org/";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ thoughtpolice ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/random2/default.nix b/pkgs/development/python-modules/random2/default.nix
new file mode 100644
index 000000000000..ecc049b34f46
--- /dev/null
+++ b/pkgs/development/python-modules/random2/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, isPyPy
+}:
+
+buildPythonPackage rec {
+  pname = "random2";
+  version = "1.0.1";
+  doCheck = !isPyPy;
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "34ad30aac341039872401595df9ab2c9dc36d0b7c077db1cea9ade430ed1c007";
+  };
+
+  meta = with stdenv.lib; {
+    homepage = http://pypi.python.org/pypi/random2;
+    description = "Python 3 compatible Python 2 `random` Module";
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/reikna/default.nix b/pkgs/development/python-modules/reikna/default.nix
index 760ca0056ff6..2e828a2a8e82 100644
--- a/pkgs/development/python-modules/reikna/default.nix
+++ b/pkgs/development/python-modules/reikna/default.nix
@@ -13,11 +13,11 @@
 
 buildPythonPackage rec {
   pname = "reikna";
-  version = "0.7.1";
+  version = "0.7.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0afc5d502cc9ba0dadd88c15d72e2fdaa09fee31faaae5064889732de7940953";
+    sha256 = "c52f5ae13e35284feda8f6b67c0d6223c02c0292b1495969cf7a42f547b3fc18";
   };
 
   checkInputs = [ sphinx pytestcov pytest ];
diff --git a/pkgs/development/python-modules/relatorio/default.nix b/pkgs/development/python-modules/relatorio/default.nix
index dbc28263b06d..e9f4b8e2bd6c 100644
--- a/pkgs/development/python-modules/relatorio/default.nix
+++ b/pkgs/development/python-modules/relatorio/default.nix
@@ -2,10 +2,10 @@
 
 buildPythonPackage rec {
   pname = "relatorio";
-  version = "0.8.0";
+  version = "0.8.1";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "bddf85d029c5c85a0f976d73907e14e4c3093065fe8527170c91abf0218546d9";
+    sha256 = "149a1c4c2a35d9b9e634fe80cac405bc9b4c03a42f818302362183515e7e835d";
   };
   propagatedBuildInputs = [
     genshi
diff --git a/pkgs/development/python-modules/reportlab/default.nix b/pkgs/development/python-modules/reportlab/default.nix
index e2f2a7814aa5..82d2889364f1 100644
--- a/pkgs/development/python-modules/reportlab/default.nix
+++ b/pkgs/development/python-modules/reportlab/default.nix
@@ -11,11 +11,11 @@ let
   ft = freetype.overrideAttrs (oldArgs: { dontDisableStatic = true; });
 in buildPythonPackage rec {
   pname = "reportlab";
-  version = "3.5.6";
+  version = "3.5.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3836a49e7ea7bce458f437cbc094633c7fd4ac027180565875c18ecc726f261e";
+    sha256 = "f92f81314807cd860f29fe07a1a4100b03910ae6bbfca20a07e02c3b460f4f20";
   };
 
   checkInputs = [ glibcLocales ];
diff --git a/pkgs/development/python-modules/repoze_lru/default.nix b/pkgs/development/python-modules/repoze_lru/default.nix
new file mode 100644
index 000000000000..c08120d24128
--- /dev/null
+++ b/pkgs/development/python-modules/repoze_lru/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "repoze.lru";
+  version = "0.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0f7a323bf716d3cb6cb3910cd4fccbee0b3d3793322738566ecce163b01bbd31";
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tiny LRU cache implementation and decorator";
+    homepage = http://www.repoze.org/;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/repoze_sphinx_autointerface/default.nix b/pkgs/development/python-modules/repoze_sphinx_autointerface/default.nix
new file mode 100644
index 000000000000..96a893edd7c0
--- /dev/null
+++ b/pkgs/development/python-modules/repoze_sphinx_autointerface/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, zope_interface
+, sphinx
+}:
+
+buildPythonPackage rec {
+  pname = "repoze.sphinx.autointerface";
+  version = "0.7.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "97ef5fac0ab0a96f1578017f04aea448651fa9f063fc43393a8253bff8d8d504";
+  };
+
+  propagatedBuildInputs = [ zope_interface sphinx ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/repoze/repoze.sphinx.autointerface;
+    description = "Auto-generate Sphinx API docs from Zope interfaces";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+}
diff --git a/pkgs/development/python-modules/rethinkdb/default.nix b/pkgs/development/python-modules/rethinkdb/default.nix
new file mode 100644
index 000000000000..f6d816d37c0e
--- /dev/null
+++ b/pkgs/development/python-modules/rethinkdb/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "rethinkdb";
+  version = "2.3.0.post6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "05qwkmq6kn437ywyjs02jxbry720gw39q4z4jdb0cnbbi76lwddm";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python driver library for the RethinkDB database server";
+    homepage = "https://pypi.python.org/pypi/rethinkdb";
+    license = licenses.agpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/rlp/default.nix b/pkgs/development/python-modules/rlp/default.nix
index 150234a3dd29..d9b55c852192 100644
--- a/pkgs/development/python-modules/rlp/default.nix
+++ b/pkgs/development/python-modules/rlp/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "rlp";
-  version = "1.0.2";
+  version = "1.0.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "040fb5172fa23d27953a886c40cac989fc031d0629db934b5a9edcd2fb28df1e";
+    sha256 = "b0ad3f3173dedf416565299f684717d4ae7620207d562d3ef94b818a40a48781";
   };
 
   checkInputs = [ pytest hypothesis ];
diff --git a/pkgs/development/python-modules/roman/default.nix b/pkgs/development/python-modules/roman/default.nix
new file mode 100644
index 000000000000..52d45d728752
--- /dev/null
+++ b/pkgs/development/python-modules/roman/default.nix
@@ -0,0 +1,22 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  version = "2.0.0";
+  pname = "roman";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "90e83b512b44dd7fc83d67eb45aa5eb707df623e6fc6e66e7f273abd4b2613ae";
+  };
+
+  meta = with stdenv.lib; {
+    description = "Integer to Roman numerals converter";
+    homepage = "https://pypi.python.org/pypi/roman";
+    license = licenses.psfl;
+  };
+
+}
diff --git a/pkgs/development/python-modules/safe/default.nix b/pkgs/development/python-modules/safe/default.nix
new file mode 100644
index 000000000000..f7f6f7eabf91
--- /dev/null
+++ b/pkgs/development/python-modules/safe/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+}:
+
+buildPythonPackage rec {
+  version = "0.4";
+  pname = "Safe";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "a2fdac9fe8a9dcf02b438201d6ce0b7be78f85dc6492d03edfb89be2adf489de";
+  };
+
+  buildInputs = [ nose ];
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/lepture/safe";
+    license = licenses.bsd3;
+    description = "Check password strength";
+  };
+
+}
diff --git a/pkgs/development/python-modules/samplerate/default.nix b/pkgs/development/python-modules/samplerate/default.nix
new file mode 100644
index 000000000000..432e2194b098
--- /dev/null
+++ b/pkgs/development/python-modules/samplerate/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, buildPythonPackage
+, fetchgit
+, numpy
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "scikits.samplerate";
+  version = "0.3.3";
+
+  src = pkgs.fetchgit {
+    url = https://github.com/cournape/samplerate;
+    rev = "a536c97eb2d6195b5f266ea3cc3a35364c4c2210";
+    sha256 = "0mgic7bs5zv5ji05vr527jlxxlb70f9dg93hy1lzyz2plm1kf7gg";
+  };
+
+  buildInputs =  [ pkgs.libsamplerate ];
+  propagatedBuildInputs = [ numpy ];
+
+  preConfigure = ''
+     cat > site.cfg << END
+     [samplerate]
+     library_dirs=${pkgs.libsamplerate.out}/lib
+     include_dirs=${pkgs.libsamplerate.dev}/include
+     END
+  '';
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/cournape/samplerate;
+    description = "High quality sampling rate convertion from audio data in numpy arrays";
+    license = licenses.gpl2;
+  };
+
+}
diff --git a/pkgs/development/python-modules/schedule/default.nix b/pkgs/development/python-modules/schedule/default.nix
new file mode 100644
index 000000000000..79ad778e048a
--- /dev/null
+++ b/pkgs/development/python-modules/schedule/default.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "schedule";
+  version = "0.3.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1h0waw4jd5ql68y5kxb9irwapkbkwfs1w0asvbl24fq5f8czdijm";
+  };
+
+  buildInputs = [ mock ];
+
+  meta = with stdenv.lib; {
+    description = "Python job scheduling for humans";
+    homepage = https://github.com/dbader/schedule;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/scikit-image/default.nix b/pkgs/development/python-modules/scikit-image/default.nix
index 1a07e001caec..5d8399d6267c 100644
--- a/pkgs/development/python-modules/scikit-image/default.nix
+++ b/pkgs/development/python-modules/scikit-image/default.nix
@@ -16,11 +16,11 @@
 
 buildPythonPackage rec {
   pname = "scikit-image";
-  version = "0.14.0";
+  version = "0.14.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "325f75eb80fbc5371136e37f323445309ca9f65b6c6f718d0d0e2189e5de1224";
+    sha256 = "86a9b3b4f74f231e0a6bcfd3235dcf3f0118df25dac21201da5e064d681e2c50";
   };
 
   buildInputs = [ cython ];
diff --git a/pkgs/development/python-modules/seekpath/default.nix b/pkgs/development/python-modules/seekpath/default.nix
index dfca0a5fa2ea..5aa34a442059 100644
--- a/pkgs/development/python-modules/seekpath/default.nix
+++ b/pkgs/development/python-modules/seekpath/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "seekpath";
-  version = "1.8.2";
+  version = "1.8.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "8fb22231ed6fc6aa12e2f2cc6c8ca67b82648e16c1c85ddac2e2237ac4553d83";
+    sha256 = "b61dadba82acc0838402981b7944155adc092b114ca81f53f61b1d498a512e3a";
   };  
 
   LC_ALL = "en_US.utf-8";
diff --git a/pkgs/development/python-modules/setuptools-git/default.nix b/pkgs/development/python-modules/setuptools-git/default.nix
new file mode 100644
index 000000000000..c68ba10a3209
--- /dev/null
+++ b/pkgs/development/python-modules/setuptools-git/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "setuptools-git";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "047d7595546635edebef226bc566579d422ccc48a8a91c7d32d8bd174f68f831";
+  };
+
+  propagatedBuildInputs = [ pkgs.git ];
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Setuptools revision control system plugin for Git";
+    homepage = https://pypi.python.org/pypi/setuptools-git;
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/shippai/default.nix b/pkgs/development/python-modules/shippai/default.nix
index ac035061692b..ffb221ffdc51 100644
--- a/pkgs/development/python-modules/shippai/default.nix
+++ b/pkgs/development/python-modules/shippai/default.nix
@@ -3,11 +3,11 @@
 buildPythonPackage rec {
   pname = "shippai";
   # Please make sure that vdirsyncer still builds if you update this package.
-  version = "0.2.3";
+  version = "0.2.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ppwywzg4d12h658682ssmingm6ls6a96p4ak26i2w9d4lf8pfsc";
+    sha256 = "87cc9899212d917031853becd7cb14808181289c3c329b1418e9b4b6aae93c80";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/python-modules/sleekxmpp/default.nix b/pkgs/development/python-modules/sleekxmpp/default.nix
index 37ecc8bbb1c4..426019fc8a97 100644
--- a/pkgs/development/python-modules/sleekxmpp/default.nix
+++ b/pkgs/development/python-modules/sleekxmpp/default.nix
@@ -20,4 +20,5 @@ buildPythonPackage rec {
     license = licenses.mit;
     homepage = "http://sleekxmpp.com/";
   };
+
 }
diff --git a/pkgs/development/python-modules/slixmpp/default.nix b/pkgs/development/python-modules/slixmpp/default.nix
new file mode 100644
index 000000000000..88c43bce2970
--- /dev/null
+++ b/pkgs/development/python-modules/slixmpp/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildPythonPackage, fetchPypi, pythonOlder, fetchurl, aiodns, pyasn1, pyasn1-modules, gnupg }:
+
+buildPythonPackage rec {
+  pname = "slixmpp";
+  version = "1.4.0";
+
+  disabled = pythonOlder "3.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "155qxx4xlkkjb4hphc09nsi2mi4xi3m2akg0z7064kj3nbzkwjn2";
+  };
+
+  patchPhase = ''
+    substituteInPlace slixmpp/thirdparty/gnupg.py \
+      --replace "gpgbinary='gpg'" "gpgbinary='${gnupg}/bin/gpg'"
+  '';
+
+  propagatedBuildInputs = [ aiodns pyasn1 pyasn1-modules gnupg ];
+
+  meta = {
+    description = "Elegant Python library for XMPP";
+    license = lib.licenses.mit;
+    homepage = https://dev.louiz.org/projects/slixmpp;
+  };
+}
diff --git a/pkgs/development/python-modules/sortedcollections/default.nix b/pkgs/development/python-modules/sortedcollections/default.nix
new file mode 100644
index 000000000000..b80e5655ff99
--- /dev/null
+++ b/pkgs/development/python-modules/sortedcollections/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, sortedcontainers
+}:
+
+buildPythonPackage rec {
+  pname = "sortedcollections";
+  version = "0.4.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "12dlzln9gyv8smsy2k6d6dmr0ywrpwyrr1cjy649ia5h1g7xdvwa";
+  };
+
+  buildInputs = [ sortedcontainers ];
+
+  # wants to test all python versions with tox:
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python Sorted Collections";
+    homepage = http://www.grantjenks.com/docs/sortedcollections/;
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/sortedcontainers/default.nix b/pkgs/development/python-modules/sortedcontainers/default.nix
index 1252c676646d..5362e0b00375 100644
--- a/pkgs/development/python-modules/sortedcontainers/default.nix
+++ b/pkgs/development/python-modules/sortedcontainers/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "sortedcontainers";
-  version = "2.0.4";
+  version = "2.0.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "607294c6e291a270948420f7ffa1fb3ed47384a4c08db6d1e9c92d08a6981982";
+    sha256 = "b74f2756fb5e23512572cc76f0fe0832fd86310f77dfee54335a35fb33f6b950";
   };
 
   # pypi tarball does not come with tests
diff --git a/pkgs/development/python-modules/sounddevice/default.nix b/pkgs/development/python-modules/sounddevice/default.nix
index 5b8c4a46b2be..bdb003467f56 100644
--- a/pkgs/development/python-modules/sounddevice/default.nix
+++ b/pkgs/development/python-modules/sounddevice/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "sounddevice";
-  version = "0.3.11";
+  version = "0.3.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0pfcbgbl77nggchxb2i5rb78m7hpgn65aqpz99yfx1fgfbmy9yg1";
+    sha256 = "f59ae4e2ec12cb1e5940f06f08804ecca855d959de25ca45a3938de45d0f81a2";
   };
 
   propagatedBuildInputs = [ cffi numpy portaudio ];
diff --git a/pkgs/development/python-modules/sparqlwrapper/default.nix b/pkgs/development/python-modules/sparqlwrapper/default.nix
new file mode 100644
index 000000000000..44f16fbdfc6c
--- /dev/null
+++ b/pkgs/development/python-modules/sparqlwrapper/default.nix
@@ -0,0 +1,35 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, six
+, isodate
+, pyparsing
+, html5lib
+, keepalive
+}:
+
+buildPythonPackage rec {
+  pname = "SPARQLWrapper";
+  version = "1.7.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1y12hpsfjd779yi29bhvl6g4vszadjvd8jw38z5rg77b034vxjnw";
+  };
+
+  # break circular dependency loop
+  patchPhase = ''
+    sed -i '/rdflib/d' requirements.txt
+  '';
+
+  # Doesn't actually run tests
+  doCheck = false;
+
+  propagatedBuildInputs = [ six isodate pyparsing html5lib keepalive ];
+
+  meta = with stdenv.lib; {
+    description = "This is a wrapper around a SPARQL service. It helps in creating the query URI and, possibly, convert the result into a more manageable format";
+    homepage = "http://rdflib.github.io/sparqlwrapper";
+    license = licenses.w3c;
+  };
+}
diff --git a/pkgs/development/python-modules/sphfile/default.nix b/pkgs/development/python-modules/sphfile/default.nix
index 8ee4ce76069f..3309f1e9978f 100644
--- a/pkgs/development/python-modules/sphfile/default.nix
+++ b/pkgs/development/python-modules/sphfile/default.nix
@@ -2,12 +2,12 @@
 
 buildPythonPackage rec {
   pname = "sphfile";
-  version = "1.0.0";
+  version = "1.0.1";
   name = pname + "-" + version;
 
   src = fetchurl {
     url = "mirror://pypi/s/sphfile/${name}.tar.gz";
-    sha256 = "1ly9746xrzbiax9cxr5sxlg0wvf6fdxcrgwsqqxckk3wnqfypfrd";
+    sha256 = "422b0704107b02ef3ca10e55ccdc80b0bb5ad8e2613b6442f8e2ea372c7cf5d8";
   };
 
   propagatedBuildInputs = [ numpy ];
diff --git a/pkgs/development/python-modules/sphinx/default.nix b/pkgs/development/python-modules/sphinx/default.nix
index 9e71766065c5..e4e9bfaba1cf 100644
--- a/pkgs/development/python-modules/sphinx/default.nix
+++ b/pkgs/development/python-modules/sphinx/default.nix
@@ -26,10 +26,10 @@
 
 buildPythonPackage rec {
   pname = "Sphinx";
-  version = "1.7.8";
+  version = "1.7.9";
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a07050845cc9a2f4026a6035cc8ed795a5ce7be6528bbc82032385c10807dfe7";
+    sha256 = "217a7705adcb573da5bbe1e0f5cab4fa0bd89fd9342c9159121746f593c2d5a4";
   };
   LC_ALL = "en_US.UTF-8";
 
diff --git a/pkgs/development/python-modules/sqlalchemy/default.nix b/pkgs/development/python-modules/sqlalchemy/default.nix
index 2f755869d796..e1c576f94276 100644
--- a/pkgs/development/python-modules/sqlalchemy/default.nix
+++ b/pkgs/development/python-modules/sqlalchemy/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "SQLAlchemy";
-  version = "1.2.11";
+  version = "1.2.12";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ef6569ad403520ee13e180e1bfd6ed71a0254192a934ec1dbd3dbf48f4aa9524";
+    sha256 = "c5951d9ef1d5404ed04bae5a16b60a0779087378928f997a294d1229c6ca4d3e";
   };
 
   checkInputs = [
diff --git a/pkgs/development/python-modules/sqlmap/default.nix b/pkgs/development/python-modules/sqlmap/default.nix
index 5713d7591dc6..2aeaa068a43b 100644
--- a/pkgs/development/python-modules/sqlmap/default.nix
+++ b/pkgs/development/python-modules/sqlmap/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "sqlmap";
-  version = "1.2.8";
+  version = "1.2.10";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "d261d93e7abed20543c261327d30b9f9936f0bed3c1a595f39218eeb66094526";
+    sha256 = "e64efce7f3b50cab02c8da968e00c1b456f59aff193d3dae2446d7c117723d53";
   };
 
   # No tests in archive
diff --git a/pkgs/development/python-modules/ssdeep/default.nix b/pkgs/development/python-modules/ssdeep/default.nix
new file mode 100644
index 000000000000..f06138b4c255
--- /dev/null
+++ b/pkgs/development/python-modules/ssdeep/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pkgs
+, cffi
+, six
+, pytest
+, pytestrunner
+}:
+
+buildPythonPackage rec {
+  pname = "ssdeep";
+  version = "3.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "255de1f034652b3ed21920221017e70e570b1644f9436fea120ae416175f4ef5";
+  };
+
+  buildInputs = [ pkgs.ssdeep pytestrunner ];
+  checkInputs = [ pytest ];
+  propagatedBuildInputs = [ cffi six ];
+
+  # tests repository does not include required files
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://github.com/DinoTools/python-ssdeep;
+    description = "Python wrapper for the ssdeep library";
+    license = licenses.lgpl3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/statsd/default.nix b/pkgs/development/python-modules/statsd/default.nix
new file mode 100644
index 000000000000..6d5d9df0a6fb
--- /dev/null
+++ b/pkgs/development/python-modules/statsd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, mock
+}:
+
+buildPythonPackage rec {
+  pname = "statsd";
+  version = "3.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "3fa92bf0192af926f7a0d9be031fe3fd0fbaa1992d42cf2f07e68f76ac18288e";
+  };
+
+  buildInputs = [ nose mock ];
+
+  patchPhase = ''
+    # Failing test: ERROR: statsd.tests.test_ipv6_resolution_udp
+    sed -i 's/test_ipv6_resolution_udp/noop/' statsd/tests.py
+    # well this is a noop, but so it was before
+    sed -i 's/assert_called_once()/called/' statsd/tests.py
+  '';
+
+  meta = with stdenv.lib; {
+    maintainers = with maintainers; [ domenkozar ];
+    description = "A simple statsd client";
+    license = licenses.mit;
+    homepage = https://github.com/jsocol/pystatsd;
+  };
+
+}
diff --git a/pkgs/development/python-modules/toml/default.nix b/pkgs/development/python-modules/toml/default.nix
index a80657dc4b45..9e408f2cb169 100644
--- a/pkgs/development/python-modules/toml/default.nix
+++ b/pkgs/development/python-modules/toml/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "toml";
-  version = "0.9.4";
+  version = "0.9.6";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf";
+    sha256 = "380178cde50a6a79f9d2cf6f42a62a5174febe5eea4126fe4038785f1d888d42";
   };
 
   # This package has a test script (built for Travis) that involves a)
diff --git a/pkgs/development/python-modules/uncompyle6/default.nix b/pkgs/development/python-modules/uncompyle6/default.nix
new file mode 100644
index 000000000000..89edc8f184ca
--- /dev/null
+++ b/pkgs/development/python-modules/uncompyle6/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, spark_parser
+, xdis
+}:
+
+buildPythonPackage rec {
+  pname = "uncompyle6";
+  version = "2.8.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0hx5sji6qjvnq1p0zhvyk5hgracpv2w6iar1j59qwllxv115ffi1";
+  };
+
+  propagatedBuildInputs = [ spark_parser xdis ];
+
+  meta = with stdenv.lib; {
+    description = "Python cross-version byte-code deparser";
+    homepage = https://github.com/rocky/python-uncompyle6/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/validictory/default.nix b/pkgs/development/python-modules/validictory/default.nix
new file mode 100644
index 000000000000..10808bffaab2
--- /dev/null
+++ b/pkgs/development/python-modules/validictory/default.nix
@@ -0,0 +1,23 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "validictory";
+  version = "1.0.0a2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "c02388a70f5b854e71e2e09bd6d762a2d8c2a017557562e866d8ffafb0934b07";
+  };
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Validate dicts against a schema";
+    homepage = https://github.com/sunlightlabs/validictory;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/venusian/default.nix b/pkgs/development/python-modules/venusian/default.nix
new file mode 100644
index 000000000000..14d678be892d
--- /dev/null
+++ b/pkgs/development/python-modules/venusian/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, pytest
+}:
+
+buildPythonPackage rec {
+  pname = "venusian";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "9902e492c71a89a241a18b2f9950bea7e41d025cc8f3af1ea8d8201346f8577d";
+  };
+
+  checkInputs = [ pytest ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A library for deferring decorator actions";
+    homepage = http://pylonsproject.org/;
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+}
diff --git a/pkgs/development/python-modules/warlock/default.nix b/pkgs/development/python-modules/warlock/default.nix
new file mode 100644
index 000000000000..0f75be8be177
--- /dev/null
+++ b/pkgs/development/python-modules/warlock/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, six
+, jsonpatch
+, jsonschema
+, jsonpointer
+}:
+
+buildPythonPackage rec {
+  pname = "warlock";
+  version = "1.2.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0npgi4ks0nww2d6ci791iayab0j6kz6dx3jr7bhpgkql3s4if3bw";
+  };
+
+  propagatedBuildInputs = [ six jsonpatch jsonschema jsonpointer ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/bcwaldon/warlock;
+    description = "Python object model built on JSON schema and JSON patch";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/watchdog/default.nix b/pkgs/development/python-modules/watchdog/default.nix
new file mode 100644
index 000000000000..1e5e5653b9d8
--- /dev/null
+++ b/pkgs/development/python-modules/watchdog/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, argh
+, pathtools
+, pyyaml
+, pkgs
+}:
+
+buildPythonPackage rec {
+  pname = "watchdog";
+  version = "0.8.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0qj1vqszxwfx6d1s66s96jmfmy2j94bywxiqdydh6ikpvcm8hrby";
+  };
+
+  buildInputs = stdenv.lib.optionals stdenv.isDarwin
+    [ pkgs.darwin.apple_sdk.frameworks.CoreServices pkgs.darwin.cf-private ];
+  propagatedBuildInputs = [ argh pathtools pyyaml ];
+
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "Python API and shell utilities to monitor file system events";
+    homepage = https://github.com/gorakhargosh/watchdog;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ goibhniu ];
+  };
+
+}
diff --git a/pkgs/development/python-modules/whisper/default.nix b/pkgs/development/python-modules/whisper/default.nix
index 4d48b63da54a..1fb9dd6da16a 100644
--- a/pkgs/development/python-modules/whisper/default.nix
+++ b/pkgs/development/python-modules/whisper/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "whisper";
-  version = "1.1.3";
+  version = "1.1.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "1ahzsxk52ws8k3kdq52qbsbsx2r9z350j8gg9adw4x5fjwksz4r8";
+    sha256 = "ee9128873b5f9c97d258d35d0a32ef8e62c9da473fbbd056982df1f36f0b37aa";
   };
 
   propagatedBuildInputs = [ six ];
diff --git a/pkgs/development/python-modules/widgetsnbextension/default.nix b/pkgs/development/python-modules/widgetsnbextension/default.nix
index db992c7b932c..ab2bd9c4eb18 100644
--- a/pkgs/development/python-modules/widgetsnbextension/default.nix
+++ b/pkgs/development/python-modules/widgetsnbextension/default.nix
@@ -7,11 +7,11 @@
 
 buildPythonPackage rec {
   pname = "widgetsnbextension";
-  version = "3.4.0";
+  version = "3.4.2";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "c9d6e426a1d79d132b57b93b368feba2c66eb7b0fd34bdb901716b4b88e94497";
+    sha256 = "fa618be8435447a017fd1bf2c7ae922d0428056cfc7449f7a8641edf76b48265";
   };
 
   propagatedBuildInputs = [ notebook ];
diff --git a/pkgs/development/python-modules/wtforms/default.nix b/pkgs/development/python-modules/wtforms/default.nix
new file mode 100644
index 000000000000..40f0b6554515
--- /dev/null
+++ b/pkgs/development/python-modules/wtforms/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, Babel
+}:
+
+buildPythonPackage rec {
+  version = "2.1";
+  pname = "wtforms";
+
+  src = fetchPypi {
+    inherit pname version;
+    extension = "zip";
+    sha256 = "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz";
+  };
+
+  # Django tests are broken "django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet."
+  # This is fixed in master I believe but not yet in 2.1;
+  doCheck = false;
+
+  propagatedBuildInputs = [ Babel ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/wtforms/wtforms;
+    description = "A flexible forms validation and rendering library for Python";
+    license = licenses.bsd3;
+  };
+
+}
diff --git a/pkgs/development/python-modules/xarray/default.nix b/pkgs/development/python-modules/xarray/default.nix
index c443c8fc880a..7a54b1f33ed1 100644
--- a/pkgs/development/python-modules/xarray/default.nix
+++ b/pkgs/development/python-modules/xarray/default.nix
@@ -9,11 +9,11 @@
 
 buildPythonPackage rec {
   pname = "xarray";
-  version = "0.10.8";
+  version = "0.10.9";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "6a1f2c5dc5f639f8343f70ed08d0afbb477a3867298ef38f0d9bf4aafa0fb750";
+    sha256 = "cb3028ba157e1953fd279bbe17c07bb5faa459ddf555bbe687c927e4cdfeecc3";
   };
 
   checkInputs = [ pytest ];
diff --git a/pkgs/development/python-modules/xdis/default.nix b/pkgs/development/python-modules/xdis/default.nix
new file mode 100644
index 000000000000..5973414f8dc5
--- /dev/null
+++ b/pkgs/development/python-modules/xdis/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, nose
+, six
+}:
+
+buildPythonPackage rec {
+  pname = "xdis";
+  version = "3.2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0g2lh70837vigcbc1i58349wp2xzrhlsg2ahc92sn8d3jwxja4dk";
+  };
+
+  propagatedBuildInputs = [ nose six ];
+
+  meta = with stdenv.lib; {
+    description = "Python cross-version byte-code disassembler and marshal routines";
+    homepage = https://github.com/rocky/python-xdis/;
+    license = licenses.mit;
+  };
+
+}
diff --git a/pkgs/development/python-modules/xml2rfc/default.nix b/pkgs/development/python-modules/xml2rfc/default.nix
index 291b981bf475..1338de7e67cd 100644
--- a/pkgs/development/python-modules/xml2rfc/default.nix
+++ b/pkgs/development/python-modules/xml2rfc/default.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "xml2rfc";
-  version = "2.10.0";
+  version = "2.10.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dc62e1d2fea896855ee0681f02bcb7596e3b6b5aa559348b8520a4eb0c793282";
+    sha256 = "ace45039e9d71713b4bb09ea199644797a7d884fbdd940e4c02559b4bccb01a1";
   };
 
   propagatedBuildInputs = [ intervaltree pyflakes requests lxml ];
diff --git a/pkgs/development/python-modules/xstatic-bootstrap/default.nix b/pkgs/development/python-modules/xstatic-bootstrap/default.nix
index f648df6c570e..a474bf84d0fd 100644
--- a/pkgs/development/python-modules/xstatic-bootstrap/default.nix
+++ b/pkgs/development/python-modules/xstatic-bootstrap/default.nix
@@ -9,7 +9,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "0cgihyjb9rg6r2ddpzbjm31y0901vyc8m9h3v0zrhxydx1w9x50c";
+    sha256 = "0c949e78e8cd77983fd803a68a98df0124e0c3a872fddb9ac8e6e5b4a487f131";
   };
 
   # no tests implemented
diff --git a/pkgs/development/python-modules/xstatic-jquery-ui/default.nix b/pkgs/development/python-modules/xstatic-jquery-ui/default.nix
index d411119bbfa2..3424c8fcf6f2 100644
--- a/pkgs/development/python-modules/xstatic-jquery-ui/default.nix
+++ b/pkgs/development/python-modules/xstatic-jquery-ui/default.nix
@@ -10,7 +10,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "0449rkjcksq49yjyyszz9v11wa4nmvvfw0mynayah8248yxlifnn";
+    sha256 = "d6ba48bb474420a8bcb2be02eef6ae96281ec24eff6befa54f04ebc9e4cc8910";
   };
 
   # no tests implemented
diff --git a/pkgs/development/python-modules/xstatic/default.nix b/pkgs/development/python-modules/xstatic/default.nix
index 4410525a3d4d..bbfcce54d890 100644
--- a/pkgs/development/python-modules/xstatic/default.nix
+++ b/pkgs/development/python-modules/xstatic/default.nix
@@ -9,7 +9,7 @@ buildPythonPackage rec {
 
   src = fetchPypi {
     inherit version pname;
-    sha256 = "1a13i9b62qfmqz04gpa6kcwwy2x8fm9wcr1x6kjdxrmw6zz8vdw0";
+    sha256 = "80b78dfe37bce6dee4343d64c65375a80bcf399b46dd47c0c7d56161568a23a8";
   };
 
   # no tests implemented
diff --git a/pkgs/development/python-modules/zake/default.nix b/pkgs/development/python-modules/zake/default.nix
new file mode 100644
index 000000000000..143f609d8338
--- /dev/null
+++ b/pkgs/development/python-modules/zake/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, kazoo
+, six
+, testtools
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "zake";
+  version = "0.2.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1rp4xxy7qp0s0wnq3ig4ji8xsl31g901qkdp339ndxn466cqal2s";
+  };
+
+  propagatedBuildInputs = [ kazoo six ];
+  buildInputs = [ testtools ];
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover zake/tests
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/yahoo/Zake";
+    description = "A python package that works to provide a nice set of testing utilities for the kazoo library";
+    license = licenses.asl20;
+  };
+
+}
diff --git a/pkgs/development/python-modules/zetup/default.nix b/pkgs/development/python-modules/zetup/default.nix
index 8fc15c5da6fa..99d05a359631 100644
--- a/pkgs/development/python-modules/zetup/default.nix
+++ b/pkgs/development/python-modules/zetup/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "zetup";
-  version = "0.2.43";
+  version = "0.2.45";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "ee92ba93a03336962525536f237ae0decf99a9b5d484ba34a3cf06ef017dae8e";
+    sha256 = "f1cde33d0ef3bedaf697e432201fa86da698dadd3445c0efd2a114753853c675";
   };
 
   checkPhase = ''
diff --git a/pkgs/development/python-modules/zope_deprecation/default.nix b/pkgs/development/python-modules/zope_deprecation/default.nix
new file mode 100644
index 000000000000..ddc486918fb2
--- /dev/null
+++ b/pkgs/development/python-modules/zope_deprecation/default.nix
@@ -0,0 +1,25 @@
+{ stdenv
+, buildPythonPackage
+, fetchPypi
+, zope_testing
+}:
+
+buildPythonPackage rec {
+  pname = "zope.deprecation";
+  version = "4.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "fed622b51ffc600c13cc5a5b6916b8514c115f34f7ea2730409f30c061eb0b78";
+  };
+
+  buildInputs = [ zope_testing ];
+
+  meta = with stdenv.lib; {
+    homepage = http://github.com/zopefoundation/zope.deprecation;
+    description = "Zope Deprecation Infrastructure";
+    license = licenses.zpl20;
+    maintainers = with maintainers; [ garbas domenkozar ];
+  };
+
+}
diff --git a/pkgs/development/tools/analysis/egypt/default.nix b/pkgs/development/tools/analysis/egypt/default.nix
index 07bcd57a121a..defc39a9f749 100644
--- a/pkgs/development/tools/analysis/egypt/default.nix
+++ b/pkgs/development/tools/analysis/egypt/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchurl, buildPerlPackage }:
+{ stdenv, fetchurl, perlPackages }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "egypt-${version}";
   version = "1.10";
 
diff --git a/pkgs/development/tools/misc/intltool/default.nix b/pkgs/development/tools/misc/intltool/default.nix
index 67180b08f026..a9f451d31e7d 100644
--- a/pkgs/development/tools/misc/intltool/default.nix
+++ b/pkgs/development/tools/misc/intltool/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, gettext, perl, perlXMLParser }:
+{ stdenv, fetchurl, fetchpatch, gettext, perlPackages }:
 
 stdenv.mkDerivation rec {
   name = "intltool-${version}";
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
     sha256 = "12q2140867r5d0dysly72khi7b0mm2gd7nlm1k81iyg7fxgnyz45";
   })];
 
-  propagatedBuildInputs = [ gettext perl perlXMLParser ];
+  propagatedBuildInputs = [ gettext ] ++ (with perlPackages; [ perl XMLParser ]);
 
   meta = with stdenv.lib; {
     description = "Translation helper tool";
diff --git a/pkgs/development/tools/misc/ninka/default.nix b/pkgs/development/tools/misc/ninka/default.nix
index 9cd1a56e68fe..df793866cbb8 100644
--- a/pkgs/development/tools/misc/ninka/default.nix
+++ b/pkgs/development/tools/misc/ninka/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchFromGitHub, perl, perlPackages, buildPerlPackage }:
+{ stdenv, fetchFromGitHub, perl, perlPackages }:
 
 assert stdenv ? glibc;
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "ninka-${version}";
   version = "2.0-pre";
 
@@ -12,7 +12,7 @@ buildPerlPackage rec {
     rev = "b89b59ecd057dfc939d0c75acaddebb58fcd8cba";
     sha256 = "1grlis1kycbcjvjgqvn7aw81q1qx49ahvxg2k7cgyr79mvgpgi9m";
   };
-  
+
   buildInputs = with perlPackages; [ perl TestOutput DBDSQLite DBI TestPod TestPodCoverage SpreadsheetParseExcel ];
 
   doCheck = false;    # hangs
diff --git a/pkgs/servers/mail/postfix/pflogsumm.nix b/pkgs/servers/mail/postfix/pflogsumm.nix
index 3d48e9527819..821999380606 100644
--- a/pkgs/servers/mail/postfix/pflogsumm.nix
+++ b/pkgs/servers/mail/postfix/pflogsumm.nix
@@ -1,7 +1,6 @@
-{ stdenv, fetchurl, buildPerlPackage, perlPackages
-}:
+{ stdenv, fetchurl, perlPackages }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "pflogsumm-${version}";
   version = "1.1.3";
 
diff --git a/pkgs/servers/mail/spamassassin/default.nix b/pkgs/servers/mail/spamassassin/default.nix
index acbc50fd42bf..d32957210132 100644
--- a/pkgs/servers/mail/spamassassin/default.nix
+++ b/pkgs/servers/mail/spamassassin/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, buildPerlPackage, perl, perlPackages, HTMLParser, NetDNS, NetAddrIP, DBFile
+{ stdenv, fetchurl, perl, perlPackages, HTMLParser, NetDNS, NetAddrIP, DBFile
 , HTTPDate, MailDKIM, LWP, IOSocketSSL, makeWrapper, gnupg1
 }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "SpamAssassin-3.4.1";
 
   src = fetchurl {
diff --git a/pkgs/servers/monitoring/fusion-inventory/default.nix b/pkgs/servers/monitoring/fusion-inventory/default.nix
index d9e8ccf1454f..33725cb62839 100644
--- a/pkgs/servers/monitoring/fusion-inventory/default.nix
+++ b/pkgs/servers/monitoring/fusion-inventory/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, lib, fetchurl, buildPerlPackage, perlPackages, nix, dmidecode, pciutils, usbutils, iproute, nettools
+{ stdenv, lib, fetchurl, perlPackages, nix, dmidecode, pciutils, usbutils, iproute, nettools
 , fetchFromGitHub, makeWrapper
 }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "FusionInventory-Agent-${version}";
   version = "2.3.21";
 
diff --git a/pkgs/servers/openxpki/default.nix b/pkgs/servers/openxpki/default.nix
index ccfbbd60903b..2b1000d0d851 100644
--- a/pkgs/servers/openxpki/default.nix
+++ b/pkgs/servers/openxpki/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildPerlPackage, fetchgit, perl, openssl, perlPackages, gettext, python3Packages
+{ stdenv, fetchgit, perl, openssl, perlPackages, gettext, python3Packages
 # TODO: Remove extra dependencies once it is clear that they are NOT needed somewhere.
 , extraDependencies1 ? false, extraDependencies2 ? false, extraDependencies3 ? false }:
 
-buildPerlPackage {
+perlPackages.buildPerlPackage {
   name = "openxpki-git20150807";
 
   src = fetchgit {
diff --git a/pkgs/servers/slimserver/default.nix b/pkgs/servers/slimserver/default.nix
index cf0fddd6699b..fe14f0f33c81 100644
--- a/pkgs/servers/slimserver/default.nix
+++ b/pkgs/servers/slimserver/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, buildPerlPackage, fetchurl, fetchpatch, makeWrapper
+{ stdenv, fetchurl, fetchpatch, makeWrapper
 , perl, perlPackages, flac, faad2, sox, lame, monkeysAudio, wavpack }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "slimserver-${version}";
   version = "7.9.1";
 
diff --git a/pkgs/servers/sql/mariadb/default.nix b/pkgs/servers/sql/mariadb/default.nix
index b7793c1ac56f..d2a4406a9730 100644
--- a/pkgs/servers/sql/mariadb/default.nix
+++ b/pkgs/servers/sql/mariadb/default.nix
@@ -180,11 +180,11 @@ everything = stdenv.mkDerivation (common // {
 
 connector-c = stdenv.mkDerivation rec {
   name = "mariadb-connector-c-${version}";
-  version = "2.3.6";
+  version = "2.3.7";
 
   src = fetchurl {
     url = "https://downloads.mariadb.org/interstitial/connector-c-${version}/mariadb-connector-c-${version}-src.tar.gz/from/http%3A//nyc2.mirrors.digitalocean.com/mariadb/";
-    sha256 = "15iy5iqp0njbwbn086x2dq8qnbkaci7ydvi84cf5z8fxvljis9vb";
+    sha256 = "13izi35vvxhiwl2dsnqrz75ciisy2s2k30giv7hrm01qlwnmiycl";
     name   = "mariadb-connector-c-${version}-src.tar.gz";
   };
 
diff --git a/pkgs/tools/graphics/feedgnuplot/default.nix b/pkgs/tools/graphics/feedgnuplot/default.nix
index fef5c657a7a2..4ff769eadf54 100644
--- a/pkgs/tools/graphics/feedgnuplot/default.nix
+++ b/pkgs/tools/graphics/feedgnuplot/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, buildPerlPackage, makeWrapper, gawk
+{ stdenv, fetchFromGitHub, makeWrapper, gawk
 , makeFontsConf, freefont_ttf, gnuplot, perl, perlPackages
 }:
 
@@ -8,7 +8,7 @@ let
 
 in
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "feedgnuplot-${version}";
   version = "1.51";
 
diff --git a/pkgs/tools/graphics/graph-easy/default.nix b/pkgs/tools/graphics/graph-easy/default.nix
index 9b4c46779626..c21fc02753ec 100644
--- a/pkgs/tools/graphics/graph-easy/default.nix
+++ b/pkgs/tools/graphics/graph-easy/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, buildPerlPackage, fetchurl }:
+{ stdenv, perlPackages, fetchurl }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "Graph-Easy-${version}";
   version = "0.76";
   src = fetchurl {
diff --git a/pkgs/tools/misc/rename/default.nix b/pkgs/tools/misc/rename/default.nix
index 3f2a66bf4c82..89f76bb9b1b1 100644
--- a/pkgs/tools/misc/rename/default.nix
+++ b/pkgs/tools/misc/rename/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, buildPerlPackage }:
+{ stdenv, fetchFromGitHub, perlPackages }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "rename-${version}";
   version = "1.9";
   outputs = [ "out" ];
diff --git a/pkgs/tools/networking/ddclient/default.nix b/pkgs/tools/networking/ddclient/default.nix
index 93828c10d135..14de1fea4790 100644
--- a/pkgs/tools/networking/ddclient/default.nix
+++ b/pkgs/tools/networking/ddclient/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, buildPerlPackage, fetchurl, perlPackages, iproute }:
+{ stdenv, fetchurl, perlPackages, iproute }:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "ddclient-${version}";
   version = "3.8.3";
 
diff --git a/pkgs/tools/virtualization/linode-cli/default.nix b/pkgs/tools/virtualization/linode-cli/default.nix
index 12852265c406..c4fb74cf1a1d 100644
--- a/pkgs/tools/virtualization/linode-cli/default.nix
+++ b/pkgs/tools/virtualization/linode-cli/default.nix
@@ -1,6 +1,6 @@
-{ stdenv, fetchFromGitHub, buildPerlPackage, perlPackages, makeWrapper}:
+{ stdenv, fetchFromGitHub, perlPackages, makeWrapper}:
 
-buildPerlPackage rec {
+perlPackages.buildPerlPackage rec {
   name = "linode-cli-${version}";
   version = "1.4.7";
 
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index 624f2fa9d2c2..0f243df540da 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -54,6 +54,7 @@ mapAliases ({
   buildbot-pkg = pythonPackages.buildbot-pkg; # added 2018-10-11
   buildbot-ui = pythonPackages.buildbot-ui; # added 2018-10-11
   buildbot-worker = pythonPackages.buildbot-worker; # added 2018-10-11
+  buildPerlPackage = perlPackages.buildPerlPackage; # added 2018-10-12
   bundler_HEAD = bundler; # added 2015-11-15
   cantarell_fonts = cantarell-fonts; # added 2018-03-03
   checkbashism = checkbashisms; # added 2016-08-16
@@ -209,6 +210,8 @@ mapAliases ({
   p11_kit = p11-kit; # added 2018-02-25
   parquet-cpp = arrow-cpp; # added 2018-09-08
   pass-otp = pass.withExtensions (ext: [ext.pass-otp]); # added 2018-05-04
+  perlXMLParser = perlPackages.XMLParser; # added 2018-10-12
+  perlArchiveCpio = perlPackages.ArchiveCpio; # added 2018-10-12
   pgp-tools = signing-party; # added 2017-03-26
   pidgin-with-plugins = pidgin; # added 2016-06
   pidginlatex = pidgin-latex; # added 2018-01-08
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 2ca12678c55d..0ce94155af96 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5038,9 +5038,7 @@ with pkgs;
     gsettings-desktop-schemas = gnome3.gsettings-desktop-schemas;
   };
 
-  rename = callPackage ../tools/misc/rename {
-    inherit (perlPackages) buildPerlPackage;
-  };
+  rename = callPackage ../tools/misc/rename { };
 
   renameutils = callPackage ../tools/misc/renameutils { };
 
@@ -12964,14 +12962,10 @@ with pkgs;
   });
 
   perlPackages = perl528Packages;
-  inherit (perlPackages) perl buildPerlPackage;
-
-  perlXMLParser = perlPackages.XMLParser;
+  inherit (perlPackages) perl;
 
   ack = perlPackages.ack;
 
-  perlArchiveCpio = perlPackages.ArchiveCpio;
-
   perlcritic = perlPackages.PerlCritic;
 
   sqitchPg = callPackage ../development/tools/misc/sqitch {
diff --git a/pkgs/top-level/perl-packages.nix b/pkgs/top-level/perl-packages.nix
index cb89fcac9244..023f4eaf3dcc 100644
--- a/pkgs/top-level/perl-packages.nix
+++ b/pkgs/top-level/perl-packages.nix
@@ -8072,7 +8072,7 @@ let
       sha256 = "0nlgdzy40q26z8qhwngsd461glyai8dpwaccyhiljmrkaqwdjxz2";
     };
     # Do not abort cross-compilation on failure to load native JSON module into host perl
-    preConfigure = ''
+    preConfigure = stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
       substituteInPlace Makefile.PL --replace "exit 0;" ""
     '';
     buildInputs = [ TestPod ];
@@ -8915,6 +8915,10 @@ let
       sha256 = "dda2578d7b32152c4afce834761a61d117de286c705a9f7972c7ac6032ca5953";
     };
     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)
+    postPatch = stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+      substituteInPlace Makefile.PL --replace 'if has_module' 'if 0; #'
+    '';
     meta = with stdenv.lib; {
       description = "The World-Wide Web library for Perl";
       license = with licenses; [ artistic1 gpl1Plus ];
@@ -11183,7 +11187,7 @@ let
       url = "mirror://cpan/authors/id/D/DA/DANBERR/${name}.tar.gz";
       sha256 = "8391696db9e96c374b72984c0bad9c7d1c9f3b4efe68f9ddf429a77548e0e269";
     };
-    nativeBuildInputs = [ pkgs.pkgconfig ];
+    nativeBuildInputs = [ pkgs.buildPackages.pkgconfig ];
     buildInputs = [ pkgs.dbus TestPod TestPodCoverage ];
     propagatedBuildInputs = [ XMLTwig ];
     meta = {
@@ -17686,9 +17690,11 @@ let
       url = mirror://cpan/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz;
       sha256 = "05ij0g6bfn27iaggxf8nl5rhlwx6f6p6xmdav6rjcly3x5zd1s8s";
     };
-    patchPhase = if stdenv.isCygwin then ''
+    patchPhase = stdenv.lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+      substituteInPlace Expat/Makefile.PL --replace 'use English;' '#'
+    '' + stdenv.lib.optionalString stdenv.isCygwin ''
       sed -i"" -e "s@my \$compiler = File::Spec->catfile(\$path, \$cc\[0\]) \. \$Config{_exe};@my \$compiler = File::Spec->catfile(\$path, \$cc\[0\]) \. (\$^O eq 'cygwin' ? \"\" : \$Config{_exe});@" inc/Devel/CheckLib.pm
-    '' else null;
+    '';
     makeMakerFlags = "EXPATLIBPATH=${pkgs.expat.out}/lib EXPATINCPATH=${pkgs.expat.dev}/include";
     propagatedBuildInputs = [ LWP ];
   };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 04b75871559b..6c495cdabdee 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -870,99 +870,19 @@ in {
 
   bibtexparser = callPackage ../development/python-modules/bibtexparser { };
 
-  binwalk_fun = { visualizationSupport ? false, pyqtgraph ? null }:
-    assert visualizationSupport -> pyqtgraph != null;
+  binwalk = callPackage ../development/python-modules/binwalk { };
 
-    buildPythonPackage rec {
-    name = "binwalk-${version}";
-    version = "2.1.1";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "devttys0";
-      repo = "binwalk";
-      rev = "291a03595d17f848c73b74cb6ca508da782cd8f7";
-      sha256 = "0grid93yz6i6jb2zggrqncp5awdf7qi88j5y2k7dq0k9r6b8zydw";
-    };
-
-    propagatedBuildInputs = with stdenv.lib; with pkgs; [ zlib xz ncompress gzip bzip2 gnutar p7zip cabextract lzma self.pycrypto ]
-      ++ optional visualizationSupport pyqtgraph;
-
-    meta = with stdenv.lib; {
-      homepage = "http://binwalk.org";
-      description = "A tool for searching a given binary image for embedded files";
-      platforms = platforms.all;
-      maintainers = [ maintainers.koral ];
-    };
-  };
-
-  binwalk = self.binwalk_fun { };
-  binwalk-full = self.binwalk_fun { visualizationSupport = true; pyqtgraph = self.pyqtgraph; };
+  binwalk-full = appendToName "full" (self.binwalk.override {
+    pyqtgraph = self.pyqtgraph;
+  });
 
   bitmath = callPackage ../development/python-modules/bitmath { };
 
-  caldavclientlibrary-asynk = buildPythonPackage rec {
-    version = "asynkdev";
-    name = "caldavclientlibrary-asynk-${version}";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/skarra/CalDAVClientLibrary.git";
-      rev = "06699b08190d50cc2636b921a654d67db0a967d1";
-      sha256 = "157q32251ac9x3gdshgrjwsy48nq74vrzviswvph56h9wa8ksnnk";
-    };
-
-    disabled = isPy3k;
-
-    meta = {
-      description = "A Python library and tool for CalDAV";
-
-      longDescription = ''
-        CalDAVCLientLibrary is a Python library and tool for CalDAV.
-
-        This package is the unofficial CalDAVCLientLibrary Python
-        library maintained by the author of Asynk and is needed for
-        that package.
-      '';
-
-      homepage = https://github.com/skarra/CalDAVClientLibrary/tree/asynkdev/;
-      maintainers = with maintainers; [ pjones ];
-      broken = true; # 2018-04-11
-    };
-  };
+  caldavclientlibrary-asynk = callPackage ../development/python-modules/caldavclientlibrary-asynk { };
 
   biopython = callPackage ../development/python-modules/biopython { };
 
-  bedup = buildPythonPackage rec {
-    version = "0.10.1";
-    name = "bedup-${version}";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "g2p";
-      repo = "bedup";
-      rev = "v${version}";
-      sha256 = "0sp8pmjkxcqq0alianfp41mwq7qj10rk1qy31pjjp9kiph1rn0x6";
-    };
-
-    buildInputs = with self; [ pkgs.btrfs-progs ];
-    propagatedBuildInputs = with self; [ contextlib2 pyxdg pycparser alembic ]
-      ++ optionals (!isPyPy) [ cffi ];
-
-    disabled = pythonOlder "3.3";
-
-    meta = {
-      description = "Deduplication for Btrfs";
-      longDescription = ''
-        Deduplication for Btrfs. bedup looks for new and changed files, making sure that multiple
-        copies of identical files share space on disk. It integrates deeply with btrfs so that scans
-        are incremental and low-impact.
-      '';
-      homepage = https://github.com/g2p/bedup;
-      license = licenses.gpl2;
-
-      platforms = platforms.linux;
-
-      maintainers = with maintainers; [ bluescreen303 ];
-    };
-  };
+  bedup = callPackage ../development/python-modules/bedup { };
 
   blessed = callPackage ../development/python-modules/blessed {};
 
@@ -985,33 +905,7 @@ in {
     numpy = self.numpy;
   };
 
-  capstone = buildPythonPackage rec {
-    name = "capstone-3.0.4";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/c/capstone/${name}.tar.gz";
-      sha256 = "945d3b8c3646a1c3914824c416439e2cf2df8969dd722c8979cdcc23b40ad225";
-    };
-    patches = [
-      (pkgs.fetchpatch {
-        stripLen = 2;
-        url = "https://patch-diff.githubusercontent.com/raw/aquynh/capstone/pull/783/commits/23fe9f36622573c747e2bab6119ff245437bf276.patch";
-        sha256 = "0yizqrdlxqxn16873593kdx2vrr7gvvilhgcf9xy6hr0603d3m5r";
-      })
-    ];
-    postPatch = ''
-      patchShebangs src/make.sh
-    '';
-    propagatedBuildInputs = [ ];
-    preCheck = ''
-      mv src/libcapstone.so capstone
-    '';
-    meta = with pkgs.stdenv.lib; {
-      homepage = "http://www.capstone-engine.org/";
-      license = licenses.bsdOriginal;
-      description = "Capstone disassembly engine";
-      maintainers = with maintainers; [ bennofs ];
-    };
-  };
+  capstone = callPackage ../development/python-modules/capstone { };
 
   cement = callPackage ../development/python-modules/cement {};
 
@@ -1039,19 +933,7 @@ in {
 
   constantly = callPackage ../development/python-modules/constantly { };
 
-  cornice = buildPythonPackage rec {
-    name = "cornice-${version}";
-    version = "1.2.1";
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/cornice.git;
-      rev = "refs/tags/${version}";
-      sha256 = "0688vrkl324jmpi8jkjh1s8nsyjinw149g3x8qlis8vz6j6a01wv";
-    };
-
-    propagatedBuildInputs = with self; [ pyramid simplejson ];
-
-    doCheck = false; # lazy packager
-  };
+  cornice = callPackage ../development/python-modules/cornice { };
 
   cram = callPackage ../development/python-modules/cram { };
 
@@ -1135,35 +1017,7 @@ in {
 
   bpython = callPackage ../development/python-modules/bpython {};
 
-  bsddb3 = buildPythonPackage rec {
-    name = "bsddb3-${version}";
-    version = "6.1.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/b/bsddb3/${name}.tar.gz";
-      sha256 = "6f21b0252125c07798d784c164ef135ad153d226c01b290258ee1c5b9e7c4dd3";
-    };
-
-    buildInputs = [ pkgs.db ];
-
-    # Judging from SyntaxError in test
-#    disabled = isPy3k;
-    doCheck = false; # test suite breaks python3 compatibility
-
-    # Path to database need to be set.
-    # Somehow the setup.py flag is not propagated.
-    #setupPyBuildFlags = [ "--berkeley-db=${pkgs.db}" ];
-    # We can also use a variable
-    preConfigure = ''
-      export BERKELEYDB_DIR=${pkgs.db.dev};
-    '';
-
-    meta = {
-      description = "Python bindings for Oracle Berkeley DB";
-      homepage = https://www.jcea.es/programacion/pybsddb.htm;
-      license = with licenses; [ agpl3 ]; # License changed from bsd3 to agpl3 since 6.x
-    };
-  };
+  bsddb3 = callPackage ../development/python-modules/bsddb3 { };
 
   bkcharts = callPackage ../development/python-modules/bkcharts { };
 
@@ -1177,53 +1031,13 @@ in {
 
   bottle = callPackage ../development/python-modules/bottle { };
 
-  box2d = buildPythonPackage rec {
-    name = "box2d-${version}";
-    version = "2.3b0";
-    disabled = (!isPy27);
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/B/Box2D/Box2D-2.3b0.zip";
-      sha256 = "4519842c650b0153550eb0c9864da46b5a4ec8555c68b70f5cd2952a21c788b0";
-    };
-
-    patches = [ ../development/python-modules/box2d/disable-test.patch ];
-
-    propagatedBuildInputs = [ pkgs.swig2 pkgs.box2d ];
-
-    meta = {
-      homepage = https://code.google.com/p/pybox2d/;
-      description = ''
-        A 2D game physics library for Python under
-        the very liberal zlib license
-      '';
-      license = licenses.zlib;
-      platforms = platforms.all;
-      maintainers = with maintainers; [ sepi ];
-    };
-  };
+  box2d = callPackage ../development/python-modules/box2d { pkgs-box2d = pkgs.box2d; };
 
   branca = callPackage ../development/python-modules/branca { };
 
   bugwarrior = callPackage ../development/python-modules/bugwarrior { };
 
-  # bugz = buildPythonPackage (rec {
-  #   name = "bugz-0.9.3";
-  #
-  #   src = pkgs.fetchgit {
-  #     url = "https://github.com/williamh/pybugz.git";
-  #     rev = "refs/tags/0.9.3";
-  #   };
-  #
-  #   propagatedBuildInputs = with self; [ self.argparse ];
-  #
-  #   doCheck = false;
-  #
-  #   meta = {
-  #     homepage = http://www.liquidx.net/pybugz/;
-  #     description = "Command line interface for Bugzilla";
-  #   };
-  # });
+  bugz = callPackage ../development/python-modules/bugz { };
 
   bugzilla = callPackage ../development/python-modules/bugzilla { };
 
@@ -1260,87 +1074,13 @@ in {
 
   case = callPackage ../development/python-modules/case {};
 
-  cassandra-driver = buildPythonPackage rec {
-    name = "cassandra-driver-3.6.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/c/cassandra-driver/${name}.tar.gz";
-      sha256 = "1aqmy3psn12lxgp659d0zsxkirxzy5lnbnzxf9xjq1a93s3qm704";
-    };
-
-    buildInputs = with self; [ pkgs.libev cython ];
-
-    propagatedBuildInputs = with self; [ futures six ];
-
-    postPatch = ''
-      sed -i "s/<=1.0.1//" setup.py
-    '';
-
-    checkPhase = ''
-      ${python.interpreter} setup.py gevent_nosetests
-      ${python.interpreter} setup.py eventlet_nosetests
-    '';
-
-    checkInputs = [ scales eventlet twisted mock gevent nose pytz pyyaml sure ];
-
-    # Could not get tests running
-    doCheck = false;
-
-    meta = {
-      homepage = http://datastax.github.io/python-driver/;
-      description = "A Python client driver for Apache Cassandra";
-      license = licenses.asl20;
-    };
-  };
+  cassandra-driver = callPackage ../development/python-modules/cassandra-driver { };
 
   cccolutils = callPackage ../development/python-modules/cccolutils {};
 
-  CDDB = buildPythonPackage rec {
-    name = "CDDB-1.4";
-
-    disabled = !isPy27;
-
-    buildInputs = optionals stdenv.isDarwin [ pkgs.darwin.apple_sdk.frameworks.IOKit ];
-
-    src = pkgs.fetchurl {
-      url = "http://cddb-py.sourceforge.net/${name}.tar.gz";
-      sha256 = "098xhd575ibvdx7i3dny3lwi851yxhjg2hn5jbbgrwj833rg5l5w";
-    };
-
-    meta = {
-      homepage = http://cddb-py.sourceforge.net/;
-      description = "CDDB and FreeDB audio CD track info access";
-      license = licenses.gpl2Plus;
-    };
-  };
-
-  cntk = buildPythonPackage rec {
-    inherit (pkgs.cntk) name version src meta;
-
-    buildInputs = [ pkgs.cntk pkgs.swig pkgs.openmpi ];
-    propagatedBuildInputs = with self; [ numpy scipy enum34 protobuf pip ];
+  CDDB = callPackage ../development/python-modules/cddb { };
 
-    CNTK_LIB_PATH = "${pkgs.cntk}/lib";
-    CNTK_COMPONENT_VERSION = pkgs.cntk.version;
-
-    postPatch = ''
-      cd bindings/python
-      sed -i 's,"libmpi.so.12","${pkgs.openmpi}/lib/libmpi.so",g' cntk/train/distributed.py
-    '';
-
-    postInstall = ''
-      rm -rf $out/${python.sitePackages}/cntk/libs
-      ln -s ${pkgs.cntk}/lib $out/${python.sitePackages}/cntk/libs
-      # It's not installed for some reason.
-      cp cntk/cntk_py.py $out/${python.sitePackages}/cntk
-    '';
-
-    # Actual tests are broken.
-    checkPhase = ''
-      cd $NIX_BUILD_TOP
-      ${python.interpreter} -c "import cntk"
-    '';
-  };
+  cntk = callPackage ../development/python-modules/cntk { };
 
   celery = callPackage ../development/python-modules/celery { };
 
@@ -1378,29 +1118,7 @@ in {
 
   cligj = callPackage ../development/python-modules/cligj { };
 
-  /* There is a project called "closure-linter" on PyPI that is the
-     same as this, but it does not appear to be owned by Google.
-     So we're pulling from Google's GitHub repo instead. */
-  closure-linter = buildPythonPackage rec {
-    name = "closure-linter-${version}";
-    version = "2.3.19";
-
-    /* This project has no Python 3 support, as noted by
-       https://github.com/google/closure-linter/issues/81 */
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [ gflags ];
-    src = pkgs.fetchgit {
-      url = "https://github.com/google/closure-linter";
-      rev = "5c27529075bb88bdc45e73008f496dec8438d658";
-      sha256 = "076c7q7pr7akfvq5y8lxr1ab81wwps07gw00igdkcxnc5k9dzxwc";
-    };
-    meta = {
-      description = "Checks JavaScript files against Google's style guide.";
-      homepage = "https://developers.google.com/closure/utilities/";
-      license = with licenses; [ asl20 ];
-    };
-  };
+  closure-linter = callPackage ../development/python-modules/closure-linter { };
 
   cloudpickle = callPackage ../development/python-modules/cloudpickle { };
 
@@ -1431,31 +1149,7 @@ in {
   # Backported version of the ConfigParser library of Python 3.3
   configparser = callPackage ../development/python-modules/configparser { };
 
-  ColanderAlchemy = buildPythonPackage rec {
-    name = "ColanderAlchemy-${version}";
-    version = "0.3.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/C/ColanderAlchemy/${name}.tar.gz";
-      sha256 = "11wcni2xmfmy001rj62q2pwf305vvngkrfm5c4zlwvgbvlsrvnnw";
-    };
-
-    patches = [
-      (pkgs.fetchpatch {
-          url = "https://github.com/stefanofontanelli/ColanderAlchemy/commit/b45fe35f2936a5ccb705e9344075191e550af6c9.patch";
-          sha256 = "1kf278wjq49zd6fhpp55vdcawzdd107767shzfck522sv8gr6qvx";
-      })
-    ];
-
-    buildInputs = with self; [ unittest2 ];
-    propagatedBuildInputs = with self; [ colander sqlalchemy ];
-
-    meta = {
-      description = "Autogenerate Colander schemas based on SQLAlchemy models";
-      homepage = https://github.com/stefanofontanelli/ColanderAlchemy;
-      license = licenses.mit;
-    };
-  };
+  ColanderAlchemy = callPackage ../development/python-modules/colanderalchemy { };
 
   conda = callPackage ../development/python-modules/conda { };
 
@@ -1523,36 +1217,7 @@ in {
 
   wakeonlan = callPackage ../development/python-modules/wakeonlan { };
 
-  openant = buildPythonPackage rec {
-    name = "openant-unstable-2017-02-11";
-
-    meta = with stdenv.lib; {
-      homepage = "https://github.com/Tigge/openant";
-      description = "ANT and ANT-FS Python Library";
-      license = licenses.mit;
-      platforms = platforms.linux;
-    };
-
-    src = pkgs.fetchFromGitHub {
-      owner = "Tigge";
-      repo = "openant";
-      rev = "ed89281e37f65d768641e87356cef38877952397";
-      sha256 = "1g81l9arqdy09ijswn3sp4d6i3z18d44lzyb78bwnvdb14q22k19";
-    };
-
-    # Removes some setup.py hacks intended to install udev rules.
-    # We do the job ourselves in postInstall below.
-    postPatch = ''
-      sed -i -e '/cmdclass=.*/d' setup.py
-    '';
-
-    postInstall = ''
-      install -dm755 "$out/etc/udev/rules.d"
-      install -m644 resources/ant-usb-sticks.rules "$out/etc/udev/rules.d/99-ant-usb-sticks.rules"
-    '';
-
-    propagatedBuildInputs = with self; [ pyusb ];
-  };
+  openant = callPackage ../development/python-modules/openant { };
 
   opencv = toPythonModule (pkgs.opencv.override {
     enablePython = true;
@@ -1572,74 +1237,15 @@ in {
 
   MDP = callPackage ../development/python-modules/mdp {};
 
-  minidb = buildPythonPackage rec {
-    name = "minidb-2.0.1";
-
-    src = pkgs.fetchurl {
-      url = "https://thp.io/2010/minidb/${name}.tar.gz";
-      sha256 = "1x958zr9jc26vaqij451qb9m2l7apcpz34ir9fwfjg4fwv24z2dy";
-    };
-
-    meta = {
-      description = "A simple SQLite3-based store for Python objects";
-      homepage = https://thp.io/2010/minidb/;
-      license = stdenv.lib.licenses.isc;
-      maintainers = [ stdenv.lib.maintainers.tv ];
-    };
-  };
+  minidb = callPackage ../development/python-modules/minidb { };
 
   miniupnpc = callPackage ../development/python-modules/miniupnpc {};
 
-  mixpanel = buildPythonPackage rec {
-    version = "4.0.2";
-    name = "mixpanel-${version}";
-    disabled = isPy3k;
-
-    src = pkgs.fetchzip {
-      url = "https://github.com/mixpanel/mixpanel-python/archive/${version}.zip";
-      sha256 = "0yq1bcsjzsz7yz4rp69izsdn47rvkld4wki2xmapp8gg2s9i8709";
-    };
-
-    buildInputs = with self; [ pytest mock ];
-    propagatedBuildInputs = with self; [ six ];
-    checkPhase = "py.test tests.py";
-
-    meta = {
-      homepage = https://github.com/mixpanel/mixpanel-python;
-      description = "This is the official Mixpanel Python library. This library
-                     allows for server-side integration of Mixpanel.";
-      license = stdenv.lib.licenses.asl20;
-    };
-  };
+  mixpanel = callPackage ../development/python-modules/mixpanel { };
 
   mpyq = callPackage ../development/python-modules/mpyq { };
 
-  mxnet = buildPythonPackage rec {
-    inherit (pkgs.mxnet) name version src meta;
-
-    buildInputs = [ pkgs.mxnet ];
-    propagatedBuildInputs = with self; [ requests numpy graphviz ];
-
-    LD_LIBRARY_PATH = makeLibraryPath [ pkgs.mxnet ];
-
-    doCheck = !isPy3k;
-
-    postPatch = ''
-      substituteInPlace python/setup.py \
-      --replace "graphviz<0.9.0" "graphviz<0.10.0" \
-      --replace "numpy<=1.15.0" "numpy<1.16.0" \
-      --replace "requests<2.19.0" "requests<2.20.0"
-    '';
-
-    preConfigure = ''
-      cd python
-    '';
-
-    postInstall = ''
-      rm -rf $out/mxnet
-      ln -s ${pkgs.mxnet}/lib/libmxnet.so $out/${python.sitePackages}/mxnet
-    '';
-  };
+  mxnet = callPackage ../development/python-modules/mxnet { };
 
   parsy = callPackage ../development/python-modules/parsy { };
 
@@ -1677,40 +1283,7 @@ in {
 
   python-ly = callPackage ../development/python-modules/python-ly {};
 
-  pyhepmc = buildPythonPackage rec {
-    name = "pyhepmc-${version}";
-    version = "0.5.0";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyhepmc/${name}.tar.gz";
-      sha256 = "1rbi8gqgclfvaibv9kzhfis11gw101x8amc93qf9y08ny4jfyr1d";
-    };
-
-    patches = [
-      # merge PR https://bitbucket.org/andybuckley/pyhepmc/pull-requests/1/add-incoming-outgoing-generators-for/diff
-      ../development/python-modules/pyhepmc_export_edges.patch
-      # add bindings to Flow class
-      ../development/python-modules/pyhepmc_export_flow.patch
-    ];
-
-    # regenerate python wrapper
-    preConfigure = ''
-      rm hepmc/hepmcwrap.py
-      swig -c++ -I${pkgs.hepmc}/include -python hepmc/hepmcwrap.i
-    '';
-
-    buildInputs = with pkgs; [ swig hepmc ];
-
-    HEPMCPATH = pkgs.hepmc;
-
-    meta = {
-      description = "A simple wrapper on the main classes of the HepMC event simulation representation, making it possible to create, read and manipulate HepMC events from Python code";
-      license     = licenses.gpl2;
-      maintainers = with maintainers; [ veprbl ];
-      platforms   = platforms.all;
-    };
-  };
+  pyhepmc = callPackage ../development/python-modules/pyhepmc { };
 
   pytest = self.pytest_37;
 
@@ -1749,6 +1322,8 @@ in {
 
   pytest-rerunfailures = callPackage ../development/python-modules/pytest-rerunfailures { };
 
+  pytest-relaxed = callPackage ../development/python-modules/pytest-relaxed { };
+
   pytest-flake8 = callPackage ../development/python-modules/pytest-flake8 { };
 
   pytestflakes = callPackage ../development/python-modules/pytest-flakes { };
@@ -1876,39 +1451,7 @@ in {
 
   derpconf = callPackage ../development/python-modules/derpconf { };
 
-  deskcon = self.buildPythonPackage rec {
-    name = "deskcon-0.3";
-    disabled = !isPy27;
-
-    src = pkgs.fetchFromGitHub {
-      owner= "screenfreeze";
-      repo = "deskcon-desktop";
-      rev = "267804122188fa79c37f2b21f54fe05c898610e6";
-      sha256 ="0i1dd85ls6n14m9q7lkympms1w3x0pqyaxvalq82s4xnjdv585j3";
-    };
-
-    phases = [ "unpackPhase" "installPhase" ];
-
-    pythonPath = [ self.pyopenssl pkgs.gtk3 ];
-
-    installPhase = ''
-      substituteInPlace server/deskcon-server --replace "python2" "python"
-
-      mkdir -p $out/bin
-      mkdir -p $out/lib/${python.libPrefix}/site-packages
-      cp -r "server/"* $out/lib/${python.libPrefix}/site-packages
-      mv $out/lib/${python.libPrefix}/site-packages/deskcon-server $out/bin/deskcon-server
-
-      wrapPythonProgramsIn $out/bin "$out $pythonPath"
-    '';
-
-    meta = {
-      description = "Integrates an Android device into a desktop";
-      homepage = https://github.com/screenfreeze/deskcon-desktop;
-      license = licenses.gpl3;
-    };
-  };
-
+  deskcon = callPackage ../development/python-modules/deskcon { };
 
   dill = callPackage ../development/python-modules/dill { };
 
@@ -1961,30 +1504,7 @@ in {
       pythonPackages = self;
     }));
 
-  EditorConfig = buildPythonPackage rec {
-    name = "EditorConfig-${version}";
-    version = "0.12.0";
-
-    # fetchgit used to ensure test submodule is available
-    src = pkgs.fetchgit {
-      url = "https://github.com/editorconfig/editorconfig-core-py";
-      rev = "refs/tags/v${version}";
-      sha256 = "0svk7id7ncygj2rnxhm7602xizljyidk4xgrl6i0xgq3829cz4bl";
-    };
-
-    buildInputs = [ pkgs.cmake ];
-    checkPhase = ''
-      cmake .
-      # utf_8_char fails with python3
-      ctest -E "utf_8_char" .
-    '';
-
-    meta = {
-      homepage = https://editorconfig.org;
-      description = "EditorConfig File Locator and Interpreter for Python";
-      license = stdenv.lib.licenses.psfl;
-    };
-  };
+  EditorConfig = callPackage ../development/python-modules/editorconfig { };
 
   edward = callPackage ../development/python-modules/edward { };
 
@@ -2002,127 +1522,19 @@ in {
 
   escapism = callPackage ../development/python-modules/escapism { };
 
-  etcd = buildPythonPackage rec {
-    name = "etcd-${version}";
-    version = "2.0.8";
-
-    # PyPI package is incomplete
-    src = pkgs.fetchurl {
-      url = "https://github.com/dsoprea/PythonEtcdClient/archive/${version}.tar.gz";
-      sha256 = "0fi6rxa1yxvz7nwrc7dw6fax3041d6bj3iyhywjgbkg7nadi9i8v";
-    };
-
-    patchPhase = ''
-      sed -i -e '13,14d;37d' setup.py
-    '';
-
-    propagatedBuildInputs = with self; [ simplejson pytz requests ];
-
-    # No proper tests are available
-    doCheck = false;
-
-    meta = {
-      description = "A Python etcd client that just works";
-      homepage = https://github.com/dsoprea/PythonEtcdClient;
-      license = licenses.gpl2;
-    };
-  };
+  etcd = callPackage ../development/python-modules/etcd { };
 
   evdev = callPackage ../development/python-modules/evdev {};
 
   eve = callPackage ../development/python-modules/eve {};
 
-  eventlib = buildPythonPackage rec {
-    pname = "python-eventlib";
-    name = "${pname}-${version}";
-    version = "0.2.2";
-
-    # Judging from SyntaxError
-    disabled = isPy3k;
-
-    src = pkgs.fetchdarcs {
-      url = "http://devel.ag-projects.com/repositories/${pname}";
-      rev = "release-${version}";
-      sha256 = "1zxhpq8i4jwsk7wmfncqfm211hqikj3hp38cfv509924bi76wak8";
-    };
-
-    propagatedBuildInputs = with self; [ greenlet ];
-
-    doCheck = false;
-
-    meta = {
-      description = "Eventlib bindings for python";
-      homepage    = "http://ag-projects.com/";
-      license     = licenses.lgpl2;
-      platforms   = platforms.all;
-    };
-  };
+  eventlib = callPackage ../development/python-modules/eventlib { };
 
   events = callPackage ../development/python-modules/events { };
 
-  eyeD3 = buildPythonPackage rec {
-    version = "0.7.8";
-    name    = "eyeD3-${version}";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "http://eyed3.nicfit.net/releases/${name}.tar.gz";
-      sha256 = "1nv7nhfn1d0qm7rgkzksbccgqisng8klf97np0nwaqwd5dbmdf86";
-    };
-
-    buildInputs = with self; [ paver ];
-
-    postInstall = ''
-      for prog in "$out/bin/"*; do
-        wrapProgram "$prog" --prefix PYTHONPATH : "$PYTHONPATH" \
-                            --prefix PATH : ${python}/bin
-      done
-    '';
-
-    meta = {
-      description = "A Python module and command line program for processing ID3 tags";
-      homepage    = http://eyed3.nicfit.net/;
-      license     = licenses.gpl2;
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
+  eyeD3 = callPackage ../development/python-modules/eyed3 { };
 
-      longDescription = ''
-        eyeD3 is a Python module and command line program for processing ID3
-        tags. Information about mp3 files (i.e bit rate, sample frequency, play
-        time, etc.) is also provided. The formats supported are ID3 v1.0/v1.1
-        and v2.3/v2.4.
-      '';
-    };
-  };
-
-  execnet = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    pname = "execnet";
-    version = "1.4.1";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/${pname}/${name}.tar.gz";
-      sha256 = "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn";
-    };
-    buildInputs = with self; [ pytest setuptools_scm ];
-    propagatedBuildInputs = with self; [ apipkg ];
-    # remove vbox tests
-    postPatch = ''
-      rm -v testing/test_termination.py
-      rm -v testing/test_channel.py
-      rm -v testing/test_xspec.py
-      rm -v testing/test_gateway.py
-    '';
-    checkPhase = ''
-      py.test testing
-    '';
-    __darwinAllowLocalNetworking = true;
-    meta = {
-      description = "Rapid multi-Python deployment";
-      license = licenses.gpl2;
-      homepage = "http://codespeak.net/execnet";
-      maintainers = with maintainers; [ nand0p ];
-    };
-  };
+  execnet = callPackage ../development/python-modules/execnet { };
 
   ezdxf = callPackage ../development/python-modules/ezdxf {};
 
@@ -2134,64 +1546,11 @@ in {
 
   faker = callPackage ../development/python-modules/faker { };
 
-  fake_factory = buildPythonPackage rec {
-    name = "fake-factory-${version}";
-    version = "0.6.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/fake-factory/${name}.tar.gz";
-      sha256 = "09sgk0kylsshs64a1xsz3qr187sbnqrbf4z8k3dgsy32lsgyffv2";
-    };
-
-    propagatedBuildInputs = with self; [ six dateutil ipaddress mock ];
-    checkPhase = ''
-      ${python.interpreter} -m unittest faker.tests
-    '';
-
-    meta = {
-      description = "A Python package that generates fake data for you";
-      homepage    = https://pypi.python.org/pypi/fake-factory;
-      license     = licenses.mit;
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
-    };
-  };
+  fake_factory = callPackage ../development/python-modules/fake_factory { };
 
-  factory_boy = buildPythonPackage rec {
-    name = "factory_boy-${version}";
-    version = "2.6.1";
+  factory_boy = callPackage ../development/python-modules/factory_boy { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/factory_boy/${name}.tar.gz";
-      sha256 = "0a21f8kq917fj8xgmyp6gy8vcrlzzgwn80qas0d76h3vjbdy0bdq";
-    };
-
-    propagatedBuildInputs = with self; [ fake_factory ];
-
-    meta = {
-      description = "A Python package to create factories for complex objects";
-      homepage    = https://github.com/rbarrois/factory_boy;
-      license     = licenses.mit;
-    };
-  };
-
-  Fabric = buildPythonPackage rec {
-    name = "Fabric-${version}";
-    version = "1.13.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/F/Fabric/${name}.tar.gz";
-      sha256 = "0k944dxr41whw7ib6380q9x15wyskx7fqni656icdn8rzshn9bwq";
-    };
-    disabled = isPy3k;
-    doCheck = (!isPyPy);  # https://github.com/fabric/fabric/issues/11891
-    propagatedBuildInputs = with self; [ paramiko pycrypto ];
-    buildInputs = with self; [ fudge_9 nose ];
-    meta = {
-      description = "Pythonic remote execution";
-      homepage    = https://www.fabfile.org/;
-      license     = licenses.bsd2;
-    };
-  };
+  Fabric = callPackage ../development/python-modules/Fabric { };
 
   faulthandler = if ! isPy3k
     then callPackage ../development/python-modules/faulthandler {}
@@ -2201,28 +1560,7 @@ in {
 
   flit = callPackage ../development/python-modules/flit { };
 
-  flowlogs_reader = buildPythonPackage rec {
-    name = "flowlogs_reader-1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/flowlogs_reader/${name}.tar.gz";
-      sha256 = "0158aki6m3pkf98hpd60088qyhrfxkmybdf8hv3qfl8nb61vaiwf";
-    };
-
-    propagatedBuildInputs = with self; [
-      botocore boto3 docutils
-    ];
-    buildInputs = with self; [
-      unittest2 mock
-    ];
-
-    meta = with pkgs.stdenv.lib; {
-      description = "Python library to make retrieving Amazon VPC Flow Logs from CloudWatch Logs a bit easier";
-      homepage = "https://github.com/obsrvbl/flowlogs-reader";
-      maintainers = with maintainers; [ cransom ];
-      license = licenses.asl20;
-    };
-  };
+  flowlogs_reader = callPackage ../development/python-modules/flowlogs_reader { };
 
   fluent-logger = callPackage ../development/python-modules/fluent-logger {};
 
@@ -2238,125 +1576,27 @@ in {
 
   ftputil = callPackage ../development/python-modules/ftputil { };
 
-  fudge = buildPythonPackage rec {
-    name = "fudge-1.1.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/fudge/${name}.tar.gz";
-      sha256 = "eba59a926fa1df1ab6dddd69a7a8af21865b16cad800cb4d1af75070b0f52afb";
-    };
-    buildInputs = with self; [ nose nosejs ];
-    propagatedBuildInputs = with self; [ sphinx ];
-
-    disabled = isPy3k;
+  fudge = callPackage ../development/python-modules/fudge { };
 
-    checkPhase = ''
-      nosetests -v
-    '';
-  };
+  fudge_9 = self.fudge.overridePythonAttrs (old: rec {
+     version = "0.9.6";
 
-  fudge_9 = self.fudge.override rec {
-    name = "fudge-0.9.6";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/fudge/${name}.tar.gz";
+     src = fetchPypi {
+      pname = "fudge";
+      inherit version;
       sha256 = "34690c4692e8717f4d6a2ab7d841070c93c8d0ea0d2615b47064e291f750b1a0";
     };
-  };
-
-
-  funcparserlib = buildPythonPackage rec {
-    name = "funcparserlib-0.3.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/funcparserlib/${name}.tar.gz";
-      sha256 = "b7992eac1a3eb97b3d91faa342bfda0729e990bd8a43774c1592c091e563c91d";
-    };
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover
-    '';
+  });
 
-    # Tests are Python 2.x only judging from SyntaxError
-    doCheck = !(isPy3k);
-
-    meta = {
-      description = "Recursive descent parsing library based on functional combinators";
-      homepage = https://code.google.com/p/funcparserlib/;
-      license = licenses.mit;
-      platforms = platforms.unix;
-    };
-  };
+  funcparserlib = callPackage ../development/python-modules/funcparserlib { };
 
   fastcache = callPackage ../development/python-modules/fastcache { };
 
-  functools32 = if isPy3k then null else buildPythonPackage rec {
-    name = "functools32-${version}";
-    version = "3.2.3-2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/functools32/functools32-${version}.tar.gz";
-      sha256 = "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn";
-    };
+  functools32 = callPackage ../development/python-modules/functools32 { };
 
+  gateone = callPackage ../development/python-modules/gateone { };
 
-    meta = with stdenv.lib; {
-      description = "This is a backport of the functools standard library module from";
-      homepage = "https://github.com/MiCHiLU/python-functools32";
-    };
-  };
-
-  gateone = buildPythonPackage rec {
-    name = "gateone-1.2-0d57c3";
-    disabled = ! isPy27;
-    src = pkgs.fetchFromGitHub {
-      rev = "1d0e8037fbfb7c270f3710ce24154e24b7031bea";
-      owner= "liftoff";
-      repo = "GateOne";
-      sha256 = "1ghrawlqwv7wnck6alqpbwy9mpv0y21cw2jirrvsxaracmvgk6vv";
-    };
-    propagatedBuildInputs = with self; [tornado futures html5lib pkgs.openssl pkgs.cacert pkgs.openssh];
-    meta = {
-      homepage = https://liftoffsoftware.com/;
-      description = "GateOne is a web-based terminal emulator and SSH client";
-      maintainers = with maintainers; [ tomberek ];
-
-    };
-    postInstall=''
-    cp -R "$out/gateone/"* $out/lib/python2.7/site-packages/gateone
-    '';
-  };
-
-  gcutil = buildPythonPackage rec {
-    name = "gcutil-1.16.1";
-
-    src = pkgs.fetchurl {
-      url = https://dl.google.com/dl/cloudsdk/release/artifacts/gcutil-1.16.1.tar.gz;
-      sha256 = "00jaf7x1ji9y46fbkww2sg6r6almrqfsprydz3q2swr4jrnrsx9x";
-    };
-
-    propagatedBuildInputs = with self; [
-      gflags
-      iso8601
-      ipaddr
-      httplib2
-      google_apputils
-      google_api_python_client
-    ];
-
-    prePatch = ''
-      sed -i -e "s|google-apputils==0.4.0|google-apputils==0.4.1|g" setup.py
-      substituteInPlace setup.py \
-        --replace "httplib2==0.8" "httplib2" \
-        --replace "iso8601==0.1.4" "iso8601"
-    '';
-
-    meta = {
-      description = "Command-line tool for interacting with Google Compute Engine";
-      homepage = "https://cloud.google.com/compute/docs/gcutil/";
-      license = licenses.asl20;
-      maintainers = with maintainers; [ phreedom ];
-      broken = true;
-    };
-  };
+  gcutil = callPackage ../development/python-modules/gcutil { };
 
   GeoIP = callPackage ../development/python-modules/GeoIP { };
 
@@ -2364,71 +1604,11 @@ in {
 
   gmpy2 = callPackage ../development/python-modules/gmpy2 { };
 
-  gmusicapi = with pkgs; buildPythonPackage rec {
-    name = "gmusicapi-10.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gmusicapi/gmusicapi-10.1.0.tar.gz";
-      sha256 = "0smlrafh1bjzrcjzl7im8pf8f04gcnx92lf3g5qr7yzgq8k20xa2";
-    };
-
-    propagatedBuildInputs = with self; [
-      validictory
-      decorator
-      mutagen
-      protobuf
-      setuptools
-      requests
-      dateutil
-      proboscis
-      mock
-      appdirs
-      oauth2client
-      pyopenssl
-      gpsoauth
-      MechanicalSoup
-      future
-    ];
-
-    meta = {
-      description = "An unofficial API for Google Play Music";
-      homepage = https://pypi.python.org/pypi/gmusicapi/;
-      license = licenses.bsd3;
-    };
-  };
+  gmusicapi = callPackage ../development/python-modules/gmusicapi { };
 
-  gnureadline = buildPythonPackage rec {
-    version = "6.3.3";
-    name = "gnureadline-${version}";
-    disabled = isPyPy;
+  gnureadline = callPackage ../development/python-modules/gnureadline { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gnureadline/${name}.tar.gz";
-      sha256 = "1ghck2zz4xbqa3wz73brgjhrqj55p9hc1fq6c9zb09dnyhwb0nd2";
-    };
-
-    buildInputs = [ pkgs.ncurses ];
-    patchPhase = ''
-      substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
-    '';
-  };
-
-  gnutls = buildPythonPackage rec {
-    pname = "python-gnutls";
-    version = "3.0.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-gnutls/${pname}-${version}.tar.gz";
-      sha256 = "1yrdxcj5rzvz8iglircz6icvyggz5fmdcd010n6w3j60yp4p84kc";
-    };
-
-    # https://github.com/AGProjects/python-gnutls/issues/2
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [ pkgs.gnutls ];
-    patchPhase = ''
-      substituteInPlace gnutls/library/__init__.py --replace "/usr/local/lib" "${pkgs.gnutls.out}/lib"
-    '';
-  };
+  gnutls = callPackage ../development/python-modules/gnutls { };
 
   gpy = callPackage ../development/python-modules/gpy { };
 
@@ -2450,37 +1630,7 @@ in {
   gpapi = callPackage ../development/python-modules/gpapi { };
   gplaycli = callPackage ../development/python-modules/gplaycli { };
 
-  gpsoauth = buildPythonPackage rec {
-    version = "0.2.0";
-    name = "gpsoauth-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gpsoauth/${name}.tar.gz";
-      sha256 = "01zxw8rhml8xfwda7ba8983890bzwkfa55ijd6qf8qrdy6ja1ncn";
-    };
-
-    propagatedBuildInputs = with self; [
-      cffi
-      cryptography
-      enum34
-      idna
-      ipaddress
-      ndg-httpsclient
-      pyopenssl
-      pyasn1
-      pycparser
-      pycryptodome
-      requests
-      six
-    ];
-
-    meta = {
-      description = "A python client library for Google Play Services OAuth";
-      homepage = "https://github.com/simon-weber/gpsoauth";
-      license = licenses.mit;
-      maintainers = with maintainers; [ jgillich ];
-    };
-  };
+  gpsoauth = callPackage ../development/python-modules/gpsoauth { };
 
   grip = callPackage ../development/python-modules/grip { };
 
@@ -2488,41 +1638,7 @@ in {
     gst-plugins-base = pkgs.gst_all_1.gst-plugins-base;
   };
 
-  gtimelog = buildPythonPackage rec {
-    name = "gtimelog-${version}";
-    version = "0.9.1";
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/gtimelog/gtimelog/archive/${version}.tar.gz";
-      sha256 = "0qk8fv8cszzqpdi3wl9vvkym1jil502ycn6sic4jrxckw5s9jsfj";
-    };
-
-    buildInputs = [ pkgs.glibcLocales ];
-
-    LC_ALL="en_US.UTF-8";
-
-    # TODO: AppIndicator
-    propagatedBuildInputs = with self; [ pkgs.gobjectIntrospection pygobject3 pkgs.makeWrapper pkgs.gtk3 ];
-
-    checkPhase = ''
-      substituteInPlace runtests --replace "/usr/bin/env python" "${python}/bin/${python.executable}"
-      ./runtests
-    '';
-
-    preFixup = ''
-        wrapProgram $out/bin/gtimelog \
-          --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH" \
-          --prefix LD_LIBRARY_PATH ":" "${pkgs.gtk3.out}/lib" \
-    '';
-
-    meta = {
-      description = "A small Gtk+ app for keeping track of your time. It's main goal is to be as unintrusive as possible";
-      homepage = https://mg.pov.lt/gtimelog/;
-      license = licenses.gpl2Plus;
-      maintainers = with maintainers; [ ocharles ];
-      platforms = platforms.unix;
-    };
-  };
+  gtimelog = callPackage ../development/python-modules/gtimelog { };
 
   gurobipy = if stdenv.hostPlatform.system == "x86_64-darwin"
   then callPackage ../development/python-modules/gurobipy/darwin.nix {
@@ -2538,114 +1654,19 @@ in {
 
   hglib = callPackage ../development/python-modules/hglib {};
 
-  humanize = buildPythonPackage rec {
-    version = "0.5.1";
-    name = "humanize-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/humanize/${name}.tar.gz";
-      sha256 = "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19";
-    };
-
-    buildInputs = with self; [ mock ];
-
-    doCheck = false;
-
-    meta = {
-      description = "Python humanize utilities";
-      homepage = https://github.com/jmoiron/humanize;
-      license = licenses.mit;
-      maintainers = with maintainers; [ ];
-      platforms = platforms.linux; # can only test on linux
-    };
-
-  };
+  humanize = callPackage ../development/python-modules/humanize { };
 
   hupper = callPackage ../development/python-modules/hupper {};
 
-  hovercraft = buildPythonPackage rec {
-    disabled = ! isPy3k;
-    name = "hovercraft-${version}";
-    version = "2.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hovercraft/${name}.tar.gz";
-      sha256 = "0lqxr816lymgnywln8bbv9nrmkyahjjcjkm9kjyny9bflayz4f1g";
-    };
-
-    propagatedBuildInputs = with self; [ docutils lxml manuel pygments svg-path watchdog ];
-
-    # one test assumes we have docutils 0.12
-    # TODO: enable tests after upgrading docutils to 0.12
-    doCheck = false;
-
-    meta = {
-      description = "A tool to make impress.js presentations from reStructuredText";
-      homepage = https://github.com/regebro/hovercraft;
-      license = licenses.mit;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
-
-  hsaudiotag = buildPythonPackage (rec {
-    name = "hsaudiotag-1.1.1";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hsaudiotag/${name}.tar.gz";
-      sha256 = "15hgm128p8nysfi0jb127awga3vlj0iw82l50swjpvdh01m7rda8";
-    };
-
-    # no tests
-    doCheck = false;
-
-    meta = {
-      description = "A pure Python library that lets one to read metadata from media files";
-      homepage = http://hg.hardcoded.net/hsaudiotag/;
-      license = licenses.bsd3;
-    };
-  });
-
-  hsaudiotag3k = buildPythonPackage (rec {
-    name = "hsaudiotag3k-1.1.3";
-    disabled = !isPy3k;
+  hovercraft = callPackage ../development/python-modules/hovercraft { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hsaudiotag3k/${name}.tar.gz";
-      sha256 = "0bv5k5594byr2bmhh77xv10fkdpckcmxg3w380yp30aqf83rcsx3";
-    };
-
-    # no tests
-    doCheck = false;
-
-    meta = {
-      description = "A pure Python library that lets one to read metadata from media files";
-      homepage = http://hg.hardcoded.net/hsaudiotag/;
-      license = licenses.bsd3;
-    };
-  });
+  hsaudiotag = callPackage ../development/python-modules/hsaudiotag { };
 
+  hsaudiotag3k = callPackage ../development/python-modules/hsaudiotag3k { };
 
   htmlmin = callPackage ../development/python-modules/htmlmin {};
 
-  httpauth = buildPythonPackage rec {
-    version = "0.3";
-    name = "httpauth-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/httpauth/${name}.tar.gz";
-      sha256 = "0qas7876igyz978pgldp5r7n7pis8n4vf0v87gxr9l7p7if5lr3l";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "WSGI HTTP Digest Authentication middleware";
-      homepage = https://github.com/jonashaag/httpauth;
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  httpauth = callPackage ../development/python-modules/httpauth { };
 
   idna-ssl = callPackage ../development/python-modules/idna-ssl { };
 
@@ -2653,22 +1674,7 @@ in {
 
   ijson = callPackage ../development/python-modules/ijson {};
 
-  imagesize = buildPythonPackage rec {
-    name = "imagesize-${version}";
-    version = "0.7.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/imagesize/${name}.tar.gz";
-      sha256 = "0msgz4ncp2nb5nbsxnf8kvxsl6nhwvc3b46ik097fvznl3y10gdv";
-    };
-
-    meta = {
-      description = "Getting image size from png/jpeg/jpeg2000/gif file";
-      homepage = https://github.com/shibukawa/imagesize_py;
-      license = with licenses; [ mit ];
-    };
-
-  };
+  imagesize = callPackage ../development/python-modules/imagesize { };
 
   image-match = callPackage ../development/python-modules/image-match { };
 
@@ -2676,115 +1682,17 @@ in {
 
   immutables = callPackage ../development/python-modules/immutables {};
 
-  imread = buildPythonPackage rec {
-    name = "python-imread-${version}";
-    version = "0.6";
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/luispedro/imread/archive/release-${version}.tar.gz";
-      sha256 = "0i14bc67200zhzxc41g5dfp2m0pr1zaa2gv59p2va1xw0ji2dc0f";
-    };
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = with self; [
-      nose
-      pkgs.libjpeg
-      pkgs.libpng
-      pkgs.libtiff
-      pkgs.libwebp
-    ];
-    propagatedBuildInputs = with self; [ numpy ];
-
-    meta = with stdenv.lib; {
-      description = "Python package to load images as numpy arrays";
-      homepage = https://imread.readthedocs.io/en/latest/;
-      maintainers = with maintainers; [ luispedro ];
-      license = licenses.mit;
-      platforms = platforms.linux;
-    };
-  };
+  imread = callPackage ../development/python-modules/imread { };
 
   imaplib2 = callPackage ../development/python-modules/imaplib2 { };
 
-  ipfsapi = buildPythonPackage rec {
-    name = "ipfsapi-${version}";
-    version = "0.4.2.post1";
-    disabled = isPy27;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "ipfs";
-      repo = "py-ipfs-api";
-      rev = "0c485544a114f580c65e2ffbb5782efbf7fd9f61";
-      sha256 = "1v7f77cv95yv0v80gisdh71mj7jcq41xcfip6bqm57zfdbsa0xpn";
-    };
-
-    propagatedBuildInputs = with self; [ six requests ];
-
-    meta = {
-      description = "A python client library for the IPFS API";
-      license = licenses.mit;
-      maintainers = with maintainers; [ mguentner ];
-      homepage = "https://pypi.python.org/pypi/ipfsapi";
-    };
-  };
-
-  itsdangerous = buildPythonPackage rec {
-    name = "itsdangerous-0.24";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/itsdangerous/${name}.tar.gz";
-      sha256 = "06856q6x675ly542ig0plbqcyab6ksfzijlyf1hzhgg3sgwgrcyb";
-    };
+  ipfsapi = callPackage ../development/python-modules/ipfsapi { };
 
-    meta = {
-      description = "Helpers to pass trusted data to untrusted environments and back";
-      homepage = "https://pypi.python.org/pypi/itsdangerous/";
-    };
-  };
-
-  iniparse = buildPythonPackage rec {
+  itsdangerous = callPackage ../development/python-modules/itsdangerous { };
 
-    name = "iniparse-${version}";
-    version = "0.4";
+  iniparse = callPackage ../development/python-modules/iniparse { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/iniparse/iniparse-${version}.tar.gz";
-      sha256 = "0m60k46vr03x68jckachzsipav0bwhhnqb8715hm1cngs89fxhdb";
-    };
-
-    checkPhase = ''
-      ${python.interpreter} runtests.py
-    '';
-
-    # Does not install tests
-    doCheck = false;
-
-    meta = with stdenv.lib; {
-      description = "Accessing and Modifying INI files";
-      license = licenses.mit;
-      maintainers = with maintainers; [ danbst ];
-    };
-  };
-
-  i3-py = buildPythonPackage rec {
-    version = "0.6.4";
-    name = "i3-py-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/i3-py/i3-py-${version}.tar.gz";
-      sha256 = "1sgl438jrb4cdyl7hbc3ymwsf7y3zy09g1gh7ynilxpllp37jc8y";
-    };
-
-    # no tests in tarball
-    doCheck = false;
-
-    meta = {
-      description = "Tools for i3 users and developers";
-      homepage =  "https://github.com/ziberna/i3-py";
-      license = licenses.gpl3;
-      platforms = platforms.linux;
-    };
-  };
+  i3-py = callPackage ../development/python-modules/i3-py { };
 
   JayDeBeApi = callPackage ../development/python-modules/JayDeBeApi {};
 
@@ -2808,52 +1716,13 @@ in {
 
   jsonpickle = callPackage ../development/python-modules/jsonpickle { };
 
-  jsonpointer = buildPythonPackage rec {
-    name = "jsonpointer-1.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jsonpointer/${name}.tar.gz";
-      sha256 = "39403b47a71aa782de6d80db3b78f8a5f68ad8dfc9e674ca3bb5b32c15ec7308";
-    };
-
-    meta = {
-      description = "Resolve JSON Pointers in Python";
-      homepage = "https://github.com/stefankoegl/python-json-pointer";
-      license = stdenv.lib.licenses.bsd2; # "Modified BSD license, says pypi"
-    };
-  };
+  jsonpointer = callPackage ../development/python-modules/jsonpointer { };
 
   jsonrpclib = callPackage ../development/python-modules/jsonrpclib { };
 
   jsonrpclib-pelix = callPackage ../development/python-modules/jsonrpclib-pelix {};
 
-  jsonwatch = buildPythonPackage rec {
-    name = "jsonwatch-0.2.0";
-
-    disabled = isPyPy; # doesn't find setuptools
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/dbohdan/jsonwatch/archive/v0.2.0.tar.gz";
-      sha256 = "04b616ef97b9d8c3887004995420e52b72a4e0480a92dbf60aa6c50317261e06";
-    };
-
-    propagatedBuildInputs = with self; [ six ];
-
-    meta = {
-      description = "Like watch -d but for JSON";
-      longDescription = ''
-        jsonwatch is a command line utility with which you can track changes in
-        JSON data delivered by a shell command or a web (HTTP/HTTPS) API.
-        jsonwatch requests data from the designated source repeatedly at a set
-        interval and displays the differences when the data changes. It is
-        similar in its behavior to how watch(1) with the -d switch works
-        for plain-text data.
-      '';
-      homepage = "https://github.com/dbohdan/jsonwatch";
-      license = licenses.mit;
-      platforms = platforms.all;
-    };
-  };
+  jsonwatch = callPackage ../development/python-modules/jsonwatch { };
 
   latexcodec = callPackage ../development/python-modules/latexcodec {};
 
@@ -2863,111 +1732,13 @@ in {
 
   libsoundtouch = callPackage ../development/python-modules/libsoundtouch { };
 
-  libthumbor = buildPythonPackage rec {
-    name = "libthumbor-${version}";
-    version = "1.3.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/libthumbor/${name}.tar.gz";
-      sha256 = "1vjhszsf8wl9k16wyg2rfjycjnawzl7z8j39bhiysbz5x4lqg91b";
-    };
-
-    buildInputs = with self; [ django ];
-
-    propagatedBuildInputs = with self; [ six pycrypto ];
-
-    doCheck = false;
-
-    meta = {
-      description = "libthumbor is the python extension to thumbor";
-      homepage = https://github.com/heynemann/libthumbor;
-      license = licenses.mit;
-    };
-  };
-
-  lightblue = buildPythonPackage rec {
-    pname = "lightblue";
-    version = "0.4";
-    name = "${pname}-${version}";
-    disabled = isPy3k; # build fails, 2018-04-11
-
-    src = pkgs.fetchurl {
-      url = "mirror://sourceforge/${pname}/${name}.tar.gz";
-      sha256 = "016h1mlhpqxjj25lcvl4fqc19k8ifmsv6df7rhr12fyfcrp5i14d";
-    };
-
-    buildInputs = [ pkgs.bluez pkgs.openobex ];
-
-
-    meta = {
-      homepage = http://lightblue.sourceforge.net;
-      description = "Cross-platform Bluetooth API for Python";
-      maintainers = with maintainers; [ leenaars ];
-      license = licenses.gpl3;
-      platforms = platforms.all;
-    };
-  };
-
-
-  lightning = buildPythonPackage rec {
-    version = "1.2.1";
-    name = "lightning-python-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/lightning-python/${name}.tar.gz";
-      sha256 = "3987d7d4a634bdb6db9bcf212cf4d2f72bab5bc039f4f6cbc02c9d01c4ade792";
-    };
-
-    buildInputs = with self; [ pytest ];
-
-    propagatedBuildInputs = with self; [
-      jinja2
-      matplotlib
-      numpy
-      requests
-      six
-    ];
-
-    meta = {
-      description = "A Python client library for the Lightning data visualization server";
-      homepage = http://lightning-viz.org;
-      license = licenses.mit;
-    };
-  };
-
-  lirc = disabledIf isPy27 (toPythonModule (pkgs.lirc.override {
-    python3 = python;
-  }));
+  libthumbor = callPackage ../development/python-modules/libthumbor { };
 
-  jupyter = buildPythonPackage rec {
-    version = "1.0.0";
-    name = "jupyter-${version}";
+  lightblue = callPackage ../development/python-modules/lightblue { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jupyter/${name}.tar.gz";
-      sha256 = "d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f";
-    };
+  lightning = callPackage ../development/python-modules/lightning { };
 
-    propagatedBuildInputs = with self; [
-      notebook
-      qtconsole
-      jupyter_console
-      nbconvert
-      ipykernel
-      ipywidgets
-    ];
-
-    # Meta-package, no tests
-    doCheck = false;
-
-    meta = {
-      description = "Installs all the Jupyter components in one go";
-      homepage = "http://jupyter.org/";
-      license = licenses.bsd3;
-      platforms = platforms.all;
-      priority = 100; # This is a metapackage which is unimportant
-    };
-  };
+  jupyter = callPackage ../development/python-modules/jupyter { };
 
   jupyter_console = callPackage ../development/python-modules/jupyter_console { };
 
@@ -2977,234 +1748,29 @@ in {
 
   PyLTI = callPackage ../development/python-modules/pylti { };
 
-  lmdb = buildPythonPackage rec {
-    pname = "lmdb";
-    version = "0.92";
-    name = "${pname}-${version}";
-
-    src = self.fetchPypi {
-      inherit pname version;
-      sha256 = "01nw6r08jkipx6v92kw49z34wmwikrpvc5j9xawdiyg1n2526wrx";
-    };
-
-    # Some sort of mysterious failure with lmdb.tool
-    doCheck = !isPy3k;
-
-    meta = {
-      description = "Universal Python binding for the LMDB 'Lightning' Database";
-      homepage = "https://github.com/dw/py-lmdb";
-      license = licenses.openldap;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
+  lmdb = callPackage ../development/python-modules/lmdb { };
 
-  logilab_astng = buildPythonPackage rec {
-    name = "logilab-astng-0.24.3";
+  logilab_astng = callPackage ../development/python-modules/logilab_astng { };
 
-    src = pkgs.fetchurl {
-      url = "http://download.logilab.org/pub/astng/${name}.tar.gz";
-      sha256 = "0np4wpxyha7013vkkrdy54dvnil67gzi871lg60z8lap0l5h67wn";
-    };
-
-    propagatedBuildInputs = with self; [ logilab_common ];
-  };
-
-  lpod = buildPythonPackage rec {
-    version = "1.1.7";
-    name = "python-lpod-${version}";
-    # lpod library currently does not support Python 3.x
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [ lxml docutils pillow ];
-
-    src = pkgs.fetchFromGitHub {
-      owner = "lpod";
-      repo = "lpod-python";
-      rev = "dee32120ee582ff337b0c52a95a9a87cca71fd67";
-      sha256 = "1mikvzp27wxkzpr2lii4wg1hhx8h610agckqynvsrdc8v3nw9ciw";
-    };
-
-    meta = {
-      homepage = https://github.com/lpod/lpod-python/;
-      description = "Library implementing the ISO/IEC 26300 OpenDocument Format standard (ODF) ";
-      license = licenses.gpl3;
-    };
-  };
+  lpod = callPackage ../development/python-modules/lpod { };
 
   luftdaten = callPackage ../development/python-modules/luftdaten { };
 
   m2r = callPackage ../development/python-modules/m2r { };
 
-  mailchimp = buildPythonPackage rec {
-    version = "2.0.9";
-    name = "mailchimp-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mailchimp/mailchimp-${version}.tar.gz";
-      sha256 = "0351ai0jqv3dzx0xxm1138sa7mb42si6xfygl5ak8wnfc95ff770";
-    };
-
-    buildInputs = with self; [ docopt ];
-    propagatedBuildInputs = with self; [ requests ];
-    patchPhase = ''
-      sed -i 's/==/>=/' setup.py
-    '';
-
-    meta = {
-      description = "A CLI client and Python API library for the MailChimp email platform";
-      homepage = "http://apidocs.mailchimp.com/api/2.0/";
-      license = licenses.mit;
-    };
-  };
-
-  python-mapnik = buildPythonPackage rec {
-    name = "python-mapnik-${version}";
-    version = "3.0.16";
+  mailchimp = callPackage ../development/python-modules/mailchimp { };
 
-    src = pkgs.fetchFromGitHub {
-      owner = "mapnik";
-      repo = "python-mapnik";
-      rev = "v${version}";
-      sha256 = "1gqs4kvmjawdgl80j0ab5r8y0va9kw0rvwix3093xsv4hwd00lcc";
-    };
-
-    disabled = isPyPy;
-    doCheck = false; # doesn't find needed test data files
-    preBuild = let
-      pythonVersion = with stdenv.lib.versions; "${major python.version}${minor python.version}";
-    in ''
-      export BOOST_PYTHON_LIB="boost_python${pythonVersion}"
-      export BOOST_THREAD_LIB="boost_thread"
-      export BOOST_SYSTEM_LIB="boost_system"
-    '';
-    buildInputs = with pkgs; [
-        (boost.override {
-          enablePython = true;
-          inherit python;
-        })
-        (mapnik.override {
-          inherit python;
-          boost = (boost.override { enablePython = true; inherit python; });
-        })
-        cairo
-        harfbuzz
-        icu
-        libjpeg
-        libpng
-        libtiff
-        libwebp
-        proj
-        zlib
-      ];
-    propagatedBuildInputs = with self; [ pillow pycairo ];
-
-    meta = with stdenv.lib; {
-      description = "Python bindings for Mapnik";
-      homepage = http://mapnik.org;
-      license  = licenses.lgpl21;
-    };
-  };
+  python-mapnik = callPackage ../development/python-modules/python-mapnik { };
 
   misaka = callPackage ../development/python-modules/misaka {};
 
   mt-940 = callPackage ../development/python-modules/mt-940 { };
 
-  mwlib = let
-    pyparsing = buildPythonPackage rec {
-      name = "pyparsing-1.5.7";
-      disabled = isPy3k;
-
-      src = pkgs.fetchurl {
-        url = "mirror://pypi/p/pyparsing/${name}.tar.gz";
-        sha256 = "646e14f90b3689b005c19ac9b6b390c9a39bf976481849993e277d7380e6e79f";
-      };
-      meta = {
-        homepage = http://pyparsing.wikispaces.com/;
-        description = "An alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions";
-      };
-    };
-  in buildPythonPackage rec {
-    version = "0.15.15";
-    name = "mwlib-${version}";
-
-    src = pkgs.fetchurl {
-      url = "http://pypi.pediapress.com/packages/mirror/${name}.tar.gz";
-      sha256 = "1dnmnkc21zdfaypskbpvkwl0wpkpn0nagj1fc338w64mbxrk8ny7";
-    };
-
-    propagatedBuildInputs = with self; [
-        apipkg
-        bottle
-        gevent
-        lxml
-        odfpy
-        pillow
-        py
-        pyPdf
-        pyparsing
-        qserve
-        roman
-        simplejson
-        sqlite3dbm
-        timelib
-    ];
-
-    checkInputs = with self; [ pytest ];
-
-    checkPhase = ''
-      py.test
-    '';
-
-    # Tests are in build directory but we need extension modules that are in $out
-    doCheck = false;
-
-    meta = {
-      description = "Library for parsing MediaWiki articles and converting them to different output formats";
-      homepage = "http://pediapress.com/code/";
-      license = licenses.bsd3;
-      broken = true; # Requires different versions of packages
-    };
-  };
-
-  mwlib-ext = buildPythonPackage rec {
-    version = "0.13.2";
-    name = "mwlib.ext-${version}";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "http://pypi.pediapress.com/packages/mirror/${name}.zip";
-      sha256 = "9229193ee719568d482192d9d913b3c4bb96af7c589d6c31ed4a62caf5054278";
-    };
-
-    meta = {
-      description = "Dependencies for mwlib markup";
-      homepage = "http://pediapress.com/code/";
-      license = licenses.bsd3;
-    };
-  };
-
-  mwlib-rl = buildPythonPackage rec {
-    version = "0.14.6";
-    name = "mwlib.rl-${version}";
-
-    src = pkgs.fetchurl {
-      url = "http://pypi.pediapress.com/packages/mirror/${name}.zip";
-      sha256 = "7f596fd60eb24d8d3da3ab4880f095294028880eafb653810a7bdaabdb031238";
-    };
+  mwlib = callPackage ../development/python-modules/mwlib { };
 
-    buildInputs = with self;
-      [
-        mwlib
-        mwlib-ext
-        pygments
-      ];
+  mwlib-ext = callPackage ../development/python-modules/mwlib-ext { };
 
-    meta = {
-      description = "Generate pdfs from mediawiki markup";
-      homepage = "http://pediapress.com/code/";
-      license = licenses.bsd3;
-    };
-  };
+  mwlib-rl = callPackage ../development/python-modules/mwlib-rl { };
 
   natsort = callPackage ../development/python-modules/natsort { };
 
@@ -3212,29 +1778,7 @@ in {
 
   logfury = callPackage ../development/python-modules/logfury { };
 
-  ndg-httpsclient = buildPythonPackage rec {
-    version = "0.4.2";
-    name = "ndg-httpsclient-${version}";
-
-    propagatedBuildInputs = with self; [ pyopenssl ];
-
-    src = pkgs.fetchFromGitHub {
-      owner = "cedadev";
-      repo = "ndg_httpsclient";
-      rev = version;
-      sha256 = "1kk4knv029j0cicfiv23c1rayc1n3f1j3rhl0527gxiv0qv4jw8h";
-    };
-
-    # uses networking
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/cedadev/ndg_httpsclient/;
-      description = "Provide enhanced HTTPS support for httplib and urllib2 using PyOpenSSL";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  ndg-httpsclient = callPackage ../development/python-modules/ndg-httpsclient { };
 
   netcdf4 = callPackage ../development/python-modules/netcdf4 { };
 
@@ -3242,60 +1786,13 @@ in {
 
   Nikola = callPackage ../development/python-modules/Nikola { };
 
-  nxt-python = buildPythonPackage rec {
-    version = "unstable-20160819";
-    pname = "nxt-python";
-    name = "${pname}-${version}";
-
-    propagatedBuildInputs = with self; [ pyusb pybluez pyfantom pkgs.git ];
-    disabled = isPy3k;
-
-    src = pkgs.fetchgit {
-      url = "http://github.com/Eelviny/nxt-python";
-      rev = "479e20b7491b28567035f4cee294c4a2af629297";
-      sha256 = "0mcsajhgm2wy4iy2lhmyi3xibgmbixbchanzmlhsxk6qyjccn9r9";
-      branchName= "pyusb";
-    };
-
-    # Tests fail on Mac dependency
-    doCheck = false;
-
-    meta = {
-      description = "Python driver/interface for Lego Mindstorms NXT robot";
-      homepage = https://github.com/Eelviny/nxt-python;
-      license = licenses.gpl3;
-      platforms = platforms.linux;
-      maintainers = with maintainers; [ leenaars ];
-    };
-  };
+  nxt-python = callPackage ../development/python-modules/nxt-python { };
 
   odfpy = callPackage ../development/python-modules/odfpy { };
 
   oset = callPackage ../development/python-modules/oset { };
 
-  pamela = buildPythonPackage rec {
-    name = "pamela-${version}";
-    version = "0.3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pamela/${name}.tar.gz";
-      sha256 = "0ssxbqsshrm8p642g3h6wsq20z1fsqhpdvqdm827gn6dlr38868y";
-    };
-
-    postUnpack = ''
-      substituteInPlace $sourceRoot/pamela.py --replace \
-        'find_library("pam")' \
-        '"${getLib pkgs.pam}/lib/libpam.so"'
-    '';
-
-    doCheck = false;
-
-    meta = {
-      description = "PAM interface using ctypes";
-      homepage = "https://github.com/minrk/pamela";
-      license = licenses.mit;
-    };
-  };
+  pamela = callPackage ../development/python-modules/pamela { };
 
   # These used to be here but were moved to all-packages, but I'll leave them around for a while.
   pants = pkgs.pants;
@@ -3308,112 +1805,17 @@ in {
 
   pathspec = callPackage ../development/python-modules/pathspec { };
 
-  pathtools = buildPythonPackage rec {
-    name = "pathtools-${version}";
-    version = "0.1.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pathtools/${name}.tar.gz";
-      sha256 = "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw";
-    };
-
-    meta = {
-      description = "Pattern matching and various utilities for file systems paths";
-      homepage = https://github.com/gorakhargosh/pathtools;
-      license = licenses.mit;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  pathtools = callPackage ../development/python-modules/pathtools { };
 
-  paver = buildPythonPackage rec {
-    version = "1.2.2";
-    name    = "Paver-${version}";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/P/Paver/Paver-${version}.tar.gz";
-      sha256 = "0lix9d33ndb3yk56sm1zlj80fbmxp0w60yk0d9pr2xqxiwi88sqy";
-    };
-
-    buildInputs = with self; [ cogapp mock virtualenv ];
-
-    propagatedBuildInputs = with self; [ nose ];
-
-    # the tests do not pass
-    doCheck = false;
-
-    meta = {
-      description = "A Python-based build/distribution/deployment scripting tool";
-      homepage    = https://github.com/paver/paver;
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
-    };
-  };
+  paver = callPackage ../development/python-modules/paver { };
 
   passlib = callPackage ../development/python-modules/passlib { };
 
-  path-and-address = buildPythonPackage rec {
-    version = "2.0.1";
-    name = "path-and-address-${version}";
-
-    buildInputs = with self; [ pytest ];
-
-    checkPhase = "py.test";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "joeyespo";
-      repo = "path-and-address";
-      rev = "v${version}";
-      sha256 = "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6";
-    };
-
-    meta = {
-      description = "Functions for server CLI applications used by humans";
-      homepage = https://github.com/joeyespo/path-and-address;
-      license = licenses.mit;
-      maintainers = with maintainers; [ koral];
-    };
-  };
-
-  peewee =  callPackage ../development/python-modules/peewee { };
-
-  peppercorn = buildPythonPackage rec {
-    name = "peppercorn-0.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/peppercorn/${name}.tar.gz";
-      sha256 = "921cba5d51fa211e6da0fbd2120b9a98d663422a80f5bb669ad81ffb0909774b";
-    };
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
-
-  pex = buildPythonPackage rec {
-    name = "pex-${version}";
-    version = "1.2.7";
-
-    src = self.fetchPypi {
-      pname  = "pex";
-      sha256 = "1m0gx9182w1dybkyjwwjyd6i87x2dzv252ks2fj8yn6avlcp5z4q";
-      inherit version;
-    };
-
-    prePatch = ''
-      substituteInPlace setup.py --replace 'SETUPTOOLS_REQUIREMENT,' '"setuptools"'
-    '';
+  path-and-address = callPackage ../development/python-modules/path-and-address { };
 
-    # A few more dependencies I don't want to handle right now...
-    doCheck = false;
+  peppercorn = callPackage ../development/python-modules/peppercorn { };
 
-    meta = {
-      description = "A library and tool for generating .pex (Python EXecutable) files";
-      homepage = "https://github.com/pantsbuild/pex";
-      license = licenses.asl20;
-      maintainers = with maintainers; [ copumpkin ];
-    };
-  };
+  pex = callPackage ../development/python-modules/pex { };
 
   phe = callPackage ../development/python-modules/phe { };
 
@@ -3440,119 +1842,29 @@ in {
     inherit (pkgs.libsForQt5) poppler;
   };
 
-  poyo = buildPythonPackage rec {
-    version = "0.4.0";
-    name = "poyo-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/poyo/${name}.tar.gz";
-      sha256 = "1f48ffl0j1f2lmgabajps7v8w90ppxbp5168gh8kh27bjd8xk5ca";
-    };
-
-    meta = {
-      homepage = https://github.com/hackebrot/poyo;
-      description = "A lightweight YAML Parser for Python";
-      license = licenses.mit;
-    };
-  };
+  poyo = callPackage ../development/python-modules/poyo { };
 
   prov = callPackage ../development/python-modules/prov { };
 
-  pudb = buildPythonPackage rec {
-    name = "pudb-2016.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pudb/${name}.tar.gz";
-      sha256 = "0njhi49d9fxbwh5p8yjx8m3jlfyzfm00b5aff6bz473pn7vxfn79";
-    };
-
-    propagatedBuildInputs = with self; [ pygments urwid ];
-
-    # Tests fail on python 3 due to writes to the read-only home directory
-    doCheck = !isPy3k;
-
-    meta = {
-      description = "A full-screen, console-based Python debugger";
-      license = licenses.mit;
-      platforms = platforms.all;
-    };
-  };
+  pudb = callPackage ../development/python-modules/pudb { };
 
   pybtex = callPackage ../development/python-modules/pybtex {};
 
   pybtex-docutils = callPackage ../development/python-modules/pybtex-docutils {};
 
-  pycallgraph = buildPythonPackage rec {
-    name = "pycallgraph-${version}";
-    version = "1.0.1";
-
-    src = pkgs.fetchurl {
-      url = mirror://pypi/p/pycallgraph/pycallgraph-1.0.1.tar.gz;
-      sha256 = "0w8yr43scnckqcv5nbyd2dq4kpv74ai856lsdsf8iniik07jn9mi";
-    };
-
-    buildInputs = with self; [ pytest ];
-
-    # Tests do not work due to this bug: https://github.com/gak/pycallgraph/issues/118
-    doCheck = false;
-
-    meta = {
-      homepage = http://pycallgraph.slowchop.com;
-      description = "Call graph visualizations for Python applications";
-      maintainers = with maintainers; [ auntie ];
-      license = licenses.gpl2;
-      platforms = platforms.all;
-    };
-  };
+  pycallgraph = callPackage ../development/python-modules/pycallgraph { };
 
   pycassa = callPackage ../development/python-modules/pycassa { };
 
-  pyblake2 = callPackage ../development/python-modules/pyblake2 { };
-
-  pybluez = buildPythonPackage rec {
-    version = "unstable-20160819";
-    pname = "pybluez";
-    name = "${pname}-${version}";
-
-    propagatedBuildInputs = with self; [ pkgs.bluez ];
-
-    src = pkgs.fetchFromGitHub {
-      owner = "karulis";
-      repo = "${pname}";
-      rev = "a0b226a61b166e170d48539778525b31e47a4731";
-      sha256 = "104dm5ngfhqisv1aszdlr3szcav2g3bhsgzmg4qfs09b3i5zj047";
-    };
-
-    # the tests do not pass
-    doCheck = false;
-
-    meta = {
-      description = "Bluetooth Python extension module";
-      license = licenses.gpl2;
-      maintainers = with maintainers; [ leenaars ];
-    };
-  };
-
-  pycares = buildPythonPackage rec {
-    name = "pycares-${version}";
-    version = "1.0.0";
+  lirc = disabledIf isPy27 (toPythonModule (pkgs.lirc.override {
+    python3 = python;
+  }));
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pycares/${name}.tar.gz";
-      sha256 = "a18341ea030e2cc0743acdf4aa72302bdf6b820938b36ce4bd76e43faa2276a3";
-    };
+  pyblake2 = callPackage ../development/python-modules/pyblake2 { };
 
-    propagatedBuildInputs = [ pkgs.c-ares ];
+  pybluez = callPackage ../development/python-modules/pybluez { };
 
-    # No tests included
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/saghul/pycares;
-      description = "Interface for c-ares";
-      license = licenses.mit;
-    };
-  };
+  pycares = callPackage ../development/python-modules/pycares { };
 
   pycuda = callPackage ../development/python-modules/pycuda rec {
     cudatoolkit = pkgs.cudatoolkit_7_5;
@@ -3561,8 +1873,6 @@ in {
 
   pydotplus = callPackage ../development/python-modules/pydotplus { };
 
-  pyftpdlib = callPackage ../development/python-modules/pyftpdlib { };
-
   pyfxa = callPackage ../development/python-modules/pyfxa { };
 
   pyhomematic = callPackage ../development/python-modules/pyhomematic { };
@@ -3573,37 +1883,7 @@ in {
 
   pyphen = callPackage ../development/python-modules/pyphen {};
 
-  pypoppler = buildPythonPackage rec {
-    name = "pypoppler-${version}";
-    version = "0.12.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pypoppler/${name}.tar.gz";
-      sha256 = "47e6ac99e5b114b9abf2d1dd1bca06f22c028d025432512989f659142470810f";
-    };
-
-    NIX_CFLAGS_COMPILE="-I${pkgs.poppler.dev}/include/poppler/";
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = [ pkgs.poppler.dev ];
-    propagatedBuildInputs = with self; [ pycairo pygobject2 ];
-
-    patches = [
-      ../development/python-modules/pypoppler-0.39.0.patch
-      ../development/python-modules/pypoppler-poppler.c.patch
-    ];
-
-    # Not supported.
-    disabled = isPy3k;
-
-    # No tests in archive
-    doCheck = false;
-
-    meta = {
-      homepage = https://code.launchpad.net/~mriedesel/poppler-python/main;
-      description = "Python bindings for poppler-glib, unofficial branch including bug fixes, and removal of gtk dependencies";
-      license = licenses.gpl2;
-    };
-  };
+  pypoppler = callPackage ../development/python-modules/pypoppler { };
 
   pypillowfight = callPackage ../development/python-modules/pypillowfight { };
 
@@ -3615,149 +1895,17 @@ in {
 
   pythonix = toPythonModule (callPackage ../development/python-modules/pythonix { });
 
-  pyramid = buildPythonPackage rec {
-    pname = "pyramid";
-    version = "1.9.1";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0dhbzc4q0vsnv3aihy728aczg56xs6h9s1rmvr096q4lb6yln3w4";
-    };
-
-    checkInputs = with self; [
-      docutils
-      virtualenv
-      webtest
-      zope_component
-    ];
-
-    propagatedBuildInputs = with self; [
-      hupper
-      PasteDeploy
-      plaster
-      plaster-pastedeploy
-      repoze_lru
-      repoze_sphinx_autointerface
-      translationstring
-      venusian
-      webob
-      zope_deprecation
-      zope_interface
-    ];
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-
-    # Failing tests
-    # https://github.com/Pylons/pyramid/issues/1899
-    doCheck = !isPy35;
-
-  };
+  pyramid = callPackage ../development/python-modules/pyramid { };
 
   pyramid_beaker = callPackage ../development/python-modules/pyramid_beaker { };
 
-  pyramid_chameleon = buildPythonPackage rec {
-    name = "pyramid_chameleon-0.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyramid_chameleon/${name}.tar.gz";
-      sha256 = "d176792a50eb015d7865b44bd9b24a7bd0489fa9a5cebbd17b9e05048cef9017";
-    };
-
-    propagatedBuildInputs = with self; [
-      chameleon
-      pyramid
-      zope_interface
-      setuptools
-    ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-
-  pyramid_jinja2 = buildPythonPackage rec {
-    name = "pyramid_jinja2-${version}";
-    version = "2.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyramid_jinja2/${name}.tar.gz";
-      sha256 = "93c86e3103b454301f4d66640191aba047f2ab85ba75647aa18667b7448396bd";
-    };
-
-    buildInputs = with self; [ webtest ];
-    propagatedBuildInputs = with self; [ jinja2 pyramid ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-      platforms = platforms.all;
-    };
-  };
-
-
-  pyramid_mako = buildPythonPackage rec {
-    name = "pyramid_mako-0.3.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyramid_mako/${name}.tar.gz";
-      sha256 = "00811djmsc4rz20kpy2paam05fbx6dmrv2i5jf90f6xp6zw4isy6";
-    };
-
-    buildInputs = with self; [ webtest ];
-    propagatedBuildInputs = with self; [ pyramid Mako ];
-  };
-
-
-  pyramid_exclog = buildPythonPackage rec {
-    name = "pyramid_exclog-0.7";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyramid_exclog/${name}.tar.gz";
-      sha256 = "a58c82866c3e1a350684e6b83b440d5dc5e92ca5d23794b56d53aac06fb65a2c";
-    };
-
-    propagatedBuildInputs = with self; [ pyramid ];
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
-
+  pyramid_chameleon = callPackage ../development/python-modules/pyramid_chameleon { };
 
-  pyramid_multiauth = buildPythonPackage rec {
-    name = "pyramid_multiauth-${version}";
-    version = "0.8.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyramid_multiauth/${name}.tar.gz";
-      sha256 = "1lq292qakrm4ixi4vaif8dqywzj08pn6qy0wi4gw28blh39p0msk";
-    };
+  pyramid_jinja2 = callPackage ../development/python-modules/pyramid_jinja2 { };
 
-    propagatedBuildInputs = with self; [ pyramid ];
-
-    meta = {
-      description = "Authentication policy for Pyramid that proxies to a stack of other authentication policies";
-      homepage = https://github.com/mozilla-services/pyramid_multiauth;
-    };
-  };
-
-  pyramid_hawkauth = buildPythonPackage rec {
-    name = "pyramidhawkauth-${version}";
-    version = "0.1.0";
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/pyramid_hawkauth.git;
-      rev = "refs/tags/v${version}";
-      sha256 = "038ign7qlavlmvrhb2y8bygbxvy4j7bx2k1zg0i3wblg2ja50w7h";
-    };
+  pyramid_mako = callPackage ../development/python-modules/pyramid_mako { };
 
-    propagatedBuildInputs = with self; [ pyramid hawkauthlib tokenlib ];
-    buildInputs = with self; [ webtest ];
-  };
+  peewee =  callPackage ../development/python-modules/peewee { };
 
   pyroute2 = callPackage ../development/python-modules/pyroute2 { };
 
@@ -3769,29 +1917,6 @@ in {
 
   pytools = callPackage ../development/python-modules/pytools { };
 
-  pytun = buildPythonPackage rec {
-    name = "pytun-${version}";
-    version = "2.2.1";
-    rev = "v${version}";
-
-    src = pkgs.fetchFromGitHub {
-      inherit rev;
-      owner = "montag451";
-      repo = "pytun";
-      sha256 = "1bxk0z0v8m0b01xg94f039j3bsclkshb7girvjqfzk5whbd2nryh";
-    };
-
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/montag451/pytun;
-      description = "Linux TUN/TAP wrapper for Python";
-      license = licenses.mit;
-      maintainers = with maintainers; [ montag451 ];
-      platforms = platforms.linux;
-    };
-  };
-
   python-ctags3 = callPackage ../development/python-modules/python-ctags3 { };
 
   junos-eznc = callPackage ../development/python-modules/junos-eznc {};
@@ -3800,111 +1925,8 @@ in {
 
   rawkit = callPackage ../development/python-modules/rawkit { };
 
-  rethinkdb = buildPythonPackage rec {
-    name = "rethinkdb-${version}";
-    version = "2.3.0.post6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/rethinkdb/${name}.tar.gz";
-      sha256 = "05qwkmq6kn437ywyjs02jxbry720gw39q4z4jdb0cnbbi76lwddm";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "Python driver library for the RethinkDB database server";
-      homepage = "https://pypi.python.org/pypi/rethinkdb";
-      license = licenses.agpl3;
-    };
-  };
-
-  roman = buildPythonPackage rec {
-    version = "2.0.0";
-    name = "roman-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/roman/${name}.zip";
-      sha256 = "90e83b512b44dd7fc83d67eb45aa5eb707df623e6fc6e66e7f273abd4b2613ae";
-    };
-
-    buildInputs = with self; with pkgs; [ ];
-
-    propagatedBuildInputs = with self; [ ];
-
-    meta = {
-      description = "Integer to Roman numerals converter";
-      homepage = "https://pypi.python.org/pypi/roman";
-      license = licenses.psfl;
-    };
-  };
-
-
-
-  librosa = buildPythonPackage rec {
-    pname = "librosa";
-    name = "${pname}-${version}";
-    version = "0.4.3";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz";
-      sha256 = "209626c53556ca3922e52d2fae767bf5b398948c867fcc8898f948695dacb247";
-    };
-
-    propagatedBuildInputs = with self; [ joblib matplotlib six scikitlearn
-      decorator audioread resampy ];
-
-    # No tests
-    doCheck = false;
-
-    meta = {
-      description = "Python module for audio and music processing";
-      homepage = http://librosa.github.io/;
-      license = licenses.isc;
-    };
-  };
-
   joblib = callPackage ../development/python-modules/joblib { };
 
-  safe = buildPythonPackage rec {
-    version = "0.4";
-    name = "Safe-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/S/Safe/${name}.tar.gz";
-      sha256 = "a2fdac9fe8a9dcf02b438201d6ce0b7be78f85dc6492d03edfb89be2adf489de";
-    };
-
-    buildInputs = with self; [ nose ];
-    meta = {
-      homepage = "https://github.com/lepture/safe";
-      license = licenses.bsd3;
-      description = "Check password strength";
-    };
-  };
-
-  samplerate = buildPythonPackage rec {
-    name = "scikits.samplerate-${version}";
-    version = "0.3.3";
-    src = pkgs.fetchgit {
-      url = https://github.com/cournape/samplerate;
-      rev = "a536c97eb2d6195b5f266ea3cc3a35364c4c2210";
-      sha256 = "0mgic7bs5zv5ji05vr527jlxxlb70f9dg93hy1lzyz2plm1kf7gg";
-    };
-
-    buildInputs = with self;  [ pkgs.libsamplerate ];
-
-    propagatedBuildInputs = with self; [ numpy ];
-
-    preConfigure = ''
-       cat > site.cfg << END
-       [samplerate]
-       library_dirs=${pkgs.libsamplerate.out}/lib
-       include_dirs=${pkgs.libsamplerate.dev}/include
-       END
-    '';
-
-    doCheck = false;
-  };
-
   sarge = callPackage ../development/python-modules/sarge { };
 
   subliminal = callPackage ../development/python-modules/subliminal {};
@@ -3913,98 +1935,14 @@ in {
 
   zope_copy = callPackage ../development/python-modules/zope_copy {};
 
-  ssdeep = buildPythonPackage rec {
-    name = "ssdeep-3.1.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/ssdeep/${name}.tar.gz";
-      sha256 = "1p9dpykmnfb73cszdiic5wbz5bmbbmkiih08pb4dah5mwq4n7im6";
-    };
-
-    buildInputs = with pkgs; [ ssdeep ];
-    propagatedBuildInputs = with self; [ cffi six ];
-    meta.broken = true; # Tests fail, and no reverse-dependencies anyway
-  };
-
   s2clientprotocol = callPackage ../development/python-modules/s2clientprotocol { };
 
-  statsd = buildPythonPackage rec {
-    name = "statsd-${version}";
-    version = "3.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/statsd/${name}.tar.gz";
-      sha256 = "3fa92bf0192af926f7a0d9be031fe3fd0fbaa1992d42cf2f07e68f76ac18288e";
-    };
-
-    buildInputs = with self; [ nose mock ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-      description = "A simple statsd client";
-      license = licenses.mit;
-      homepage = https://github.com/jsocol/pystatsd;
-    };
-
-    patchPhase = ''
-      # Failing test: ERROR: statsd.tests.test_ipv6_resolution_udp
-      sed -i 's/test_ipv6_resolution_udp/noop/' statsd/tests.py
-      # well this is a noop, but so it was before
-      sed -i 's/assert_called_once()/called/' statsd/tests.py
-    '';
-
-  };
-
   py3status = callPackage ../development/python-modules/py3status {};
 
-  multi_key_dict = buildPythonPackage rec {
-    name = "multi_key_dict-${version}";
-    version = "2.0.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/multi_key_dict/multi_key_dict-${version}.tar.gz";
-      sha256 = "17lkx4rf4waglwbhc31aak0f28c63zl3gx5k5i1iq2m3gb0xxsyy";
-    };
-
-    meta = with stdenv.lib; {
-      description = "multi_key_dict";
-      homepage = "https://github.com/formiaczek/multi_key_dict";
-    };
-  };
-
-
   pyrtlsdr = callPackage ../development/python-modules/pyrtlsdr { };
 
-  random2 = self.buildPythonPackage rec {
-    name = "random2-1.0.1";
-
-    doCheck = !isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/random2/${name}.zip";
-      sha256 = "34ad30aac341039872401595df9ab2c9dc36d0b7c077db1cea9ade430ed1c007";
-    };
-  };
-
   scandir = callPackage ../development/python-modules/scandir { };
 
-  schedule = buildPythonPackage rec {
-    name = "schedule-0.3.2";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/10/96/d101fab391753ebc81fa3bb0e744df1ddcfb032c31b036d38083f8994db1/schedule-0.3.2.tar.gz";
-      sha256 = "1h0waw4jd5ql68y5kxb9irwapkbkwfs1w0asvbl24fq5f8czdijm";
-    };
-
-    buildInputs = with self; [ mock ];
-
-    meta = with stdenv.lib; {
-      description = "Python job scheduling for humans";
-      homepage = https://github.com/dbader/schedule;
-      license = licenses.mit;
-    };
-  };
-
   schema = callPackage ../development/python-modules/schema {};
 
   simple-websocket-server = callPackage ../development/python-modules/simple-websocket-server {};
@@ -4017,206 +1955,63 @@ in {
 
   ratelimiter = callPackage ../development/python-modules/ratelimiter { };
 
-  repoze_lru = buildPythonPackage rec {
-    name = "repoze.lru-0.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/repoze.lru/${name}.tar.gz";
-      sha256 = "0f7a323bf716d3cb6cb3910cd4fccbee0b3d3793322738566ecce163b01bbd31";
-    };
-
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
-
-  repoze_sphinx_autointerface = buildPythonPackage rec {
-    name = "repoze.sphinx.autointerface-0.7.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/r/repoze.sphinx.autointerface/${name}.tar.gz";
-      sha256 = "97ef5fac0ab0a96f1578017f04aea448651fa9f063fc43393a8253bff8d8d504";
-    };
-
-    propagatedBuildInputs = with self; [ zope_interface sphinx ];
-
-    meta = {
-      maintainers = with maintainers; [ domenkozar ];
-      platforms = platforms.all;
-    };
-  };
-
-
-  setuptools-git = buildPythonPackage rec {
-    name = "setuptools-git-${version}";
-    version = "1.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/setuptools-git/${name}.tar.gz";
-      sha256 = "047d7595546635edebef226bc566579d422ccc48a8a91c7d32d8bd174f68f831";
-    };
-
-    propagatedBuildInputs = [ pkgs.git ];
-    doCheck = false;
-
-    meta = {
-      description = "Setuptools revision control system plugin for Git";
-      homepage = https://pypi.python.org/pypi/setuptools-git;
-      license = licenses.bsd3;
-    };
-  };
-
-
-  watchdog = buildPythonPackage rec {
-    name = "watchdog-${version}";
-    version = "0.8.3";
-
-    propagatedBuildInputs = with self; [ argh pathtools pyyaml ];
-
-    buildInputs = stdenv.lib.optionals stdenv.isDarwin
-      [ pkgs.darwin.apple_sdk.frameworks.CoreServices pkgs.darwin.cf-private ];
-
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/w/watchdog/${name}.tar.gz";
-      sha256 = "0qj1vqszxwfx6d1s66s96jmfmy2j94bywxiqdydh6ikpvcm8hrby";
-    };
-
-    meta = {
-      description = "Python API and shell utilities to monitor file system events";
-      homepage = https://github.com/gorakhargosh/watchdog;
-      license = licenses.asl20;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
-
   pywatchman = callPackage ../development/python-modules/pywatchman { };
 
   pywavelets = callPackage ../development/python-modules/pywavelets { };
 
-  zope_deprecation = buildPythonPackage rec {
-    name = "zope.deprecation-4.1.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zope.deprecation/${name}.tar.gz";
-      sha256 = "fed622b51ffc600c13cc5a5b6916b8514c115f34f7ea2730409f30c061eb0b78";
-    };
-
-    buildInputs = with self; [ zope_testing ];
+  vcrpy = callPackage ../development/python-modules/vcrpy { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
+  descartes = callPackage ../development/python-modules/descartes { };
 
-  validictory = buildPythonPackage rec {
-    name = "validictory-1.0.0a2";
+  chardet = callPackage ../development/python-modules/chardet { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/validictory/validictory-1.0.0a2.tar.gz";
-      sha256 = "c02388a70f5b854e71e2e09bd6d762a2d8c2a017557562e866d8ffafb0934b07";
-    };
+  pyramid_exclog = callPackage ../development/python-modules/pyramid_exclog { };
 
-    doCheck = false;
+  pyramid_multiauth = callPackage ../development/python-modules/pyramid_multiauth { };
 
-    meta = {
-      description = "Validate dicts against a schema";
-      homepage = https://github.com/sunlightlabs/validictory;
-      license = licenses.mit;
-    };
-  };
+  pyramid_hawkauth = callPackage ../development/python-modules/pyramid_hawkauth { };
 
-  vcrpy = callPackage ../development/python-modules/vcrpy { };
+  pytun = callPackage ../development/python-modules/pytun { };
 
-  venusian = buildPythonPackage rec {
-    name = "venusian-1.0";
+  rethinkdb = callPackage ../development/python-modules/rethinkdb { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/v/venusian/${name}.tar.gz";
-      sha256 = "1720cff2ca9c369c840c1d685a7c7a21da1afa687bfe62edd93cae4bf429ca5a";
-    };
+  roman = callPackage ../development/python-modules/roman { };
 
-    # TODO: https://github.com/Pylons/venusian/issues/23
-    doCheck = false;
+  librosa = callPackage ../development/python-modules/librosa { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-      platforms = platforms.all;
-    };
-  };
+  samplerate = callPackage ../development/python-modules/samplerate { };
 
+  ssdeep = callPackage ../development/python-modules/ssdeep { };
 
-  chameleon = buildPythonPackage rec {
-    name = "Chameleon-2.25";
+  statsd = callPackage ../development/python-modules/statsd { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/C/Chameleon/${name}.tar.gz";
-      sha256 = "0va95cml7wfjpvgj3dc9xdn8psyjh3zbk6v51b0hcqv2fzh409vb";
-    } ;
+  multi_key_dict = callPackage ../development/python-modules/multi_key_dict { };
 
-    meta = {
-      maintainers = with maintainers; [ garbas domenkozar ];
-    };
-  };
+  random2 = callPackage ../development/python-modules/random2 { };
 
-  ddt = buildPythonPackage (rec {
-    name = "ddt-1.0.0";
+  schedule = callPackage ../development/python-modules/schedule { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/ddt/${name}.tar.gz";
-      sha256 = "e24ecb7e2cf0bf43fa9d4255d3ae2bd0b7ce30b1d1b89ace7aa68aca1152f37a";
-    };
+  repoze_lru = callPackage ../development/python-modules/repoze_lru { };
 
-    meta = {
-      description = "Data-Driven/Decorated Tests, a library to multiply test cases";
+  repoze_sphinx_autointerface =  callPackage ../development/python-modules/repoze_sphinx_autointerface { };
 
-      homepage = https://github.com/txels/ddt;
+  setuptools-git = callPackage ../development/python-modules/setuptools-git { };
 
-      license = licenses.mit;
-    };
-  });
+  watchdog = callPackage ../development/python-modules/watchdog { };
 
-  descartes = callPackage ../development/python-modules/descartes { };
+  zope_deprecation = callPackage ../development/python-modules/zope_deprecation { };
 
-  distutils_extra = buildPythonPackage rec {
-    name = "distutils-extra-${version}";
-    version = "2.39";
+  validictory = callPackage ../development/python-modules/validictory { };
 
-    src = pkgs.fetchurl {
-      url = "http://launchpad.net/python-distutils-extra/trunk/${version}/+download/python-${name}.tar.gz";
-      sha256 = "1bv3h2p9ffbzyddhi5sccsfwrm3i6yxzn0m06fdxkj2zsvs28gvj";
-    };
+  venusian = callPackage ../development/python-modules/venusian { };
 
-    meta = {
-      homepage = https://launchpad.net/python-distutils-extra;
-      description = "Enhancements to Python's distutils";
-      license = licenses.gpl2;
-    };
-  };
-
-  pyxdg = buildPythonPackage rec {
-    name = "pyxdg-0.25";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyxdg/${name}.tar.gz";
-      sha256 = "81e883e0b9517d624e8b0499eb267b82a815c0b7146d5269f364988ae031279d";
-    };
+  chameleon = callPackage ../development/python-modules/chameleon { };
 
-    # error: invalid command 'test'
-    doCheck = false;
+  ddt = callPackage ../development/python-modules/ddt { };
 
-    meta = {
-      homepage = http://freedesktop.org/wiki/Software/pyxdg;
-      description = "Contains implementations of freedesktop.org standards";
-      license = licenses.lgpl2;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
+  distutils_extra = callPackage ../development/python-modules/distutils_extra { };
 
-  chardet = callPackage ../development/python-modules/chardet { };
+  pyxdg = callPackage ../development/python-modules/pyxdg { };
 
   crayons = callPackage ../development/python-modules/crayons{ };
 
@@ -4234,96 +2029,23 @@ in {
     gdal = self.gdal;
   };
 
-  django_1_8 = buildPythonPackage rec {
-    name = "Django-${version}";
-    version = "1.8.18";
-    disabled = pythonOlder "2.7";
-
-    src = pkgs.fetchurl {
-      url = "http://www.djangoproject.com/m/releases/1.8/${name}.tar.gz";
-      sha256 = "1ishvbihr9pain0486qafb18dnb7v2ppq34nnx1s8f95bvfiqqf7";
-    };
-
-    # too complicated to setup
-    doCheck = false;
-
-    # patch only $out/bin to avoid problems with starter templates (see #3134)
-    postFixup = ''
-      wrapPythonProgramsIn $out/bin "$out $pythonPath"
-    '';
-
-    meta = {
-      description = "A high-level Python Web framework";
-      homepage = https://www.djangoproject.com/;
-    };
-  };
+  django_1_8 = callPackage ../development/python-modules/django/1_8.nix { };
 
   django-allauth = callPackage ../development/python-modules/django-allauth { };
 
   django_appconf = callPackage ../development/python-modules/django_appconf { };
 
-  django_colorful = buildPythonPackage rec {
-    name = "django-colorful-${version}";
-    version = "1.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-colorful/${name}.tar.gz";
-      sha256 = "0y34hzvfrm1xbxrd8frybc9yzgqvz4c07frafipjikw7kfjsw8az";
-    };
-
-    # Tests aren't run
-    doCheck = false;
-
-    # Requires Django >= 1.8
-    buildInputs = with self; [ django ];
-
-    meta = {
-      description = "Django extension that provides database and form color fields";
-      homepage = https://github.com/charettes/django-colorful;
-      license = licenses.mit;
-    };
-  };
+  django_colorful = callPackage ../development/python-modules/django_colorful { };
 
   django_compressor = callPackage ../development/python-modules/django_compressor { };
 
   django_compat = callPackage ../development/python-modules/django-compat { };
 
-  django_environ = buildPythonPackage rec {
-    name = "django-environ-${version}";
-    version = "0.4.0";
+  django_contrib_comments = callPackage ../development/python-modules/django_contrib_comments { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-environ/${name}.tar.gz";
-      sha256 = "0i32vsgk1xmwpi7i6f6v5hg653y9dl0fsz5qmv94skz6hwgm5kvh";
-    };
-
-    # The testsuite fails to modify the base environment
-    doCheck = false;
-    propagatedBuildInputs = with self ; [ django six ];
+  django_environ = callPackage ../development/python-modules/django_environ { };
 
-    meta = {
-      description = "Utilize environment variables to configure your Django application";
-      homepage = https://github.com/joke2k/django-environ/;
-      license = licenses.mit;
-    };
-  };
-
-  django_evolution = buildPythonPackage rec {
-    name = "django_evolution-0.7.5";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django_evolution/${name}.tar.gz";
-      sha256 = "1qbcx54hq8iy3n2n6cki3bka1m9rp39np4hqddrm9knc954fb7nv";
-    };
-
-    propagatedBuildInputs = with self; [ django ];
-
-    meta = {
-      description = "A database schema evolution tool for the Django web framework";
-      homepage = http://code.google.com/p/django-evolution/;
-    };
-  };
+  django_evolution = callPackage ../development/python-modules/django_evolution { };
 
   django_extensions = callPackage ../development/python-modules/django-extensions { };
 
@@ -4363,26 +2085,7 @@ in {
     propagatedBuildInputs = with self; [ django ];
   });
 
-  django_classytags = buildPythonPackage rec {
-    name = "django-classy-tags-${version}";
-    version = "0.6.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-classy-tags/${name}.tar.gz";
-      sha256 = "0wxvpmjdzk0aajk33y4himn3wqjx7k0aqlka9j8ay3yfav78bdq0";
-    };
-
-    propagatedBuildInputs = with self; [ django ];
-
-    # tests appear to be broken on 0.6.1 at least
-    doCheck = ( version != "0.6.1" );
-
-    meta = {
-      description = "Class based template tags for Django";
-      homepage = https://github.com/ojii/django-classy-tags;
-      license = licenses.bsd3;
-    };
-  };
+  django_classytags = callPackage ../development/python-modules/django_classytags { };
 
   # This package may need an older version of Django.
   # Override the package set and set e.g. `django = super.django_1_9`.
@@ -4391,47 +2094,9 @@ in {
 
   django_hijack_admin = callPackage ../development/python-modules/django-hijack-admin { };
 
-  django_nose = buildPythonPackage rec {
-    name = "django-nose-${version}";
-    version = "1.4.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-nose/${name}.tar.gz";
-      sha256 = "1fm47fkza2lk0xgc6qpi9vs78zg7q8cgl6mdan69sbycgy909ff0";
-    };
-
-    # vast dependency list
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ django nose ];
-
-    meta = {
-      description = "Provides all the goodness of nose in your Django tests";
-      homepage = https://github.com/django-nose/django-nose;
-      license = licenses.bsd3;
-    };
-  };
+  django_nose = callPackage ../development/python-modules/django_nose { };
 
-  django_modelcluster = buildPythonPackage rec {
-    name = "django-modelcluster-${version}";
-    version = "0.6.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-modelcluster/django-modelcluster-${version}.tar.gz";
-      sha256 = "1plsdi44dvsj2sfx79lsrccjfg0ymajcsf5n0mln4cwd4qi5mwpx";
-    };
-
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ pytz six ];
-
-    meta = {
-      description = "Django extension to allow working with 'clusters' of models as a single unit, independently of the database";
-      homepage = https://github.com/torchbox/django-modelcluster/;
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ desiderius ];
-    };
-  };
+  django_modelcluster = callPackage ../development/python-modules/django_modelcluster { };
 
   djangorestframework = callPackage ../development/python-modules/djangorestframework { };
 
@@ -4439,96 +2104,13 @@ in {
 
   django_redis = callPackage ../development/python-modules/django_redis { };
 
-  django_reversion = buildPythonPackage rec {
-    name = "django-reversion-${version}";
-    version = "1.10.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-reversion/${name}.tar.gz";
-      sha256 = "01iv8w6lmmq98qjhxmnp8ddjxifmhxcmp612ijd91wc8nv8lk12w";
-    };
-
-    propagatedBuildInputs = with self; [ django ];
-
-    meta = {
-      description = "An extension to the Django web framework that provides comprehensive version control facilities";
-      homepage = https://github.com/etianen/django-reversion;
-      license = licenses.bsd3;
-    };
-  };
-
-  django_silk = buildPythonPackage rec {
-    name = "django-silk-${version}";
-    version = "0.5.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-silk/${name}.tar.gz";
-      sha256 = "845abc688738858ce06e993c4b7dbbcfcecf33029e828f143463ff96f9a78947";
-    };
-
-    doCheck = false;
-
-    buildInputs = [ self.mock ];
-
-    propagatedBuildInputs = with self; [
-      django
-      pygments
-      simplejson
-      dateutil
-      requests
-      sqlparse
-      jinja2
-      autopep8
-      pytz
-      pillow
-    ];
-
-    meta = {
-      description = "Silky smooth profiling for the Django Framework";
-      homepage = https://github.com/mtford90/silk;
-      license = licenses.mit;
-    };
-  };
-
-  django_taggit = buildPythonPackage rec {
-    name = "django-taggit-${version}";
-    version = "0.17.0";
-    disabled = pythonOlder "2.7";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-taggit/django-taggit-${version}.tar.gz";
-      sha256 = "1xy4mm1y6z6bpakw907859wz7fiw7jfm586dj89w0ggdqlb0767b";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "django-taggit is a reusable Django application for simple tagging";
-      homepage = https://github.com/alex/django-taggit/tree/master/;
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ desiderius ];
-    };
-  };
+  django_reversion = callPackage ../development/python-modules/django_reversion { };
 
-  django_treebeard = buildPythonPackage rec {
-    name = "django-treebeard-${version}";
-    version = "3.0";
+  django_silk = callPackage ../development/python-modules/django_silk { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/django-treebeard/${name}.tar.gz";
-      sha256 = "10p9rb2m1zccszg7590fjd0in6rabzsh86f5m7qm369mapc3b6dc";
-    };
+  django_taggit = callPackage ../development/python-modules/django_taggit { };
 
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [ django ];
-
-    meta = {
-      description = "Efficient tree implementations for Django 1.6+";
-      homepage = https://tabo.pe/projects/django-treebeard/;
-      maintainers = with maintainers; [ desiderius ];
-      license = licenses.asl20;
-    };
-  };
+  django_treebeard = callPackage ../development/python-modules/django_treebeard { };
 
   django_pipeline = callPackage ../development/python-modules/django-pipeline { };
 
@@ -4536,304 +2118,43 @@ in {
 
   djmail = callPackage ../development/python-modules/djmail { };
 
-  pillowfight = buildPythonPackage rec {
-    name = "pillowfight-${version}";
-    version = "0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pillowfight/pillowfight-${version}.tar.gz";
-      sha256 = "1mh1nhcjjgv7x134sv0krri59ng8bp2w6cwsxc698rixba9f3g0m";
-    };
-
-    propagatedBuildInputs = with self; [
-      pillow
-    ];
-    meta = with stdenv.lib; {
-      description = "Pillow Fight";
-      homepage = "https://github.com/beanbaginc/pillowfight";
-    };
-  };
-
-  kaptan = buildPythonPackage rec {
-    name = "kaptan-${version}";
-    version = "0.5.8";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/k/kaptan/${name}.tar.gz";
-      sha256 = "1b8r86yyvdvyxd6f10mhkl6cr2jhxm80jjqr4zch96w9hs9rh5vq";
-    };
-
-    propagatedBuildInputs = with self; [ pyyaml ];
-
-    meta = with stdenv.lib; {
-      description = "Configuration manager for python applications";
-      homepage = https://emre.github.io/kaptan/;
-      license = licenses.bsd3;
-      platforms = platforms.linux;
-      maintainers = with maintainers; [ jgeerds ];
-    };
-  };
-
-  keepalive = buildPythonPackage rec {
-    name = "keepalive-${version}";
-    version = "0.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/k/keepalive/keepalive-${version}.tar.gz";
-      sha256 = "3c6b96f9062a5a76022f0c9d41e9ef5552d80b1cadd4fccc1bf8f183ba1d1ec1";
-    };
+  pillowfight = callPackage ../development/python-modules/pillowfight { };
 
-    # No tests included
-    doCheck = false;
+  kaptan = callPackage ../development/python-modules/kaptan { };
 
-    meta = with stdenv.lib; {
-      description = "An HTTP handler for `urllib2` that supports HTTP 1.1 and keepalive";
-      homepage = "https://github.com/wikier/keepalive";
-    };
-  };
+  keepalive = callPackage ../development/python-modules/keepalive { };
 
   keyrings-alt = callPackage ../development/python-modules/keyrings-alt {};
 
-  SPARQLWrapper = buildPythonPackage rec {
-    name = "SPARQLWrapper-${version}";
-    version = "1.7.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/S/SPARQLWrapper/SPARQLWrapper-${version}.tar.gz";
-      sha256 = "1y12hpsfjd779yi29bhvl6g4vszadjvd8jw38z5rg77b034vxjnw";
-    };
-
-    # break circular dependency loop
-    patchPhase = ''
-      sed -i '/rdflib/d' requirements.txt
-    '';
-
-    # Doesn't actually run tests
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [
-      six isodate pyparsing html5lib keepalive
-    ];
-
-    meta = with stdenv.lib; {
-      description = "This is a wrapper around a SPARQL service. It helps in creating the query URI and, possibly, convert the result into a more manageable format";
-      homepage = "http://rdflib.github.io/sparqlwrapper";
-    };
-  };
+  SPARQLWrapper = callPackage ../development/python-modules/sparqlwrapper { };
 
   dulwich = callPackage ../development/python-modules/dulwich {
     inherit (pkgs) git glibcLocales;
   };
 
-  hg-git = buildPythonPackage rec {
-    name = "hg-git-${version}";
-    version = "0.8.11";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hg-git/${name}.tar.gz";
-      sha256 = "08kw1sj3sq1q1571hwkc51w20ks9ysmlg93pcnmd6gr66bz02dyn";
-    };
+  hg-git = callPackage ../development/python-modules/hg-git { };
 
-    propagatedBuildInputs = with self; [ dulwich ];
+  dtopt = callPackage ../development/python-modules/dtopt { };
 
-    meta = {
-      description = "Push and pull from a Git server using Mercurial";
-      homepage = http://hg-git.github.com/;
-      maintainers = with maintainers; [ koral ];
-      license = stdenv.lib.licenses.gpl2;
-    };
-  };
-
-  dtopt = buildPythonPackage rec {
-    name = "dtopt-0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/d/dtopt/${name}.tar.gz";
-      sha256 = "06ae07a12294a7ba708abaa63f838017d1a2faf6147a1e7a14ca4fa28f86da7f";
-    };
-
-    meta = {
-      description = "Add options to doctest examples while they are running";
-      homepage = https://pypi.python.org/pypi/dtopt;
-    };
-    # Test contain Python 2 print
-    disabled = isPy3k;
-  };
-
-
-  ecdsa = buildPythonPackage rec {
-    name = "ecdsa-${version}";
-    version = "0.13";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/ecdsa/${name}.tar.gz";
-      sha256 = "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4";
-    };
-
-    # Only needed for tests
-    buildInputs = with self; [ pkgs.openssl ];
-
-    meta = {
-      description = "ECDSA cryptographic signature library";
-      homepage = "https://github.com/warner/python-ecdsa";
-      license = licenses.mit;
-      maintainers = with maintainers; [ aszlig ];
-    };
-  };
+  ecdsa = callPackage ../development/python-modules/ecdsa { };
 
   effect = callPackage ../development/python-modules/effect {};
 
-  elpy = buildPythonPackage rec {
-    name = "elpy-${version}";
-    version = "1.9.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/elpy/${name}.tar.gz";
-      sha256 = "419f7b05b19182bc1aedde1ae80812c1534e59a0493476aa01ea819e76ba26f0";
-    };
-    python2Deps = if isPy3k then [ ] else [ self.rope ];
-    propagatedBuildInputs = with self; [ flake8 autopep8 jedi importmagic ] ++ python2Deps;
-
-    doCheck = false; # there are no tests
-
-    meta = {
-      description = "Backend for the elpy Emacs mode";
-      homepage = "https://github.com/jorgenschaefer/elpy";
-    };
-  };
-
-
-  enum = buildPythonPackage rec {
-    name = "enum-0.4.4";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/enum/${name}.tar.gz";
-      sha256 = "9bdfacf543baf2350df7613eb37f598a802f346985ca0dc1548be6494140fdff";
-    };
+  elpy = callPackage ../development/python-modules/elpy { };
 
-    doCheck = !isPyPy;
-
-    buildInputs = with self; [ ];
-
-    propagatedBuildInputs = with self; [ ];
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/enum/;
-      description = "Robust enumerated type support in Python";
-    };
-  };
+  enum = callPackage ../development/python-modules/enum { };
 
   enum-compat = callPackage ../development/python-modules/enum-compat { };
 
-  enum34 = if pythonAtLeast "3.4" then null else buildPythonPackage rec {
-    pname = "enum34";
-    version = "1.1.6";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1";
-    };
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover
-    '';
-
-
-    meta = {
-      homepage = https://pypi.python.org/pypi/enum34;
-      description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4";
-      license = "BSD";
-    };
-  };
-
-  epc = buildPythonPackage rec {
-    name = "epc-0.0.3";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/epc/${name}.tar.gz";
-      sha256 = "30b594bd4a4acbd5bda0d3fa3d25b4e8117f2ff8f24d2d1e3e36c90374f3c55e";
-    };
-
-    propagatedBuildInputs = with self; [ sexpdata ];
-    doCheck = false;
-
-    meta = {
-      description = "EPC (RPC stack for Emacs Lisp) implementation in Python";
-      homepage = "https://github.com/tkf/python-epc";
-    };
-  };
-
-  et_xmlfile = buildPythonPackage rec {
-    version = "1.0.1";
-    name = "et_xmlfile-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/et_xmlfile/${name}.tar.gz";
-      sha256="0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1";
-    };
-
-    buildInputs = with self; [ lxml pytest ];
-    checkPhase = ''
-      py.test $out
-    '';
-
-    meta = {
-      description = "An implementation of lxml.xmlfile for the standard library";
-      longDescription = ''
-        et_xmlfile is a low memory library for creating large XML files.
-
-        It is based upon the xmlfile module from lxml with the aim of allowing
-        code to be developed that will work with both libraries. It was developed
-        initially for the openpyxl project but is now a standalone module.
-
-        The code was written by Elias Rabel as part of the Python Düsseldorf
-        openpyxl sprint in September 2014.
-      '';
-      homepage = "https://pypi.python.org/pypi/et_xmlfile";
-      license = licenses.mit;
-      maintainers = with maintainers; [ sjourdois ];
-    };
-  };
-
-  eventlet = buildPythonPackage rec {
-    pname = "eventlet";
-    version = "0.20.0";
-    name = "${pname}-${version}";
+  enum34 = callPackage ../development/python-modules/enum34 { };
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "15bq5ybbigxnp5xwkps53zyhlg15lmcnq3ny2dppj0r0bylcs5rf";
-    };
-
-    buildInputs = with self; [ nose httplib2 pyopenssl  ];
+  epc = callPackage ../development/python-modules/epc { };
 
-    doCheck = false;  # too much transient errors to bother
+  et_xmlfile = callPackage ../development/python-modules/et_xmlfile { };
 
-    propagatedBuildInputs = optionals (!isPyPy) [ self.greenlet ] ++
-      (with self; [ enum-compat ]) ;
+  eventlet = callPackage ../development/python-modules/eventlet { };
 
-    meta = {
-      homepage = https://pypi.python.org/pypi/eventlet/;
-      description = "A concurrent networking library for Python";
-    };
-  };
-
-  exifread = buildPythonPackage rec {
-    name = "ExifRead-2.1.2";
-
-    meta = {
-      description = "Easy to use Python module to extract Exif metadata from tiff and jpeg files";
-      homepage    = "https://github.com/ianare/exif-py";
-      license     = "BSD";
-      maintainers = with maintainers; [ vozz ];
-    };
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/E/ExifRead/${name}.tar.gz";
-      sha256 = "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr";
-    };
-  };
+  exifread = callPackage ../development/python-modules/exifread { };
 
   fastimport = callPackage ../development/python-modules/fastimport { };
 
@@ -4847,117 +2168,21 @@ in {
     inherit (pkgs) glibcLocales;
   };
 
-  feedparser = buildPythonPackage (rec {
-    name = "feedparser-5.2.1";
+  feedparser = callPackage ../development/python-modules/feedparser { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/feedparser/${name}.tar.gz";
-      sha256 = "1ycva69bqssalhqg45rbrfipz3l6hmycszy26k0351fhq990c0xx";
-    };
-
-    # lots of networking failures
-    doCheck = false;
-
-    meta = {
-      homepage = http://code.google.com/p/feedparser/;
-      description = "Universal feed parser";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  });
-
-  pyfribidi = buildPythonPackage rec {
-    version = "0.11.0";
-    name = "pyfribidi-${version}";
-    disabled = isPy3k || isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyfribidi/${name}.zip";
-      sha256 = "6f7d83c09eae0cb98a40b85ba3dedc31af4dbff8fc4425f244c1e9f44392fded";
-    };
-
-    meta = {
-      description = "A simple wrapper around fribidi";
-      homepage = https://github.com/pediapress/pyfribidi;
-      license = stdenv.lib.licenses.gpl2;
-    };
-  };
+  pyfribidi = callPackage ../development/python-modules/pyfribidi { };
 
   docker_compose = callPackage ../development/python-modules/docker_compose {};
 
-  fdroidserver = buildPythonPackage rec {
-    version = "2016-05-31";
-    name = "fdroidserver-git-${version}";
-
-    disabled = ! isPy3k;
-
-    src = pkgs.fetchFromGitLab {
-      owner = "fdroid";
-      repo = "fdroidserver";
-      rev = "401649e0365e6e365fc48ae8a3af94768af865f3";
-      sha256 = "1mmi2ffpym1qw694yj938kc7b4xhq0blri7wkjaqddcyykjyr94d";
-    };
-
-    propagatedBuildInputs = with self; [ libcloud pyyaml paramiko pyasn1 pyasn1-modules pillow mwclient GitPython ];
-
-    meta = {
-      homepage = https://f-droid.org;
-      description = "Server and tools for F-Droid, the Free Software repository system for Android";
-      maintainers = with maintainers; [ ];
-      license = licenses.agpl3;
-    };
-  };
-
-  filebrowser_safe = buildPythonPackage rec {
-    version = "0.3.6";
-    name = "filebrowser_safe-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/filebrowser_safe/${name}.tar.gz";
-      sha256 = "02bn60fdslvng2ckn65fms3hjbzgsa8qa5161a8lr720wbx8gpj2";
-    };
-
-    buildInputs = [ self.django ];
+  pyftpdlib = callPackage ../development/python-modules/pyftpdlib { };
 
-    # There is no test embedded
-    doCheck = false;
+  fdroidserver = callPackage ../development/python-modules/fdroidserver { };
 
-    meta = {
-      description = "A snapshot of django-filebrowser for the Mezzanine CMS";
-      longDescription = ''
-        filebrowser_safe was created to provide a snapshot of the FileBrowser
-        asset manager for Django, to be referenced as a dependency for the
-        Mezzanine CMS for Django.
-
-        At the time of filebrowser_safe's creation, FileBrowser was incorrectly
-        packaged on PyPI, and had also dropped compatibility with Django 1.1 -
-        filebrowser_safe was therefore created to address these specific
-        issues.
-      '';
-      homepage = https://github.com/stephenmcd/filebrowser-safe;
-      downloadPage = https://pypi.python.org/pypi/filebrowser_safe/;
-      license = licenses.free;
-      maintainers = with maintainers; [ prikhi ];
-      platforms = platforms.linux;
-    };
-  };
+  filebrowser_safe = callPackage ../development/python-modules/filebrowser_safe { };
 
   pycodestyle = callPackage ../development/python-modules/pycodestyle { };
 
-  filebytes = buildPythonPackage rec {
-    name = "filebytes-0.9.12";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/filebytes/${name}.tar.gz";
-      sha256 = "6cd1c4ca823f6541c963a317e55382609789802dedad08209f4d038369e3f0ac";
-    };
-    propagatedBuildInputs = [ ];
-    meta = with pkgs.stdenv.lib; {
-      homepage = "https://scoding.de/filebytes-introduction";
-      license = licenses.gpl2;
-      description = "Scripts to parse ELF, PE, Mach-O and OAT (Android Runtime)";
-      maintainers = with maintainers; [ bennofs ];
-    };
-  };
+  filebytes = callPackage ../development/python-modules/filebytes { };
 
   filelock = callPackage ../development/python-modules/filelock {};
 
@@ -4973,26 +2198,7 @@ in {
 
   flake8-import-order = callPackage ../development/python-modules/flake8-import-order { };
 
-  flaky = buildPythonPackage rec {
-    name = "flaky-${version}";
-    version = "3.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/flaky/${name}.tar.gz";
-      sha256 = "1x9ixika7wqjj52x8wnsh1vk7jadkdqpx01plj7mlh8slwyq4s41";
-    };
-
-    buildInputs = with self; [ mock pytest ];
-
-    # waiting for feedback https://github.com/box/flaky/issues/97
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/box/flaky;
-      description = "Plugin for nose or py.test that automatically reruns flaky tests";
-      license = licenses.asl20;
-    };
-  };
+  flaky = callPackage ../development/python-modules/flaky { };
 
   flask = callPackage ../development/python-modules/flask { };
 
@@ -5052,57 +2258,11 @@ in {
 
   flask_wtf = callPackage ../development/python-modules/flask-wtf { };
 
-  wtforms = buildPythonPackage rec {
-    version = "2.1";
-    name = "wtforms-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/W/WTForms/WTForms-${version}.zip";
-      sha256 = "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz";
-    };
-
-    # Django tests are broken "django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet."
-    # This is fixed in master I believe but not yet in 2.1;
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ Babel ];
-
-    meta = {
-      homepage = https://github.com/wtforms/wtforms;
-      description = "A flexible forms validation and rendering library for Python";
-      license = licenses.bsd3;
-    };
-  };
+  wtforms = callPackage ../development/python-modules/wtforms { };
 
   graph-tool = callPackage ../development/python-modules/graph-tool/2.x.x.nix { };
 
-  grappelli_safe = buildPythonPackage rec {
-    version = "0.3.13";
-    name = "grappelli_safe-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/grappelli_safe/${name}.tar.gz";
-      sha256 = "8b21b4724bce449cc4f22dc74ed0be9b3e841d968f3271850bf4836864304eb6";
-    };
-
-    meta = {
-      description = "A snapshot of django-grappelli for the Mezzanine CMS";
-      longDescription = ''
-        grappelli_safe was created to provide a snapshot of the Grappelli admin
-        skin for Django, to be referenced as a dependency for the Mezzanine CMS
-        for Django.
-
-        At the time of grappelli_safe's creation, Grappelli was incorrectly
-        packaged on PyPI, and had also dropped compatibility with Django 1.1 -
-        grappelli_safe was therefore created to address these specific issues.
-      '';
-      homepage = https://github.com/stephenmcd/grappelli-safe;
-      downloadPage = http://pypi.python.org/pypi/grappelli_safe/;
-      license = licenses.free;
-      maintainers = with maintainers; [ prikhi ];
-      platforms = platforms.linux;
-    };
-  };
+  grappelli_safe = callPackage ../development/python-modules/grappelli_safe { };
 
   pytorch = let
     # Fails with CUDA 9.1 and GCC 6.4:
@@ -5128,37 +2288,9 @@ in {
     cudaSupport = false;
   };
 
-  python2-pythondialog = buildPythonPackage rec {
-    name = "python2-pythondialog-${version}";
-    version = "3.3.0";
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python2-pythondialog/python2-pythondialog-${version}.tar.gz";
-      sha256 = "1yhkagsh99bfi592ymczf8rnw8rk6n9hdqy3dd98m3yrx8zmjvry";
-    };
+  python2-pythondialog = callPackage ../development/python-modules/python2-pythondialog { };
 
-    patchPhase = ''
-      substituteInPlace dialog.py --replace ":/bin:/usr/bin" ":$out/bin"
-    '';
-
-    meta = with stdenv.lib; {
-      homepage = "http://pythondialog.sourceforge.net/";
-    };
-  };
-
-  pyRFC3339 = buildPythonPackage rec {
-    name = "pyRFC3339-${version}";
-    version = "0.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pyRFC3339/pyRFC3339-${version}.tar.gz";
-      sha256 = "1pp648xsjaw9h1xq2mgwzda5wis2ypjmzxlksc1a8grnrdmzy155";
-    };
-
-    propagatedBuildInputs = with self; [ pytz ];
-    buildInputs = with self; [ nose ];
-  };
+  pyRFC3339 = callPackage ../development/python-modules/pyrfc3339 { };
 
   ConfigArgParse = callPackage ../development/python-modules/configargparse { };
 
@@ -5166,61 +2298,11 @@ in {
 
   vcversioner = callPackage ../development/python-modules/vcversioner { };
 
-  falcon = buildPythonPackage (rec {
-    name = "falcon-1.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/falcon/${name}.tar.gz";
-      sha256 = "ddce23a2dd0abba6d19775e9bf7ba64e184b15a0e7163e65f62af63354193f63";
-    };
-
-    buildInputs = with self; stdenv.lib.optionals doCheck [coverage ddt nose pyyaml requests testtools];
-    propagatedBuildInputs = with self; [ six python_mimeparse ];
-
-    # The travis build fails since the migration from multiprocessing to threading for hosting the API under test.
-    # OSError: [Errno 98] Address already in use
-    doCheck = false;
-
-    meta = {
-      description = "An unladen web framework for building APIs and app backends";
-      homepage = http://falconframework.org;
-      license = licenses.asl20;
-      maintainers = with maintainers; [ desiderius ];
-    };
-  });
-  hug = buildPythonPackage rec {
-    name = "hug-2.1.2";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hug/${name}.tar.gz";
-      sha256 = "93325e13706594933a9afb0d4f0b0748134494299038f07df41152baf6f89f4c";
-    };
-    disabled = !isPy3k;
-
-    propagatedBuildInputs = with self; [ falcon requests ];
-
-    # tests are not shipped in the tarball
-    doCheck = false;
-
-    meta = {
-      description = "A Python framework that makes developing APIs as simple as possible, but no simpler";
-      homepage = https://github.com/timothycrosley/hug;
-      license = licenses.mit;
-    };
-  };
-  flup = buildPythonPackage (rec {
-    name = "flup-1.0.2";
-    disabled = isPy3k;
+  falcon = callPackage ../development/python-modules/falcon { };
 
-    src = pkgs.fetchurl {
-      url = "http://www.saddi.com/software/flup/dist/${name}.tar.gz";
-      sha256 = "1nbx174g40l1z3a8arw72qz05a1qxi3didp9wm7kvkn1bxx33bab";
-    };
+  hug = callPackage ../development/python-modules/hug { };
 
-    meta = {
-      homepage = "http://trac.saddi.com/flup";
-      description = "FastCGI Python module set";
-    };
-  });
+  flup = callPackage ../development/python-modules/flup { };
 
   fn = callPackage ../development/python-modules/fn { };
 
@@ -5233,89 +2315,11 @@ in {
 
   fonttools = callPackage ../development/python-modules/fonttools { };
 
-  foolscap = buildPythonPackage (rec {
-    name = "foolscap-${version}";
-    version = "0.12.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/foolscap/${name}.tar.gz";
-      sha256 = "1bpmqq6485mmr5jza9q2c55l9m1bfsvsbd9drsip7p5qcsi22jrz";
-    };
-
-    propagatedBuildInputs = with self; [ mock twisted pyopenssl service-identity ];
+  foolscap = callPackage ../development/python-modules/foolscap { };
 
-    checkPhase = ''
-      # Either uncomment this, or remove this custom check phase entirely, if
-      # you wish to do battle with the foolscap tests. ~ C.
-      # trial foolscap
-    '';
-
-    meta = {
-      homepage = http://foolscap.lothar.com/;
+  forbiddenfruit = callPackage ../development/python-modules/forbiddenfruit { };
 
-      description = "Foolscap, an RPC protocol for Python that follows the distributed object-capability model";
-
-      longDescription = ''
-        "Foolscap" is the name for the next-generation RPC protocol,
-        intended to replace Perspective Broker (part of Twisted).
-        Foolscap is a protocol to implement a distributed
-        object-capabilities model in Python.
-      '';
-
-      # See http://foolscap.lothar.com/trac/browser/LICENSE.
-      license = licenses.mit;
-
-      maintainers = [ ];
-    };
-  });
-
-  forbiddenfruit = buildPythonPackage rec {
-    version = "0.1.0";
-    name = "forbiddenfruit-${version}";
-
-    src = pkgs.fetchurl {
-      url= "mirror://pypi/f/forbiddenfruit/${name}.tar.gz";
-      sha256 = "0xra2kw6m8ag29ifwmhi5zqksh4cr0yy1waqd488rm59kcr3zl79";
-    };
-
-    meta = {
-      description = "Patch python built-in objects";
-      homepage = https://pypi.python.org/pypi/forbiddenfruit;
-      license = licenses.mit;
-    };
-  };
-
-  fs = callPackage ../development/python-modules/fs { };
-
-  fusepy = buildPythonPackage rec {
-    name = "fusepy-2.0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/f/fusepy/${name}.tar.gz";
-      sha256 = "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h";
-    };
-
-    propagatedBuildInputs = [ pkgs.fuse ];
-
-    # No tests included
-    doCheck = false;
-
-    patchPhase = ''
-      substituteInPlace fuse.py --replace \
-        "find_library('fuse')" "'${pkgs.fuse}/lib/libfuse.so'"
-    '';
-
-    meta = {
-      description = "Simple ctypes bindings for FUSE";
-      longDescription = ''
-        Python module that provides a simple interface to FUSE and MacFUSE.
-        It's just one file and is implemented using ctypes.
-      '';
-      homepage = https://github.com/terencehonles/fusepy;
-      license = licenses.isc;
-      platforms = platforms.unix;
-    };
-  };
+  fusepy = callPackage ../development/python-modules/fusepy { };
 
   future = callPackage ../development/python-modules/future { };
   future15 = self.future.overridePythonAttrs (old: rec {
@@ -5330,291 +2334,45 @@ in {
 
   futures = callPackage ../development/python-modules/futures { };
 
-  gcovr = buildPythonPackage rec {
-    name = "gcovr-2.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gcovr/${name}.tar.gz";
-      sha256 = "2c878e03c2eff2282e64035bec0a30532b2b1173aadf08486401883b79e4dab1";
-    };
-
-    meta = {
-      description = "A Python script for summarizing gcov data";
-      license = "BSD";
-    };
-  };
+  gcovr = callPackage ../development/python-modules/gcovr { };
 
   gdal = toPythonModule (pkgs.gdal.override {
     pythonPackages = self;
   });
 
-  gdrivefs = buildPythonPackage rec {
-    version = "0.14.9";
-    name = "gdrivefs-${version}";
-    namePrefix = "";
-    disabled = !isPy27;
+  gdrivefs = callPackage ../development/python-modules/gdrivefs { };
 
-    src = pkgs.fetchurl {
-      url = "https://github.com/dsoprea/GDriveFS/archive/${version}.tar.gz";
-      sha256 = "1mc2r35nf5k8vzwdcdhi0l9rb97amqd5xb53lhydj8v8f4rndk7a";
-    };
-
-    buildInputs = with self; [ gipc greenlet httplib2 six ];
-    propagatedBuildInputs = with self; [ dateutil fusepy google_api_python_client ];
-
-    patchPhase = ''
-      substituteInPlace gdrivefs/resources/requirements.txt \
-        --replace "==" ">="
-    '';
-
-    meta = {
-      description = "Mount Google Drive as a local file system";
-      longDescription = ''
-        GDriveFS is a FUSE wrapper for Google Drive developed. Design goals:
-        - Thread for monitoring changes via "changes" functionality of API.
-        - Complete stat() implementation.
-        - Seamlessly work around duplicate-file allowances in Google Drive.
-        - Seamlessly manage file-type versatility in Google Drive
-          (Google Doc files do not have a particular format).
-        - Allow for the same file at multiple paths.
-      '';
-      homepage = https://github.com/dsoprea/GDriveFS;
-      license = licenses.gpl2;
-      platforms = platforms.unix;
-    };
-  };
-
-  genshi = buildPythonPackage {
-    name = "genshi-0.7";
-
-    src = pkgs.fetchurl {
-      url = http://ftp.edgewall.com/pub/genshi/Genshi-0.7.tar.gz;
-      sha256 = "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x";
-    };
-
-    # FAIL: test_sanitize_remove_script_elem (genshi.filters.tests.html.HTMLSanitizerTestCase)
-    # FAIL: test_sanitize_remove_src_javascript (genshi.filters.tests.html.HTMLSanitizerTestCase)
-    doCheck = false;
-
-    buildInputs = with self; [ setuptools ];
-
-    meta = {
-      description = "Python components for parsing HTML, XML and other textual content";
-
-      longDescription = ''
-        Python library that provides an integrated set of
-        components for parsing, generating, and processing HTML, XML or other
-        textual content for output generation on the web.
-      '';
-
-      license = "BSD";
-    };
-  };
+  genshi = callPackage ../development/python-modules/genshi { };
 
   gevent = callPackage ../development/python-modules/gevent { };
 
-  geventhttpclient = buildPythonPackage rec {
-    name = "geventhttpclient-${version}";
-    version = "1.3.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/geventhttpclient/${name}.tar.gz";
-      sha256 = "bd87af8854f5fb05738916c8973671f7035568aec69b7c842887d6faf9c0a01d";
-    };
-
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [ gevent certifi six backports_ssl_match_hostname ];
-
-    # Several tests fail that require network
-    doCheck = false;
-    checkPhase = ''
-      py.test $out
-    '';
-
-    meta = {
-      homepage = https://github.com/gwik/geventhttpclient;
-      description = "HTTP client library for gevent";
-      license = licenses.mit;
-      maintainers = with maintainers; [ koral ];
-    };
-  };
-
-  gevent-socketio = buildPythonPackage rec {
-    name = "gevent-socketio-0.3.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gevent-socketio/${name}.tar.gz";
-      sha256 = "1zra86hg2l1jcpl9nsnqagy3nl3akws8bvrbpgdxk15x7ywllfak";
-    };
+  geventhttpclient = callPackage ../development/python-modules/geventhttpclient { };
 
-    buildInputs = with self; [ versiontools gevent-websocket mock pytest ];
-    propagatedBuildInputs = with self; [ gevent ];
-
-  };
+  gevent-socketio = callPackage ../development/python-modules/gevent-socketio { };
 
   geopandas = callPackage ../development/python-modules/geopandas { };
 
   geojson = callPackage ../development/python-modules/geojson { };
 
-  gevent-websocket = buildPythonPackage rec {
-    name = "gevent-websocket-0.9.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gevent-websocket/${name}.tar.gz";
-      sha256 = "07rqwfpbv13mk6gg8mf0bmvcf6siyffjpgai1xd8ky7r801j4xb4";
-    };
-
-    # SyntaxError in tests.
-    disabled = isPy3k;
-
-    propagatedBuildInputs = with self; [ gevent ];
-
-  };
-
-  genzshcomp = buildPythonPackage {
-    name = "genzshcomp-0.5.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/genzshcomp/genzshcomp-0.5.1.tar.gz";
-      sha256 = "c77d007cc32cdff836ecf8df6192371767976c108a75b055e057bb6f4a09cd42";
-    };
-
-    buildInputs = with self; [ setuptools ];
-
-    meta = {
-      description = "Automatically generated zsh completion function for Python's option parser modules";
-      license = "BSD";
-    };
-  };
+  gevent-websocket = callPackage ../development/python-modules/gevent-websocket { };
 
+  genzshcomp = callPackage ../development/python-modules/genzshcomp { };
 
   gflags = callPackage ../development/python-modules/gflags { };
 
   ghdiff = callPackage ../development/python-modules/ghdiff { };
 
-  gipc = buildPythonPackage rec {
-    name = "gipc-0.5.0";
-    disabled = !isPy27;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gipc/${name}.zip";
-      sha256 = "08c35xzv7nr12d9xwlywlbyzzz2igy0yy6y52q2nrkmh5d4slbpc";
-    };
-
-    propagatedBuildInputs = with self; [ gevent ];
-
-    meta = {
-      description = "gevent-cooperative child processes and IPC";
-      longDescription = ''
-        Usage of Python's multiprocessing package in a gevent-powered
-        application may raise problems and most likely breaks the application
-        in various subtle ways. gipc (pronunciation "gipsy") is developed with
-        the motivation to solve many of these issues transparently. With gipc,
-        multiprocessing. Process-based child processes can safely be created
-        anywhere within your gevent-powered application.
-      '';
-      homepage = http://gehrcke.de/gipc;
-      license = licenses.mit;
-    };
-  };
-
-  git-sweep = buildPythonPackage rec {
-    name = "git-sweep-0.1.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/git-sweep/${name}.tar.gz";
-      sha256 = "1csp0zd049d643d409rfivbswwzrayb4i6gkypp5mc27fb1z2afd";
-    };
-
-    propagatedBuildInputs = with self; [ GitPython ];
+  gipc = callPackage ../development/python-modules/gipc { };
 
-    meta = {
-      description = "A command-line tool that helps you clean up Git branches";
-      homepage = https://github.com/arc90/git-sweep;
-      license = licenses.mit;
-      maintainers = with maintainers; [ pSub ];
-    };
-  };
+  git-sweep = callPackage ../development/python-modules/git-sweep { };
 
   glances = callPackage ../development/python-modules/glances { };
 
-  github3_py = buildPythonPackage rec {
-    name = "github3.py-${version}";
-    version = "1.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/github3.py/${name}.tar.gz";
-      sha256 = "1cxaqdqmz9w2afc0cw2jyv783fp0grydbik0frzj79azzkhyg4gf";
-    };
-
-    buildInputs = with self; [ unittest2 pytest mock betamax betamax-matchers dateutil ];
-
-    propagatedBuildInputs = with self; [ requests pyopenssl uritemplate_py
-      ndg-httpsclient requests_toolbelt pyasn1 ];
+  github3_py = callPackage ../development/python-modules/github3_py { };
 
-    postPatch = ''
-      sed -i -e 's/mock ==1.0.1/mock>=1.0.1/' setup.py
-      sed -i -e 's/unittest2 ==0.5.1/unittest2>=0.5.1/' setup.py
-    '';
-
-    # TODO: only disable the tests that require network
-    doCheck = false;
+  github-webhook = callPackage ../development/python-modules/github-webhook { };
 
-    meta = with stdenv.lib; {
-      homepage = http://github3py.readthedocs.org/en/master/;
-      description = "A wrapper for the GitHub API written in python";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ pSub ];
-    };
-  };
-
-  github-webhook = buildPythonPackage rec {
-    name = "github-webhook-${version}";
-    version = "unstable-2016-03-11";
-
-    # There is a PyPI package but an older one.
-    src = pkgs.fetchgit {
-      url = "https://github.com/bloomberg/python-github-webhook.git";
-      rev = "ca1855479ee59c4373da5425dbdce08567605d49";
-      sha256 = "0mqwig9281iyzbphp1d21a4pqdrf98vs9k8lqpqx6spzgqaczx5f";
-    };
-
-    propagatedBuildInputs = with self; [ flask ];
-    # No tests
-    doCheck = false;
-
-    meta = {
-      description = "A framework for writing webhooks for GitHub";
-      license = licenses.mit;
-      homepage = https://github.com/bloomberg/python-github-webhook;
-    };
-  };
-
-  goobook = buildPythonPackage rec {
-    name = "goobook-1.9";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/g/goobook/${name}.tar.gz";
-      sha256 = "02xmq8sjavza17av44ks510934wrshxnsm6lvhvazs45s92b671i";
-    };
-
-    buildInputs = with self; [ ];
-
-    preConfigure = ''
-      sed -i '/distribute/d' setup.py
-    '';
-
-    meta = {
-      description = "Search your google contacts from the command-line or mutt";
-      homepage    = https://pypi.python.org/pypi/goobook;
-      license     = licenses.gpl3;
-      maintainers = with maintainers; [ lovek323 hbunke ];
-      platforms   = platforms.unix;
-    };
-
-    propagatedBuildInputs = with self; [ oauth2client gdata simplejson httplib2 keyring six rsa ];
-  };
+  goobook = callPackage ../development/python-modules/goobook { };
 
   googleapis_common_protos = callPackage ../development/python-modules/googleapis_common_protos { };
 
@@ -5624,31 +2382,7 @@ in {
 
   google_api_python_client = callPackage ../development/python-modules/google-api-python-client { };
 
-  google_apputils = buildPythonPackage rec {
-    name = "google-apputils-0.4.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/google-apputils/${name}.tar.gz";
-      sha256 = "1sxsm5q9vr44qzynj8l7p3l7ffb0zl1jdqhmmzmalkx941nbnj1b";
-    };
-
-    preConfigure = ''
-      sed -i '/ez_setup/d' setup.py
-    '';
-
-    propagatedBuildInputs = with self; [ pytz gflags dateutil mox ];
-
-    checkPhase = ''
-      ${python.executable} setup.py google_test
-    '';
-
-    doCheck = true;
-
-    meta = {
-      description = "Google Application Utilities for Python";
-      homepage = http://code.google.com/p/google-apputils-python;
-    };
-  };
+  google_apputils = callPackage ../development/python-modules/google_apputils { };
 
   google_auth = callPackage ../development/python-modules/google_auth { };
 
@@ -5656,7 +2390,7 @@ in {
 
   google_cloud_speech = callPackage ../development/python-modules/google_cloud_speech { };
 
-  gpgme = toPythonModule (pkgs.gpgme.override { pythonSupport=true; inherit python; });
+  gpgme = toPythonModule (pkgs.gpgme.override { pythonSupport=true; });
 
   gphoto2 = callPackage ../development/python-modules/gphoto2 {
     inherit (pkgs) pkgconfig;
@@ -5676,51 +2410,9 @@ in {
 
   grpcio-tools = callPackage ../development/python-modules/grpcio-tools { };
 
-  gspread = buildPythonPackage rec {
-    version = "0.2.3";
-    name = "gspread-${version}";
+  gspread = callPackage ../development/python-modules/gspread { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/gspread/${name}.tar.gz";
-      sha256 = "dba45ef9e652dcd8cf561ae65569bd6ecd18fcc77b991521490698fb2d847106";
-    };
-
-    meta = {
-      description = "Google Spreadsheets client library";
-      homepage = "https://github.com/burnash/gspread";
-      license = licenses.mit;
-    };
-  };
-
-  gyp = buildPythonPackage rec {
-    name = "gyp-${version}";
-    version = "2015-06-11";
-
-    src = pkgs.fetchgit {
-      url = "https://chromium.googlesource.com/external/gyp.git";
-      rev = "fdc7b812f99e48c00e9a487bd56751bbeae07043";
-      sha256 = "1imgxsl4mr1662vsj2mlnpvvrbz71yk00w8p85vi5bkgmc6awgiz";
-    };
-
-    prePatch = optionals pkgs.stdenv.isDarwin ''
-      sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' pylib/gyp/xcode_emulation.py
-    '';
-
-    patches = optionals pkgs.stdenv.isDarwin [
-      ../development/python-modules/gyp/no-darwin-cflags.patch
-      ../development/python-modules/gyp/no-xcode.patch
-    ];
-
-    disabled = isPy3k;
-
-    meta = {
-      description = "A tool to generate native build files";
-      homepage = https://chromium.googlesource.com/external/gyp/+/master/README.md;
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ codyopel ];
-      platforms = platforms.all;
-    };
-  };
+  gyp = callPackage ../development/python-modules/gyp { };
 
   guessit = callPackage ../development/python-modules/guessit { };
 
@@ -5728,17 +2420,7 @@ in {
 
   gunicorn = callPackage ../development/python-modules/gunicorn { };
 
-  hawkauthlib = buildPythonPackage rec {
-    name = "hawkauthlib-${version}";
-    version = "0.1.1";
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/hawkauthlib.git;
-      rev = "refs/tags/v${version}";
-      sha256 = "0mr1mpx4j9q7sch9arwfvpysnpf2p7ijy7072wilxm8pnj0bwvsi";
-    };
-
-    propagatedBuildInputs = with self; [ requests webob ];
-  };
+  hawkauthlib = callPackage ../development/python-modules/hawkauthlib { };
 
   hdbscan = callPackage ../development/python-modules/hdbscan { };
 
@@ -5746,67 +2428,13 @@ in {
 
   hcs_utils = callPackage ../development/python-modules/hcs_utils { };
 
-  hetzner = buildPythonPackage rec {
-    name = "hetzner-${version}";
-    version = "0.8.1";
-
-    src = pkgs.fetchFromGitHub {
-      repo = "hetzner";
-      owner = "aszlig";
-      rev = "v${version}";
-      sha256 = "1xd1klvjskv0pg8ginih597jkk491a55b8dq80dsm61m5sbsx3vq";
-    };
-
-    meta = {
-      homepage = "https://github.com/RedMoonStudios/hetzner";
-      description = "High-level Python API for accessing the Hetzner robot";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ aszlig ];
-    };
-  };
-
-
-  htmllaundry = buildPythonPackage rec {
-    name = "htmllaundry-2.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/htmllaundry/${name}.tar.gz";
-      sha256 = "e428cba78d5a965e959f5dac2eb7d5f7d627dd889990d5efa8d4e03f3dd768d9";
-    };
-
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ six lxml ];
-
-    # some tests fail, probably because of changes in lxml
-    # not relevant for me, if releavnt for you, fix it...
-    doCheck = false;
-
-    meta = {
-      description = "Simple HTML cleanup utilities";
-      license = licenses.bsd3;
-    };
-  };
+  hetzner = callPackage ../development/python-modules/hetzner { };
 
+  htmllaundry = callPackage ../development/python-modules/htmllaundry { };
 
   html5lib = callPackage ../development/python-modules/html5lib { };
 
-  http_signature = buildPythonPackage (rec {
-    name = "http_signature-0.1.4";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/http_signature/${name}.tar.gz";
-      sha256 = "14acc192ef20459d5e11b4e800dd3a4542f6bd2ab191bf5717c696bf30936c62";
-    };
-
-    propagatedBuildInputs = with self; [pycrypto];
-
-    meta = {
-      homepage = https://github.com/atl/py-http-signature;
-      description = "";
-      license = licenses.mit;
-    };
-  });
+  http_signature = callPackage ../development/python-modules/http_signature { };
 
   httpbin = callPackage ../development/python-modules/httpbin { };
 
@@ -5816,261 +2444,35 @@ in {
 
   hypothesis = callPackage ../development/python-modules/hypothesis { };
 
-  colored = buildPythonPackage rec {
-    name = "colored-${version}";
-    version = "1.1.5";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/c/colored/${name}.tar.gz";
-      sha256 = "1r1vsypk8v7az82d66bidbxlndx1h7xd4m43hpg1a6hsjr30wrm3";
-    };
-
-    # No proper test suite
-    doCheck = false;
-  };
-
-
-  xdis = buildPythonPackage rec {
-    name = "xdis-${version}";
-    version = "3.2.4";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/x/xdis/${name}.tar.gz";
-      sha256 = "0g2lh70837vigcbc1i58349wp2xzrhlsg2ahc92sn8d3jwxja4dk";
-    };
-    propagatedBuildInputs = with self; [ nose six ];
-
-    meta = {
-      description = "Python cross-version byte-code disassembler and marshal routines";
-      homepage = https://github.com/rocky/python-xdis/;
-      license = licenses.mit;
-    };
-  };
-
-  uncompyle6 = buildPythonPackage rec {
-    name = "uncompyle6-${version}";
-    version = "2.8.3";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/u/uncompyle6/${name}.tar.gz";
-      sha256 = "0hx5sji6qjvnq1p0zhvyk5hgracpv2w6iar1j59qwllxv115ffi1";
-    };
-    propagatedBuildInputs = with self; [ spark_parser xdis ];
-    meta = {
-      description = "Python cross-version byte-code deparser";
-      homepage = https://github.com/rocky/python-uncompyle6/;
-      license = licenses.mit;
-    };
-  };
-
-  lsi = buildPythonPackage rec {
-    name = "lsi-${version}";
-    version = "0.2.2";
-    disabled = isPy3k;
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/lsi/${name}.tar.gz";
-      sha256 = "0429iilb06yhsmvj3xp6wyhfh1rp4ndxlhwrm80r97z0w7plrk94";
-    };
-    propagatedBuildInputs = [
-      self.colored
-      self.boto
-      pkgs.openssh
-      pkgs.which
-    ];
-    meta = {
-      description = "CLI for querying and SSHing onto AWS EC2 instances";
-      homepage = https://github.com/NarrativeScience/lsi;
-      maintainers = [maintainers.adnelson];
-      license = licenses.mit;
-    };
-  };
-
-  hkdf = buildPythonPackage rec {
-    name = "hkdf-${version}";
-    version = "0.0.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hkdf/${name}.tar.gz";
-      sha256 = "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    checkPhase = ''
-      nosetests
-    '';
-
-    meta = {
-      description = "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)";
-      homepage = "https://github.com/casebeer/python-hkdf";
-      license = licenses.bsd2;
-    };
-  };
+  colored = callPackage ../development/python-modules/colored { };
 
-  httpretty = buildPythonPackage rec {
-    name = "httpretty-${version}";
-    version = "0.8.10";
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/httpretty/${name}.tar.gz";
-      sha256 = "1nmdk6d89z14x3wg4yxywlxjdip16zc8bqnfb471z1365mr74jj7";
-    };
-
-    buildInputs = with self; [ tornado requests httplib2 sure nose coverage certifi ];
-
-    propagatedBuildInputs = with self; [ urllib3 ];
-
-    postPatch = ''
-      sed -i -e 's/==.*$//' *requirements.txt
-      # XXX: Drop this after version 0.8.4 is released.
-      patch httpretty/core.py <<DIFF
-      ***************
-      *** 566 ****
-      !                 'content-length': len(self.body)
-      --- 566 ----
-      !                 'content-length': str(len(self.body))
-      DIFF
-
-      # Explicit encoding flag is required with python3, unless locale is set.
-      ${if !self.isPy3k then "" else
-        "patch -p0 -i ${../development/python-modules/httpretty/setup.py.patch}"}
-    '';
-
-    meta = {
-      homepage = "https://falcao.it/HTTPretty/";
-      description = "HTTP client request mocking tool";
-      license = licenses.mit;
-    };
-  };
-
-  icalendar = buildPythonPackage rec {
-    version = "3.9.0";
-    name = "icalendar-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/icalendar/${name}.tar.gz";
-      sha256 = "93d0b94eab23d08f62962542309916a9681f16de3d5eca1c75497f30f1b07792";
-    };
-
-    buildInputs = with self; [ setuptools ];
-    propagatedBuildInputs = with self; [ dateutil pytz ];
-
-    meta = {
-      description = "A parser/generator of iCalendar files";
-      homepage = "http://icalendar.readthedocs.org/";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ olcai ];
-    };
-  };
+  xdis = callPackage ../development/python-modules/xdis { };
 
-  imageio = buildPythonPackage rec {
-    name = "imageio-${version}";
-    version = "1.6";
+  uncompyle6 = callPackage ../development/python-modules/uncompyle6 { };
 
-    src = pkgs.fetchurl {
-      url = "https://github.com/imageio/imageio/archive/v${version}.tar.gz";
-      sha256 = "195snkk3fsbjqd5g1cfsd9alzs5q45gdbi2ka9ph4yxqb31ijrbv";
-    };
+  lsi = callPackage ../development/python-modules/lsi { };
 
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self; [ numpy ];
+  hkdf = callPackage ../development/python-modules/hkdf { };
 
-    checkPhase = ''
-      py.test
-    '';
+  httpretty = callPackage ../development/python-modules/httpretty { };
 
-    # Tries to write in /var/tmp/.imageio
-    doCheck = false;
+  icalendar = callPackage ../development/python-modules/icalendar { };
 
-    meta = {
-      description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats";
-      homepage = http://imageio.github.io/;
-      license = licenses.bsd2;
-    };
-  };
+  imageio = callPackage ../development/python-modules/imageio { };
 
   imgaug = callPackage ../development/python-modules/imgaug { };
 
   inflection = callPackage ../development/python-modules/inflection { };
 
-  influxdb = buildPythonPackage rec {
-    name = "influxdb-4.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/influxdb/${name}.tar.gz";
-      sha256 = "0injsml6zmb3hkgc03117fdlg573kbfgjbijpd5npf0vsy0xnpvz";
-    };
+  influxdb = callPackage ../development/python-modules/influxdb { };
 
-    # ImportError: No module named tests
-    doCheck = false;
-    propagatedBuildInputs = with self; [ requests dateutil pytz six ];
+  infoqscraper = callPackage ../development/python-modules/infoqscraper { };
 
-    meta = {
-      description = "Python client for InfluxDB";
-      homepage = https://github.com/influxdb/influxdb-python;
-      license = licenses.mit;
-    };
-  };
-
-  infoqscraper = buildPythonPackage rec {
-    name = pname + "-" + version;
-    version = "0.1.0";
-    pname = "infoqscraper";
-
-    src = pkgs.fetchFromGitHub {
-      owner = "cykl";
-      repo = pname;
-      rev = "v" + version;
-      sha256 = "07mxp4mla7fwfc032f3mxrhjarnhkjqdxxibf9ba87c93z3dq8jj";
-    };
-
-    # requires network
-    doCheck = false;
-
-    buildInputs = with self; [ html5lib ];
-    propagatedBuildInputs = (with self; [ six beautifulsoup4 ])
-                         ++ (with pkgs; [ ffmpeg swftools rtmpdump ]);
-
-    meta = {
-      description = "Discover presentations and/or create a movie consisting of slides and audio track from an infoq url";
-      homepage = "https://github.com/cykl/infoqscraper/wiki";
-      license = licenses.mit;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-  };
-
-  inifile = buildPythonPackage rec {
-    name = "inifile-0.3";
-
-    meta = {
-      description = "A small INI library for Python";
-      homepage    = "https://github.com/mitsuhiko/python-inifile";
-      license     = "BSD";
-      maintainers = with maintainers; [ vozz ];
-    };
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/inifile/${name}.tar.gz";
-      sha256 = "0zgd53czc1irwx6b5zip8xlmyfr40hz2pd498d8yv61znj6lm16h";
-    };
-  };
+  inifile = callPackage ../development/python-modules/inifile { };
 
   interruptingcow = callPackage ../development/python-modules/interruptingcow {};
 
-  iptools = buildPythonPackage rec {
-    version = "0.6.1";
-    name = "iptools-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/iptools/iptools-${version}.tar.gz";
-      sha256 = "0f03875a5bed740ba4bf44decb6a78679cca914a1ee8a6cc468114485c4d98e3";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    meta = {
-      description = "Utilities for manipulating IP addresses including a class that can be used to include CIDR network blocks in Django's INTERNAL_IPS setting";
-      homepage = https://pypi.python.org/pypi/iptools;
-    };
-  };
+  iptools = callPackage ../development/python-modules/iptools { };
 
   ipy = callPackage ../development/python-modules/IPy { };
 
@@ -6089,89 +2491,15 @@ in {
 
   ipywidgets = callPackage ../development/python-modules/ipywidgets { };
 
-  ipaddr = buildPythonPackage rec {
-    name = "ipaddr-${version}";
-    version = "2.1.11";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/ipaddr/${name}.tar.gz";
-      sha256 = "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v";
-    };
-
-    meta = {
-      description = "Google's IP address manipulation library";
-      homepage = http://code.google.com/p/ipaddr-py/;
-      license = licenses.asl20;
-    };
-  };
-
-  ipaddress = if (pythonAtLeast "3.3") then null else buildPythonPackage rec {
-    name = "ipaddress-1.0.18";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/ipaddress/${name}.tar.gz";
-      sha256 = "1q8klj9d84cmxgz66073x1j35cplr3r77vx1znhxiwl5w74391ax";
-    };
+  ipaddr = callPackage ../development/python-modules/ipaddr { };
 
-    checkPhase = ''
-      ${python.interpreter} test_ipaddress.py
-    '';
+  ipaddress = callPackage ../development/python-modules/ipaddress { };
 
-    meta = {
-      description = "Port of the 3.3+ ipaddress module to 2.6, 2.7, and 3.2";
-      homepage = https://github.com/phihag/ipaddress;
-      license = licenses.psfl;
-    };
-  };
+  ipdb = callPackage ../development/python-modules/ipdb { };
 
-  ipdb = buildPythonPackage rec {
-    name = "ipdb-${version}";
-    version = "0.8.1";
+  ipdbplugin = callPackage ../development/python-modules/ipdbplugin { };
 
-    disabled = isPyPy;  # setupterm: could not find terminfo database
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/ipdb/${name}.zip";
-      sha256 = "1763d1564113f5eb89df77879a8d3213273c4d7ff93dcb37a3070cdf0c34fd7c";
-    };
-    propagatedBuildInputs = with self; [ ipython ];
-  };
-
-  ipdbplugin = buildPythonPackage {
-    name = "ipdbplugin-1.4";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/i/ipdbplugin/ipdbplugin-1.4.tar.gz";
-      sha256 = "4778d78b5d0af1a2a6d341aed9e72eb73b1df6b179e145b4845d3a209137029c";
-    };
-    propagatedBuildInputs = with self; [ self.nose self.ipython ];
-  };
-
-  pythonIRClib = buildPythonPackage rec {
-    name = "irclib-${version}";
-    version = "0.4.8";
-
-    src = pkgs.fetchurl {
-      url = "mirror://sourceforge/python-irclib/python-irclib-${version}.tar.gz";
-      sha256 = "1x5456y4rbxmnw4yblhb4as5791glcw394bm36px3x6l05j3mvl1";
-    };
-
-    patches = [(pkgs.fetchurl {
-      url = "http://trac.uwc.ac.za/trac/python_tools/browser/xmpp/resources/irc-transport/irclib.py.diff?rev=387&format=raw";
-      name = "irclib.py.diff";
-      sha256 = "5fb8d95d6c95c93eaa400b38447c63e7a176b9502bc49b2f9b788c9905f4ec5e";
-    })];
-
-    patchFlags = "irclib.py";
-
-    propagatedBuildInputs = with self; [ paver ];
-
-    disabled = isPy3k;
-    meta = {
-      description = "Python IRC library";
-      homepage = https://bitbucket.org/jaraco/irc;
-      license = with licenses; [ lgpl21 ];
-    };
-  };
+  pythonIRClib = callPackage ../development/python-modules/pythonirclib { };
 
   iso-639 = callPackage ../development/python-modules/iso-639 {};
 
@@ -6187,73 +2515,15 @@ in {
 
   jellyfish = callPackage ../development/python-modules/jellyfish { };
 
-  j2cli = buildPythonPackage rec {
-    name = "j2cli-${version}";
-    version = "0.3.1-0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/j2cli/${name}.tar.gz";
-      sha256 = "0y3w1x9935qzx8w6m2r6g4ghyjmxn33wryiif6xb56q7cj9w1433";
-    };
-
-    disabled = !isPy27;
-
-    buildInputs = [ self.nose ];
-
-    propagatedBuildInputs = with self; [ jinja2 pyyaml ];
-
-    meta = {
-      homepage = https://github.com/kolypto/j2cli;
-      description = "Jinja2 Command-Line Tool";
-      license = licenses.bsd3;
-      longDescription = ''
-        J2Cli is a command-line tool for templating in shell-scripts,
-        leveraging the Jinja2 library.
-      '';
-      platforms = platforms.all;
-      maintainers = with maintainers; [ rushmorem ];
-    };
-  };
+  j2cli = callPackage ../development/python-modules/j2cli { };
 
   jinja2 = callPackage ../development/python-modules/jinja2 { };
 
-  jinja2_time = buildPythonPackage rec {
-    version = "0.2.0";
-    name = "jinja2-time-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jinja2-time/${name}.tar.gz";
-      sha256 = "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni";
-    };
-
-    propagatedBuildInputs = with self; [ arrow jinja2 ];
-
-    meta = {
-      homepage = https://github.com/hackebrot/jinja2-time;
-      description = "Jinja2 Extension for Dates and Times";
-      license = licenses.mit;
-    };
-  };
+  jinja2_time = callPackage ../development/python-modules/jinja2_time { };
 
   jinja2_pluralize = callPackage ../development/python-modules/jinja2_pluralize { };
 
-  jmespath = buildPythonPackage rec {
-    name = "jmespath-0.9.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jmespath/${name}.tar.gz";
-      sha256 = "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8";
-    };
-
-    buildInputs = with self; [ nose ];
-    propagatedBuildInputs = with self; [ ply ];
-
-    meta = {
-      homepage = https://github.com/boto/jmespath;
-      description = "JMESPath allows you to declaratively specify how to extract elements from a JSON document";
-      license = "BSD";
-    };
-  };
+  jmespath = callPackage ../development/python-modules/jmespath { };
 
   journalwatch = callPackage ../tools/system/journalwatch {
     inherit (self) systemd pytest;
@@ -6279,49 +2549,6 @@ in {
 
   jupyterhub-ldapauthenticator = callPackage ../development/python-modules/jupyterhub-ldapauthenticator { };
 
-  jsonpath_rw = buildPythonPackage rec {
-    name = "jsonpath-rw-${version}";
-    version = "1.4.0";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/j/jsonpath-rw/${name}.tar.gz";
-      sha256 = "05c471281c45ae113f6103d1268ec7a4831a2e96aa80de45edc89b11fac4fbec";
-    };
-
-    propagatedBuildInputs = with self; [
-      ply
-      six
-      decorator
-    ];
-
-    # ImportError: No module named tests
-    doCheck = false;
-
-    meta = {
-      homepage = https://github.com/kennknowles/python-jsonpath-rw;
-      description = "A robust and significantly extended implementation of JSONPath for Python, with a clear AST for metaprogramming";
-      license = licenses.asl20;
-    };
-  };
-
-  kerberos = buildPythonPackage rec {
-    name = "kerberos-1.2.4";
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/source/k/kerberos/${name}.tar.gz";
-      sha256 = "11q9jhzdl88jh8jgn7cycq034m36g2ncxds7mr3vqkngpcirkx6n";
-    };
-
-    buildInputs = [ pkgs.kerberos ];
-
-    meta = {
-      description = "Kerberos high-level interface";
-      homepage = https://pypi.python.org/pypi/kerberos;
-      license = licenses.asl20;
-    };
-  };
-
   keyring = callPackage ../development/python-modules/keyring { };
 
   keyutils = callPackage ../development/python-modules/keyutils { inherit (pkgs) keyutils; };
@@ -6351,128 +2578,27 @@ in {
 
   lark-parser = callPackage ../development/python-modules/lark-parser { };
 
-  lazy-object-proxy = buildPythonPackage rec {
-    name = "lazy-object-proxy-${version}";
-    version = "1.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/lazy-object-proxy/${name}.tar.gz";
-      sha256 = "22ed751a2c63c6cf718674fd7461b1dfc45215bab4751ca32b6c9b8cb2734cb3";
-    };
-
-    buildInputs = with self; [ pytest ];
-    checkPhase = ''
-      py.test tests
-    '';
-
-    # Broken tests. Seem to be fixed upstream according to Travis.
-    doCheck = false;
+  jsonpath_rw = callPackage ../development/python-modules/jsonpath_rw { };
 
-    meta = {
-      description = "A fast and thorough lazy object proxy";
-      homepage = https://github.com/ionelmc/python-lazy-object-proxy;
-      license = with licenses; [ bsd2 ];
-    };
+  kerberos = callPackage ../development/python-modules/kerberos { };
 
-  };
+  lazy-object-proxy = callPackage ../development/python-modules/lazy-object-proxy { };
 
   ldaptor = callPackage ../development/python-modules/ldaptor { };
 
-  le = buildPythonPackage rec {
-    name = "le-${version}";
-    version = "1.4.29";
+  le = callPackage ../development/python-modules/le { };
 
-    src = pkgs.fetchurl {
-      url = "https://github.com/logentries/le/archive/v${version}.tar.gz";
-      sha256 = "d29738937cb6e714b6ec2ae74b66b1983482ffd54b4faa40767af18509521d4c";
-    };
-
-    disabled = isPy3k;
-
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [ simplejson psutil ];
-
-    meta = {
-      homepage = "https://github.com/logentries/le";
-      description = "Logentries agent";
-    };
-  };
-
-  lektor = buildPythonPackage rec {
-    name = "lektor-${version}";
-
-    version = "2.3";
-
-    src = pkgs.fetchgit {
-      url = "https://github.com/lektor/lektor";
-      rev = "refs/tags/${version}";
-      sha256 = "1n0ylh1sbpvi9li3g6a7j7m28njfibn10y6s2gayjxwm6fpphqxy";
-    };
-
-    LC_ALL="en_US.UTF-8";
-
-    meta = {
-      description = "A static content management system";
-      homepage    = "https://www.getlektor.com/";
-      license     = "BSD";
-      maintainers = with maintainers; [ vozz ];
-    };
-
-    # No tests included in archive
-    doCheck = false;
-
-    propagatedBuildInputs = with self; [
-      click watchdog exifread requests mistune inifile Babel jinja2
-      flask pyopenssl ndg-httpsclient pkgs.glibcLocales
-    ];
-  };
+  lektor = callPackage ../development/python-modules/lektor { };
 
   python-oauth2 = callPackage ../development/python-modules/python-oauth2 { };
 
   python_openzwave = callPackage ../development/python-modules/python_openzwave { };
 
-  python-Levenshtein = buildPythonPackage rec {
-    name = "python-Levenshtein-${version}";
-    version = "0.12.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-Levenshtein/${name}.tar.gz";
-      sha256 = "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3";
-    };
-
-    # No tests included in archive
-    doCheck = false;
-
-    meta = {
-      description = "Functions for fast computation of Levenshtein distance and string similarity";
-      homepage    = "https://github.com/ztane/python-Levenshtein";
-      license     = licenses.gpl2;
-      maintainers = with maintainers; [ aske ];
-    };
-  };
-
-  libcloud = buildPythonPackage (rec {
-    name = "libcloud-1.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/a/apache-libcloud/apache-${name}.tar.bz2";
-      sha256 = "0qlhyz5f32xg8i10biyzqscks8d28vklk63hvj45vzy1amw60kqz";
-    };
-
-    buildInputs = with self; [ mock ];
-
-    propagatedBuildInputs = with self; [ pycrypto ];
-    preConfigure = "cp libcloud/test/secrets.py-dist libcloud/test/secrets.py";
+  python-Levenshtein = callPackage ../development/python-modules/python-levenshtein { };
 
-    # failing tests for 26 and 27
-    doCheck = false;
+  fs = callPackage ../development/python-modules/fs { };
 
-    meta = {
-      description = "A unified interface to many cloud providers";
-      homepage = http://incubator.apache.org/libcloud/;
-    };
-  });
+  libcloud = callPackage ../development/python-modules/libcloud { };
 
   libgpuarray = callPackage ../development/python-modules/libgpuarray {
     clblas = pkgs.clblas.override { boost = self.boost; };
@@ -6493,59 +2619,18 @@ in {
   libplist = disabledIf isPy3k
     (toPythonModule (pkgs.libplist.override{python2Packages=self; })).py;
 
-  libxml2 = disabledIf isPy3k
-    (toPythonModule (pkgs.libxml2.override{pythonSupport=true; python2=python;})).py;
+  libxml2 = toPythonModule (pkgs.libxml2.override{pythonSupport=true; python2=python;}).py;
 
   libxslt = disabledIf isPy3k
     (toPythonModule (pkgs.libxslt.override{pythonSupport=true; python2=python; inherit (self) libxml2;})).py;
 
   limits = callPackage ../development/python-modules/limits { };
 
-  limnoria = buildPythonPackage rec {
-    name = "limnoria-${version}";
-    version = "2016.05.06";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/limnoria/${name}.tar.gz";
-      sha256 = "09kbii5559d09jjb6cryj8rva1050r54dvb67hlcvxhy8g3gr1y3";
-    };
-
-    patchPhase = ''
-      sed -i 's/version=version/version="${version}"/' setup.py
-    '';
-    buildInputs = with self; [ pkgs.git ];
-    propagatedBuildInputs = with self; [  ];
-
-    doCheck = false;
-
-    meta = {
-      description = "A modified version of Supybot, an IRC bot";
-      homepage = http://supybot.fr.cr;
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ goibhniu ];
-    };
-  };
+  limnoria = callPackage ../development/python-modules/limnoria { };
 
   line_profiler = callPackage ../development/python-modules/line_profiler { };
 
-  linode = buildPythonPackage rec {
-    name = "linode-${version}";
-    version = "0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/linode/linode-${version}.tar.gz";
-      sha256 = "db3c2a7fab8966d903a63f16c515bff241533e4ef2d746aa7aae4a49bba5e573";
-    };
-
-    propagatedBuildInputs = with self; [ requests ];
-
-    meta = {
-      homepage = "https://github.com/ghickman/linode";
-      description = "A thin python wrapper around Linode's API";
-      license = licenses.mit;
-      maintainers = with maintainers; [ nslqqq ];
-    };
-  };
+  linode = callPackage ../development/python-modules/linode { };
 
   linode-api = callPackage ../development/python-modules/linode-api { };
 
@@ -6567,75 +2652,15 @@ in {
 
   lxml = callPackage ../development/python-modules/lxml {inherit (pkgs) libxml2 libxslt;};
 
-  lxc = buildPythonPackage (rec {
-    name = "python-lxc-unstable-2016-08-25";
-    disabled = !isPy27;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "lxc";
-      repo = "python2-lxc";
-      rev = "0553f05d23b56b59bf3015fa5e45bfbfab9021ef";
-      sha256 = "0p9kb20xvq91gx2wfs3vppb7vsp8kmd90i3q95l4nl1y4aismdn4";
-    };
-
-    buildInputs = [ pkgs.lxc ];
-
-    meta = {
-      description = "Out of tree python 2.7 binding for liblxc";
-      homepage = https://github.com/lxc/python2-lxc;
-      license = licenses.lgpl2;
-      maintainers = with maintainers; [ mic92 ];
-    };
-  });
+  lxc = callPackage ../development/python-modules/lxc { };
 
   py_scrypt = callPackage ../development/python-modules/py_scrypt { };
 
   python_magic = callPackage ../development/python-modules/python-magic { };
 
-  magic = buildPythonPackage rec {
-    name = "${pkgs.file.name}";
-
-    src = pkgs.file.src;
-
-    patchPhase = ''
-      substituteInPlace python/magic.py --replace "find_library('magic')" "'${pkgs.file}/lib/libmagic${stdenv.hostPlatform.extensions.sharedLibrary}'"
-    '';
-
-    buildInputs = with self; [ pkgs.file ];
-
-    preConfigure = "cd python";
-
-    # No test suite
-    doCheck = false;
-
-    meta = {
-      description = "A Python wrapper around libmagic";
-      homepage = http://www.darwinsys.com/file/;
-    };
-  };
-
-  m2crypto = buildPythonPackage rec {
-    version = "0.24.0";
-    name = "m2crypto-${version}";
+  magic = callPackage ../development/python-modules/magic { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/M/M2Crypto/M2Crypto-${version}.tar.gz";
-      sha256 = "1s2y0pf2zg7xf4nfwrw7zhwbk615r5a7bgi5wwkwzh6jl50n99c0";
-    };
-
-    buildInputs = with self; [ pkgs.swig2 pkgs.openssl ];
-
-    preConfigure = ''
-      substituteInPlace setup.py --replace "self.openssl = '/usr'" "self.openssl = '${pkgs.openssl.dev}'"
-    '';
-
-    doCheck = false; # another test that depends on the network.
-
-    meta = {
-      description = "A Python crypto and SSL toolkit";
-      homepage = http://chandlerproject.org/Projects/MeTooCrypto;
-    };
-  };
+  m2crypto = callPackage ../development/python-modules/m2crypto { };
 
   Mako = callPackage ../development/python-modules/Mako { };
 
@@ -6661,145 +2686,23 @@ in {
 
   marisa-trie = callPackage ../development/python-modules/marisa-trie { };
 
-  markupsafe = buildPythonPackage rec {
-    name = "markupsafe-${version}";
-    version = "1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/M/MarkupSafe/MarkupSafe-${version}.tar.gz";
-      sha256 = "0rdn1s8x9ni7ss8rfiacj7x1085lx8mh2zdwqslnw8xc3l4nkgm6";
-    };
-
-    meta = {
-      description = "Implements a XML/HTML/XHTML Markup safe string";
-      homepage = http://dev.pocoo.org;
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ domenkozar garbas ];
-    };
-  };
+  markupsafe = callPackage ../development/python-modules/markupsafe { };
 
   marshmallow = callPackage ../development/python-modules/marshmallow { };
 
   marshmallow-sqlalchemy = callPackage ../development/python-modules/marshmallow-sqlalchemy { };
 
-  manuel = buildPythonPackage rec {
-    name = "manuel-${version}";
-    version = "1.8.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/manuel/${name}.tar.gz";
-      sha256 = "1diyj6a8bvz2cdf9m0g2bbx9z2yjjnn3ylbg1zinpcjj6vldfx59";
-    };
-
-    propagatedBuildInputs = with self; [ six zope_testing ];
-
-    meta = {
-      description = "A documentation builder";
-      homepage = https://pypi.python.org/pypi/manuel;
-      license = licenses.zpl20;
-    };
-  };
-
-  mapsplotlib = buildPythonPackage rec {
-    name = "mapsplotlib-${version}";
-    version = "1.0.6";
-
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mapsplotlib/${name}.tar.gz";
-      sha256 = "09gpws3x0jd88n636baxx5izjffrpjy4j6jl8l7vj29yzvrdr2bp";
-    };
-
-    propagatedBuildInputs = with self; [ matplotlib scipy pandas requests pillow ];
+  manuel = callPackage ../development/python-modules/manuel { };
 
-    meta = {
-      description = "Custom Python plots on a Google Maps background";
-      homepage = https://github.com/tcassou/mapsplotlib;
-      maintainers = [ maintainers.rob ];
-    };
-  };
+  mapsplotlib = callPackage ../development/python-modules/mapsplotlib { };
 
   markdown = callPackage ../development/python-modules/markdown { };
 
   markdownsuperscript = callPackage ../development/python-modules/markdownsuperscript {};
 
-  markdown-macros = buildPythonPackage rec {
-    name = "markdown-macros-${version}";
-    version = "0.1.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/markdown-macros/${name}.tar.gz";
-      sha256 = "1lzvrb7nci22yp21ab2qqc9p0fhkazqj29vw0wln2r4ckb2nbawv";
-    };
-
-    patches = [
-      # Fixes a bug with markdown>2.4
-      (pkgs.fetchpatch {
-        url = "https://github.com/wnielson/markdown-macros/pull/1.patch";
-        sha256 = "17njbgq2srzkf03ar6yn92frnsbda3g45cdi529fdh0x8mmyxci0";
-      })
-    ];
-
-    prePatch = ''
-      substituteInPlace setup.py --replace "distribute" "setuptools"
-    '';
-
-    propagatedBuildInputs = with self; [ markdown ];
-
-    doCheck = false;
-
-    meta = {
-      description = "An extension for python-markdown that makes writing trac-like macros easy";
-      homepage = https://github.com/wnielson/markdown-macros;
-      license = licenses.mit;
-      maintainers = [ maintainers.abigailbuccaneer ];
-    };
-  };
-
-  mathics = if (versionOlder self.django.version "1.8") ||
-               (versionAtLeast self.django.version "1.9")
-            then throw "mathics only supports django-1.8.x"
-            else buildPythonPackage rec {
-    name = "mathics-${version}";
-    version = "0.9";
-    src = pkgs.fetchFromGitHub {
-      owner = "mathics";
-      repo = "Mathics";
-      rev = "v${version}";
-      sha256 = "0xzz7j8xskj5y6as178mjmm0i2xbhd4q4mwmdnvghpd2aqq3qx1c";
-    };
-
-    buildInputs = with self; [ pexpect ];
-
-    prePatch = ''
-      substituteInPlace setup.py --replace "sympy==0.7.6" "sympy"
-    '';
-
-    postFixup = ''
-      wrapPythonProgramsIn $out/bin $out
-      patchPythonScript $out/${python.sitePackages}/mathics/manage.py
-    '';
-
-    propagatedBuildInputs = with self; [
-      cython
-      sympy
-      django
-      ply
-      mpmath
-      dateutil
-      colorama
-      six
-    ];
-
-    meta = {
-      description = "A general-purpose computer algebra system";
-      homepage = http://www.mathics.org;
-      license = licenses.gpl3;
-      maintainers = [ maintainers.benley ];
-    };
-  };
+  markdown-macros = callPackage ../development/python-modules/markdown-macros { };
 
+  mathics = callPackage ../development/python-modules/mathics { };
 
   matplotlib = callPackage ../development/python-modules/matplotlib {
     stdenv = if stdenv.isDarwin then pkgs.clangStdenv else pkgs.stdenv;
@@ -6813,186 +2716,31 @@ in {
 
   mccabe = callPackage ../development/python-modules/mccabe { };
 
-  mechanize = buildPythonPackage (rec {
-    name = "mechanize-0.3.5";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mechanize/${name}.tar.gz";
-      sha256 = "0rki9nl4y42q694parafcsdcdqvkdjckrbg6n0691302lfsrkyfl";
-    };
-
-    propagatedBuildInputs = with self; [ html5lib ];
-
-    doCheck = false;
-
-    meta = {
-      description = "Stateful programmatic web browsing in Python";
-
-      homepage = http://wwwsearch.sourceforge.net/;
-
-      license = "BSD-style";
-    };
-  });
+  mechanize = callPackage ../development/python-modules/mechanize { };
 
   MechanicalSoup = callPackage ../development/python-modules/MechanicalSoup { };
 
-  meld3 = buildPythonPackage rec {
-    name = "meld3-1.0.0";
-
-    src = pkgs.fetchurl {
-      url = mirror://pypi/m/meld3/meld3-1.0.0.tar.gz;
-      sha256 = "57b41eebbb5a82d4a928608962616442e239ec6d611fe6f46343e765e36f0b2b";
-    };
-
-    doCheck = false;
-
-    meta = {
-      description = "An HTML/XML templating engine used by supervisor";
-      homepage = https://github.com/supervisor/meld3;
-      license = licenses.free;
-    };
-  };
+  meld3 = callPackage ../development/python-modules/meld3 { };
 
   meliae = callPackage ../development/python-modules/meliae {};
 
   meinheld = callPackage ../development/python-modules/meinheld { };
 
-  memcached = buildPythonPackage rec {
-    name = "memcached-1.51";
+  memcached = callPackage ../development/python-modules/memcached { };
 
-    src = if isPy3k then pkgs.fetchurl {
-      url = "mirror://pypi/p/python3-memcached/python3-${name}.tar.gz";
-      sha256 = "0na8b369q8fivh3y0nvzbvhh3lgvxiyyv9xp93cnkvwfsr8mkgkw";
-    } else pkgs.fetchurl {
-      url = "http://ftp.tummy.com/pub/python-memcached/old-releases/python-${name}.tar.gz";
-      sha256 = "124s98m6hvxj6x90d7aynsjfz878zli771q96ns767r2mbqn7192";
-    };
-
-    meta = {
-      description = "Python API for communicating with the memcached distributed memory object cache daemon";
-      homepage = http://www.tummy.com/Community/software/python-memcached/;
-    };
-  };
-
-
-  memory_profiler = buildPythonPackage rec {
-    name = "memory_profiler-${version}";
-    version = "0.41";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/memory_profiler/${name}.tar.gz";
-      sha256 = "dce6e931c281662a500b142595517d095267216472c2926e5ec8edab89898d10";
-    };
-
-    # Tests don't import profile
-    doCheck = false;
-
-    meta = {
-      description = "A module for monitoring memory usage of a python program";
-      homepage = https://pypi.python.org/pypi/memory_profiler;
-      license = licenses.bsd3;
-    };
-  };
+  memory_profiler = callPackage ../development/python-modules/memory_profiler { };
 
   metaphone = callPackage ../development/python-modules/metaphone { };
 
-  mezzanine = buildPythonPackage rec {
-    version = "3.1.10";
-    name = "mezzanine-${version}";
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/stephenmcd/mezzanine/archive/${version}.tar.gz";
-      sha256 = "1cd7d3dji8q4mvcnf9asxn8j109pd5g5d5shr6xvn0iwr35qprgi";
-    };
-    patches = [ ../development/python-modules/mezzanine/writable_settings.patch ];
-
-    disabled = isPyPy;
-
-    buildInputs = with self; [ pyflakes pep8 ];
-    propagatedBuildInputs = with self; [
-      django filebrowser_safe grappelli_safe bleach tzlocal beautifulsoup4
-      requests requests_oauthlib future pillow
-    ];
-
-    # Tests Fail Due to Syntax Warning, Fixed for v3.1.11+
-    doCheck = false;
-    # sed calls will be unecessary in v3.1.11+
-    preConfigure = ''
-      sed -i 's/==/>=/' setup.py
-    '';
-
-    LC_ALL="en_US.UTF-8";
-
-    meta = {
-      description = ''
-        A content management platform built using the Django framework
-      '';
-      longDescription = ''
-        Mezzanine is a powerful, consistent, and flexible content management
-        platform. Built using the Django framework, Mezzanine provides a
-        simple yet highly extensible architecture that encourages diving in and
-        hacking on the code. Mezzanine is BSD licensed and supported by a
-        diverse and active community.
-
-        In some ways, Mezzanine resembles tools such as Wordpress that provide
-        an intuitive interface for managing pages, blog posts, form data, store
-        products, and other types of content. But Mezzanine is also different.
-        Unlike many other platforms that make extensive use of modules or
-        reusable applications, Mezzanine provides most of its functionality by
-        default. This approach yields a more integrated and efficient platform.
-      '';
-      homepage = http://mezzanine.jupo.org/;
-      downloadPage = https://github.com/stephenmcd/mezzanine/releases;
-      license = licenses.free;
-      maintainers = with maintainers; [ prikhi ];
-      platforms = platforms.linux;
-      broken = true; # broken dependency of django within filebrowser_safe
-    };
-  };
+  mezzanine = callPackage ../development/python-modules/mezzanine { };
 
   micawber = callPackage ../development/python-modules/micawber { };
 
   milksnake = callPackage ../development/python-modules/milksnake { };
 
-  minimock = buildPythonPackage rec {
-    version = "1.2.8";
-    name = "minimock-${version}";
-
-    src = pkgs.fetchurl {
-      url = "https://bitbucket.org/jab/minimock/get/${version}.zip";
-      sha256 = "c88fa8a7120623f23990a7f086a9657f6ced09025a55e3be8649a30b4945441a";
-    };
-
-    buildInputs = with self; [ nose ];
-
-    checkPhase = "./test";
-
-    meta = {
-      description = "A minimalistic mocking library for python";
-      homepage = https://pypi.python.org/pypi/MiniMock;
-    };
-  };
-
-  moviepy = buildPythonPackage rec {
-    name = "moviepy-${version}";
-    version = "0.2.2.11";
+  minimock = callPackage ../development/python-modules/minimock { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/moviepy/${name}.tar.gz";
-      sha256 = "d937d817e534efc54eaee2fc4c0e70b48fcd81e1528cd6425f22178704681dc3";
-    };
-
-    # No tests
-    doCheck = false;
-    propagatedBuildInputs = with self; [ numpy decorator imageio tqdm ];
-
-    meta = {
-      description = "Video editing with Python";
-      homepage = http://zulko.github.io/moviepy/;
-      license = licenses.mit;
-    };
-  };
+  moviepy = callPackage ../development/python-modules/moviepy { };
 
   mozterm = callPackage ../development/python-modules/mozterm { };
 
@@ -7000,177 +2748,33 @@ in {
 
   multidict = callPackage ../development/python-modules/multidict { };
 
-  munch = buildPythonPackage rec {
-    name = "munch-${version}";
-    version = "2.0.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/munch/${name}.tar.gz";
-      sha256 = "1420683a94f3a2ffc77935ddd28aa9ccb540dd02b75e02ed7ea863db437ab8b2";
-    };
-
-    meta = {
-      description = "A dot-accessible dictionary (a la JavaScript objects)";
-      license = licenses.mit;
-      homepage = https://github.com/Infinidat/munch;
-    };
-  };
+  munch = callPackage ../development/python-modules/munch { };
 
   nototools = callPackage ../data/fonts/noto-fonts/tools.nix { };
 
-  rainbowstream = buildPythonPackage rec {
-    name = "rainbowstream-${version}";
-    version = "1.3.7";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/r/rainbowstream/${name}.tar.gz";
-      sha256 = "0zpi1x3b535pwx8rkq57nnrb5d5ma65vvlalar9vi6ilp124x1w2";
-    };
-
-    patches = [
-      ../development/python-modules/rainbowstream/image.patch
-    ];
-
-    postPatch = ''
-      clib=$out/${python.sitePackages}/rainbowstream/image.so
-      substituteInPlace rainbowstream/c_image.py \
-        --replace @CLIB@ $clib
-      sed -i 's/requests.*"/requests"/' setup.py
-    '';
-
-    LC_ALL="en_US.UTF-8";
-
-    postInstall = ''
-      mkdir -p $out/lib
-      cc -fPIC -shared -o $clib rainbowstream/image.c
-      for prog in "$out/bin/"*; do
-        wrapProgram "$prog" \
-          --prefix PYTHONPATH : "$PYTHONPATH"
-      done
-    '';
-
-    buildInputs = with self; [
-      pkgs.libjpeg pkgs.freetype pkgs.zlib pkgs.glibcLocales
-      pillow twitter pyfiglet requests arrow dateutil pysocks
-      pocket
-    ];
-
-    meta = {
-      description = "Streaming command-line twitter client";
-      homepage    = "http://www.rainbowstream.org/";
-      license     = licenses.mit;
-      maintainers = with maintainers; [ thoughtpolice ];
-    };
-  };
+  rainbowstream = callPackage ../development/python-modules/rainbowstream { };
 
   pendulum = callPackage ../development/python-modules/pendulum { };
 
-  pocket = buildPythonPackage rec {
-    name = "pocket-${version}";
-    version = "0.3.6";
-
-    src = pkgs.fetchurl {
-      url    = "mirror://pypi/p/pocket/${name}.tar.gz";
-      sha256 = "1fc9vc5nyzf1kzmnrs18dmns7nn8wjfrg7br1w4c5sgs35mg2ywh";
-    };
-
-    buildInputs = with self; [
-      requests
-    ];
-
-    meta = {
-      description = "Wrapper for the pocket API";
-      homepage    = "https://github.com/tapanpandita/pocket";
-      license     = licenses.bsd3;
-      maintainers = with maintainers; [ ericsagnes ];
-    };
-  };
+  pocket = callPackage ../development/python-modules/pocket { };
 
   mistune = callPackage ../development/python-modules/mistune { };
 
   brotlipy = callPackage ../development/python-modules/brotlipy { };
 
-  sortedcollections = buildPythonPackage rec {
-    name = "sortedcollections-${version}";
-    version = "0.4.2";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sortedcollections/${name}.tar.gz";
-      sha256 = "12dlzln9gyv8smsy2k6d6dmr0ywrpwyrr1cjy649ia5h1g7xdvwa";
-    };
-    buildInputs = [ self.sortedcontainers ];
-
-    # wants to test all python versions with tox:
-    doCheck = false;
-
-    meta = {
-      description = "Python Sorted Collections";
-      homepage = http://www.grantjenks.com/docs/sortedcollections/;
-      license = licenses.asl20;
-    };
-  };
+  sortedcollections = callPackage ../development/python-modules/sortedcollections { };
 
   hyperframe = callPackage ../development/python-modules/hyperframe { };
 
   h2 = callPackage ../development/python-modules/h2 { };
 
-  editorconfig = buildPythonPackage rec {
-    name = "EditorConfig-${version}";
-    version = "0.12.1";
+  editorconfig = callPackage ../development/python-modules/editorconfig { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/e/editorconfig/${name}.tar.gz";
-      sha256 = "1qxqy9wfrpb2ldrk5nzidkpymc55lpf9lg3m8c8a5531jmbwhlwb";
-    };
-
-    meta = {
-      description = "EditorConfig File Locator and Interpreter for Python";
-      homepage = https://editorconfig.org/;
-      license = licenses.psfl;
-    };
-  };
-
-  mock = buildPythonPackage (rec {
-    name = "mock-2.0.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mock/${name}.tar.gz";
-      sha256 = "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i";
-    };
-
-    buildInputs = with self; [ unittest2 ];
-    propagatedBuildInputs = with self; [ funcsigs six pbr ];
-
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover
-    '';
-
-    meta = {
-      description = "Mock objects for Python";
-      homepage = http://python-mock.sourceforge.net/;
-      license = stdenv.lib.licenses.bsd2;
-    };
-  });
+  mock = callPackage ../development/python-modules/mock { };
 
   mock-open = callPackage ../development/python-modules/mock-open { };
 
-  modestmaps = buildPythonPackage rec {
-    name = "ModestMaps-1.4.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/M/ModestMaps/${name}.tar.gz";
-      sha256 = "0vyi1m9q4pc34i6rq5agb4x3qicx5sjlbxwmxfk70k2l5mnbjca3";
-    };
-
-    disabled = !isPy27;
-    propagatedBuildInputs = with self; [ pillow ];
-
-    meta = {
-      description = "A library for building interactive maps";
-      homepage = http://modestmaps.com;
-      license = stdenv.lib.licenses.bsd3;
-    };
-  };
+  modestmaps = callPackage ../development/python-modules/modestmaps { };
 
   # Needed here because moinmoin is loaded as a Python library.
   moinmoin = callPackage ../development/python-modules/moinmoin { };
@@ -7179,125 +2783,17 @@ in {
 
   moto = callPackage ../development/python-modules/moto {};
 
-  mox = buildPythonPackage rec {
-    name = "mox-0.5.3";
-
-    src = pkgs.fetchurl {
-      url = "http://pymox.googlecode.com/files/${name}.tar.gz";
-      sha256 = "4d18a4577d14da13d032be21cbdfceed302171c275b72adaa4c5997d589a5030";
-    };
-
-    # error: invalid command 'test'
-    doCheck = false;
-
-    meta = {
-      homepage = http://code.google.com/p/pymox/;
-      description = "A mock object framework for Python";
-    };
-  };
-
-  mozsvc = buildPythonPackage rec {
-    name = "mozsvc-${version}";
-    version = "0.8";
-
-    src = pkgs.fetchgit {
-      url = https://github.com/mozilla-services/mozservices.git;
-      rev = "refs/tags/${version}";
-      sha256 = "1zci2ikk83mf7va88c83dr6snfh4ddjqw0lsg3y29qk5nxf80vx2";
-    };
-
-    patches = singleton (pkgs.fetchurl {
-      url = https://github.com/nbp/mozservices/commit/f86c0b0b870cd8f80ce90accde9e16ecb2e88863.diff;
-      sha256 = "1lnghx821f6dqp3pa382ka07cncdz7hq0mkrh44d0q3grvrlrp9n";
-    });
-
-    doCheck = false; # lazy packager
-    propagatedBuildInputs = with self; [ pyramid simplejson konfig ];
-
-    meta = {
-      homepage = https://github.com/mozilla-services/mozservices;
-      description = "Various utilities for Mozilla apps";
-    };
-  };
-
-  mpmath = buildPythonPackage rec {
-    name = "mpmath-0.19";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mpmath/${name}.tar.gz";
-      sha256 = "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8";
-    };
-
-    meta = {
-      homepage    = http://mpmath.googlecode.com;
-      description = "A pure-Python library for multiprecision floating arithmetic";
-      license     = licenses.bsd3;
-      maintainers = with maintainers; [ lovek323 ];
-      platforms   = platforms.unix;
-    };
-
-    # error: invalid command 'test'
-    doCheck = false;
-  };
-
-
-  mpd = buildPythonPackage rec {
-    name = "python-mpd-0.3.0";
-
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-mpd/python-mpd-0.3.0.tar.gz";
-      sha256 = "02812eba1d2e0f46e37457f5a6fa23ba203622e4bcab0a19b265e66b08cd21b4";
-    };
-
-    meta = with pkgs.stdenv.lib; {
-      description = "An MPD (Music Player Daemon) client library written in pure Python";
-      homepage = http://jatreuman.indefero.net/p/python-mpd/;
-      license = licenses.gpl3;
-    };
-  };
+  mox = callPackage ../development/python-modules/mox { };
 
-  mpd2 = buildPythonPackage rec {
-    name = "mpd2-${version}";
-    version = "0.5.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/python-mpd2/python-mpd2-${version}.tar.bz2";
-      sha256 = "1gfrxf71xll1w6zb69znqg5c9j0g7036fsalkvqprh2id640cl3a";
-    };
-
-    buildInputs = with self; [ mock ];
-    patchPhase = ''
-      sed -i -e '/tests_require/d' \
-          -e 's/cmdclass.*/test_suite="mpd_test",/' setup.py
-    '';
-
-    meta = {
-      description = "A Python client module for the Music Player Daemon";
-      homepage = "https://github.com/Mic92/python-mpd2";
-      license = licenses.lgpl3Plus;
-      maintainers = with maintainers; [ rvl mic92 ];
-    };
-  };
+  mozsvc = callPackage ../development/python-modules/mozsvc { };
 
-  mpv = buildPythonPackage rec {
-    name = "mpv-0.1";
+  mpmath = callPackage ../development/python-modules/mpmath { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/mpv/${name}.tar.gz";
-      sha256 = "0b9kd70mshdr713f3l1lbnz1q0vlg2y76h5d8liy1bzqm7hjcgfw";
-    };
-    buildInputs = [ pkgs.mpv ];
-    patchPhase = "substituteInPlace mpv.py --replace libmpv.so ${pkgs.mpv}/lib/libmpv.so";
+  mpd = callPackage ../development/python-modules/mpd { };
 
-    meta = with pkgs.stdenv.lib; {
-      description = "A python interface to the mpv media player";
-      homepage = "https://github.com/jaseg/python-mpv";
-      license = licenses.agpl3;
-    };
+  mpd2 = callPackage ../development/python-modules/mpd2 { };
 
-  };
+  mpv = callPackage ../development/python-modules/mpv { };
 
   mrbob = callPackage ../development/python-modules/mrbob {};
 
@@ -7312,103 +2808,21 @@ in {
     '';
   };
 
-  msrplib = buildPythonPackage rec {
-    pname = "python-msrplib";
-    name = "${pname}-${version}";
-    version = "0.19";
-
-    src = pkgs.fetchdarcs {
-      url = "http://devel.ag-projects.com/repositories/${pname}";
-      rev = "release-${version}";
-      sha256 = "0jqvvssbwzq7bwqn3wrjfnpj8zb558mynn2visnlrcma6b57yhwd";
-    };
-
-    propagatedBuildInputs = with self; [ eventlib application gnutls ];
-  };
+  msrplib = callPackage ../development/python-modules/msrplib { };
 
   multipledispatch = callPackage ../development/python-modules/multipledispatch { };
 
   multiprocess = callPackage ../development/python-modules/multiprocess { };
 
-  munkres = buildPythonPackage rec {
-    name = "munkres-1.0.6";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/munkres/${name}.tar.gz";
-      sha256 = "c78f803b9b776bfb20a25c9c7bb44adbf0f9202c2024d51aa5969d21e560208d";
-    };
-
-    # error: invalid command 'test'
-    doCheck = false;
-
-    meta = {
-      homepage = http://bmc.github.com/munkres/;
-      description = "Munkres algorithm for the Assignment Problem";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
-
-
-  musicbrainzngs = buildPythonPackage rec {
-    name = "musicbrainzngs-0.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/m/musicbrainzngs/${name}.tar.gz";
-      sha256 = "281388ab750d2996e9feca4580fd4215d616a698e02cd6719cb9b8562945c489";
-    };
-
-    buildInputs = [ pkgs.glibcLocales ];
-
-    LC_ALL="en_US.UTF-8";
-
-    meta = {
-      homepage = http://alastair/python-musicbrainz-ngs;
-      description = "Python bindings for musicbrainz NGS webservice";
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ domenkozar ];
-    };
-  };
+  munkres = callPackage ../development/python-modules/munkres { };
 
-  mutag = buildPythonPackage rec {
-    disabled = ! isPy3k;
-    name = "mutag-0.0.2-2ffa0258ca";
-    src = pkgs.fetchgit {
-      url = "https://github.com/aroig/mutag.git";
-      sha256 = "0axdnwdypfd74a9dnw0g25m16xx1yygyl828xy0kpj8gyqdc6gb1";
-      rev = "2ffa0258cadaf79313241f43bf2c1caaf197d9c2";
-    };
+  musicbrainzngs = callPackage ../development/python-modules/musicbrainzngs { };
 
-    propagatedBuildInputs = with self; [ pyparsing ];
-
-    meta = {
-      homepage = https://github.com/aroig/mutag;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ ];
-    };
-  };
+  mutag = callPackage ../development/python-modules/mutag { };
 
   mutagen = callPackage ../development/python-modules/mutagen { };
 
-
-  muttils = buildPythonPackage (rec {
-    name = "muttils-1.3";
-    disabled = isPy3k;
-
-    src = pkgs.fetchurl {
-      url = https://www.blacktrash.org/hg/muttils/archive/8bb26094df06.tar.bz2;
-      sha256 = "1a4kxa0fpgg6rdj5p4kggfn8xpniqh8v5kbiaqc6wids02m7kag6";
-    };
-
-    # Tests don't work
-    doCheck = false;
-
-    meta = {
-      description = "Utilities for use with console mail clients, like mutt";
-      homepage = https://www.blacktrash.org/hg/muttils;
-      license = licenses.gpl2Plus;
-    };
-  });
+  muttils = callPackage ../development/python-modules/muttils { };
 
   mygpoclient = callPackage ../development/python-modules/mygpoclient { };
 
@@ -7420,241 +2834,37 @@ in {
 
   mypy-protobuf = callPackage ../development/python-modules/mypy-protobuf { };
 
-  neuronpy = buildPythonPackage rec {
-    name = "neuronpy-${version}";
-    version = "0.1.6";
-    disabled = !isPy27;
-
-    propagatedBuildInputs = with self; [ numpy matplotlib scipy ];
-
-    meta = {
-      description = "Interfaces and utilities for the NEURON simulator and analysis of neural data";
-      maintainers = [ maintainers.nico202 ];
-      license = licenses.mit;
-    };
-
-    #No tests included
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "https://pypi.python.org/packages/source/n/neuronpy/neuronpy-${version}.tar.gz";
-      sha256 = "1clhc2b5fy2l8nfrji4dagmj9419nj6kam090yqxhq5c28sngk25";
-    };
-  };
-
-  pint = buildPythonPackage rec {
-    name = "pint-${version}";
-    version = "0.7.2";
-
-    meta = {
-      description = "Physical quantities module";
-      license = licenses.bsd3;
-      homepage = "https://github.com/hgrecco/pint/";
-    };
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pint/Pint-${version}.tar.gz";
-      sha256 = "1bbp5s34gcb9il2wyz4spznshahwbjvwi5bhjm7bnxk358spvf9q";
-    };
-  };
-
-  pygal = buildPythonPackage rec {
-    pname = "pygal";
-    version = "2.3.1";
-    name = "${pname}-${version}";
-
-    doCheck = !isPyPy;  # one check fails with pypy
+  neuronpy = callPackage ../development/python-modules/neuronpy { };
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "7ba5a191233d0c2d8bf4b4d26b06e42bd77483a59ba7d3e5b884d81d1a870667";
-    };
-
-    buildInputs = with self; [ flask pyquery pytest ];
-    propagatedBuildInputs = with self; [ cairosvg tinycss cssselect ] ++ optionals (!isPyPy) [ lxml ];
+  pint = callPackage ../development/python-modules/pint { };
 
-    meta = {
-      description = "Sexy and simple python charting";
-      homepage = http://www.pygal.org;
-      license = licenses.lgpl3;
-      maintainers = with maintainers; [ sjourdois ];
-    };
-  };
+  pygal = callPackage ../development/python-modules/pygal { };
 
   pytaglib = callPackage ../development/python-modules/pytaglib { };
 
   pyte = callPackage ../development/python-modules/pyte { };
 
-  graphviz = buildPythonPackage rec {
-    name = "graphviz-${version}";
-    version = "0.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/g/graphviz/${name}.zip";
-      sha256 = "14r9brj4r31b3qy1nnn34v3l4h0n39bqxg9sn2fz4p3pp5mglnl6";
-    };
-
-    propagatedBuildInputs = [ pkgs.graphviz ];
-
-    meta = {
-      description = "Simple Python interface for Graphviz";
-      homepage = https://github.com/xflr6/graphviz;
-      license = licenses.mit;
-    };
-  };
+  graphviz = callPackage ../development/python-modules/graphviz { };
 
   pygraphviz = callPackage ../development/python-modules/pygraphviz { };
 
   pymc3 = callPackage ../development/python-modules/pymc3 { };
 
-  pympler = buildPythonPackage rec {
-    pname = "Pympler";
-    version = "0.4.3";
-    name = "${pname}-${version}";
+  pympler = callPackage ../development/python-modules/pympler { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/P/${pname}/${name}.tar.gz";
-      sha256 = "0mhyxqlkha98y8mi5zqcjg23r30mgdjdzs05lghbmqfdyvzjh1a3";
-    };
-
-  # Remove test asizeof.flatsize(), broken and can be missed as
-  # test is only useful on python 2.5, see https://github.com/pympler/pympler/issues/22
-   patchPhase = ''
-     substituteInPlace ./test/asizeof/test_asizeof.py --replace "n, e = test_flatsize" "#n, e = test_flatsize"
-     substituteInPlace ./test/asizeof/test_asizeof.py --replace "self.assert_(n," "#self.assert_(n,"
-     substituteInPlace ./test/asizeof/test_asizeof.py --replace "self.assert_(not e" "#self.assert_(not e"
-    '';
-
-    doCheck = stdenv.hostPlatform.isLinux;
-
-    meta = {
-      description = "Tool to measure, monitor and analyze memory behavior";
-      homepage = https://pythonhosted.org/Pympler/;
-      license = licenses.asl20;
-    };
-  };
-
-  pymysqlsa = self.buildPythonPackage rec {
-    name = "pymysqlsa-${version}";
-    version = "1.0";
-
-    propagatedBuildInputs = with self; [ pymysql sqlalchemy ];
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pymysql_sa/pymysql_sa-1.0.tar.gz";
-      sha256 = "a2676bce514a29b2d6ab418812259b0c2f7564150ac53455420a20bd7935314a";
-    };
-
-    meta = {
-      description = "PyMySQL dialect for SQL Alchemy";
-      homepage = https://pypi.python.org/pypi/pymysql_sa;
-      license = licenses.mit;
-    };
-  };
+  pymysqlsa = callPackage ../development/python-modules/pymysqlsa { };
 
   monosat = disabledIf (!isPy3k) (pkgs.monosat.python { inherit buildPythonPackage; inherit (self) cython; });
 
-  monotonic = buildPythonPackage rec {
-    pname = "monotonic";
-    version = "1.3";
-    name = "${pname}-${version}";
-
-    __propagatedImpureHostDeps = stdenv.lib.optional stdenv.isDarwin "/usr/lib/libc.dylib";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "06vw7jwq96106plhlc5vz1v1xvjismdgw9wjyzvzf0ylglnrwiib";
-    };
-
-    patchPhase = optionalString stdenv.isLinux ''
-      substituteInPlace monotonic.py --replace \
-        "ctypes.util.find_library('c')" "'${stdenv.glibc.out}/lib/libc.so.6'"
-    '';
-  };
-
-  MySQL_python = buildPythonPackage rec {
-    name = "MySQL-python-1.2.5";
-
-    disabled = isPy3k;
-
-    # plenty of failing tests
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/M/MySQL-python/${name}.zip";
-      sha256 = "0x0c2jg0bb3pp84njaqiic050qkyd7ymwhfvhipnimg58yv40441";
-    };
-
-    buildInputs = with self; [ nose ];
+  monotonic = callPackage ../development/python-modules/monotonic { };
 
-    propagatedBuildInputs = with self; [ pkgs.mysql.connector-c ];
-
-    meta = {
-      description = "MySQL database binding for Python";
-
-      homepage = https://sourceforge.net/projects/mysql-python;
-    };
-  };
+  MySQL_python = callPackage ../development/python-modules/mysql_python { };
 
   mysql-connector = callPackage ../development/python-modules/mysql-connector { };
 
-  namebench = buildPythonPackage (rec {
-    name = "namebench-1.3.1";
-    disabled = isPy3k || isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "http://namebench.googlecode.com/files/${name}-source.tgz";
-      sha256 = "09clbcd6wxgk4r6qw7hb78h818mvca7lijigy1mlq5y1f3lgkk1h";
-    };
+  namebench = callPackage ../development/python-modules/namebench { };
 
-    # error: invalid command 'test'
-    doCheck = false;
-
-    propagatedBuildInputs = [ self.tkinter ];
-
-    # namebench expects to be run from its own source tree (it uses relative
-    # paths to various resources), make it work.
-    postInstall = ''
-      sed -i "s|import os|import os; os.chdir(\"$out/namebench\")|" "$out/bin/namebench.py"
-    '';
-
-    meta = {
-      homepage = http://namebench.googlecode.com/;
-      description = "Find fastest DNS servers available";
-      license = with licenses; [
-        asl20
-        # third-party program licenses (embedded in the sources)
-        "LGPL" # Crystal_Clear
-        free # dns
-        asl20 # graphy
-        "BSD" # jinja2
-      ];
-      longDescription = ''
-        It hunts down the fastest DNS servers available for your computer to
-        use. namebench runs a fair and thorough benchmark using your web
-        browser history, tcpdump output, or standardized datasets in order
-        to provide an individualized recommendation. namebench is completely
-        free and does not modify your system in any way.
-      '';
-    };
-  });
-
-
-  nameparser = buildPythonPackage rec {
-    name = "nameparser-${version}";
-    version = "0.3.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nameparser/${name}.tar.gz";
-      sha256 = "1zi94m99ziwwd6kkip3w2xpnl05r2cfv9iq68inz7np81c3g8vag";
-    };
-
-    meta = {
-      description = "A simple Python module for parsing human names into their individual components";
-      homepage = https://github.com/derek73/python-nameparser;
-      license = licenses.lgpl21Plus;
-    };
-  };
+  nameparser = callPackage ../development/python-modules/nameparser { };
 
   nbconvert = callPackage ../development/python-modules/nbconvert { };
 
@@ -7664,119 +2874,15 @@ in {
 
   nbxmpp = callPackage ../development/python-modules/nbxmpp { };
 
-  sleekxmpp = buildPythonPackage rec {
-    name = "sleekxmpp-${version}";
-    version = "1.3.3";
-
-    patches = [
-      # Fix https://github.com/etingof/pyasn1/issues/112
-      (pkgs.fetchpatch {
-        url = "https://github.com/kdschlosser/SleekXMPP/commit/597014ba5ca258763e96ee37729ac933c5af1602.patch";
-        sha256 = "176v3f3pr0bx48wv1kf9jn2pwxdn7qpqyc2chwv1m8gbppsfaikf";
-      })
-    ];
-
-    propagatedBuildInputs = with self; [ dnspython pyasn1 pyasn1-modules gevent ];
-    checkInputs = [ pkgs.gnupg ];
-    checkPhase = "${python.interpreter} testall.py";
-    doCheck = false; # Tests failed all this time and upstream doesn't seem to care.
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/sleekxmpp/${name}.tar.gz";
-      sha256 = "0samiq1d97kk8g9pszfbrbfw9zc41zp6017dbkwha9frf7gc24yj";
-    };
-
-    meta = {
-      description = "XMPP library for Python";
-      license = licenses.mit;
-      homepage = http://sleekxmpp.com/;
-    };
-  };
-
-  slixmpp = buildPythonPackage rec {
-    name = "slixmpp-${version}";
-    version = "1.2.4.post1";
-
-    disabled = pythonOlder "3.4";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/s/slixmpp/${name}.tar.gz";
-      sha256 = "0v6430dczai8a2nmznhja2dxl6pxa8c5j20nhc5737bqjg7245jk";
-    };
-
-    patchPhase = ''
-      substituteInPlace slixmpp/thirdparty/gnupg.py \
-        --replace "gpgbinary='gpg'" "gpgbinary='${pkgs.gnupg1}/bin/gpg'"
-    '';
-
-    propagatedBuildInputs = with self ; [ aiodns pyasn1 pkgs.gnupg1 pyasn1-modules];
-
-    meta = {
-      description = "Elegant Python library for XMPP";
-      license = licenses.mit;
-      homepage = https://dev.louiz.org/projects/slixmpp;
-    };
-  };
+  sleekxmpp = callPackage ../development/python-modules/sleekxmpp { };
 
-  netaddr = buildPythonPackage rec {
-    pname = "netaddr";
-    version = "0.7.19";
-    name = "${pname}-${version}";
+  slixmpp = callPackage ../development/python-modules/slixmpp { };
 
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd";
-    };
+  netaddr = callPackage ../development/python-modules/netaddr { };
 
-    LC_ALL = "en_US.UTF-8";
-    buildInputs = with self; [ pkgs.glibcLocales pytest ];
+  netifaces = callPackage ../development/python-modules/netifaces { };
 
-    checkPhase = ''
-      py.test netaddr/tests
-    '';
-
-    patches = [
-      (pkgs.fetchpatch {
-        url = https://github.com/drkjam/netaddr/commit/2ab73f10be7069c9412e853d2d0caf29bd624012.patch;
-        sha256 = "0s1cdn9v5alpviabhcjmzc0m2pnpq9dh2fnnk2x96dnry1pshg39";
-      })
-    ];
-
-    meta = {
-      homepage = https://github.com/drkjam/netaddr/;
-      description = "A network address manipulation library for Python";
-    };
-  };
-
-  netifaces = buildPythonPackage rec {
-    version = "0.10.6";
-    name = "netifaces-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/netifaces/${name}.tar.gz";
-      sha256 = "1q7bi5k2r955rlcpspx4salvkkpk28jky67fjbpz2dkdycisak8c";
-    };
-
-    meta = {
-      homepage = https://alastairs-place.net/projects/netifaces/;
-      description = "Portable access to network interfaces from Python";
-    };
-  };
-
-  hpack = buildPythonPackage rec {
-    name = "hpack-${version}";
-    version = "2.3.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/h/hpack/hpack-${version}.tar.gz";
-      sha256 = "1ad0fx4d7a52zf441qzhjc7vwy9v3qdrk1zyf06ikz8y2nl9mgai";
-    };
-
-    meta = with stdenv.lib; {
-      description = "========================================";
-      homepage = "http://hyper.rtfd.org";
-    };
-  };
+  hpack = callPackage ../development/python-modules/hpack { };
 
   nevow = callPackage ../development/python-modules/nevow { };
 
@@ -7786,326 +2892,51 @@ in {
 
   nimfa = callPackage ../development/python-modules/nimfa {};
 
-  nipy = buildPythonPackage rec {
-    version = "0.4.0";
-    name = "nipy-${version}";
-
-    disabled = pythonOlder "2.6";
-
-    checkPhase = ''    # wants to be run in a different directory
-      mkdir nosetests
-      cd nosetests
-      ${python.interpreter} -c "import nipy; nipy.test()"
-      rm -rf .
-    '';
-    # failing test:
-    # nipy.algorithms.statistics.models.tests.test_olsR.test_results(11.593139639404727, 11.593140144880794, 6)  # disagrees by 1 at 6th decimal place
-    # erroring tests:
-    # nipy.modalities.fmri.fmristat.tests.test_FIAC.test_altprotocol
-    # nipy.modalities.fmri.fmristat.tests.test_FIAC.test_agreement
-    # nipy.tests.test_scripts.test_nipy_4d_realign   # because `nipy_4d_realign` script isn't found at test time; works from nix-shell, so could be patched
-    # nipy.tests.test_scripts.test_nipy_3_4d         # ditto re.: `nipy_3_4d` script
-    doCheck = false;
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nipy/${name}.tar.gz";
-      sha256 = "1hnbn2i4fjxflaaz082s2c57hfp59jfra1zayz1iras5p2dy21nr";
-    };
-
-    buildInputs = stdenv.lib.optional doCheck [ self.nose ];
-
-    propagatedBuildInputs = with self; [
-      matplotlib
-      nibabel
-      numpy
-      scipy
-      sympy
-    ];
-
-    meta = {
-      homepage = http://nipy.org/nipy/;
-      description = "Software for structural and functional neuroimaging analysis";
-      license = licenses.bsd3;
-    };
-  };
+  nipy = callPackage ../development/python-modules/nipy { };
 
   nipype = callPackage ../development/python-modules/nipype {
     inherit (pkgs) which;
   };
 
-  nixpkgs = buildPythonPackage rec {
-    disabled = ! pythonAtLeast "3.5";
-    pname = "nixpkgs";
-    version = "0.2.2";
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0gsrd99kkv99jsrh3hckz7ns1zwndi9vvh4465v4gnpz723dd6fj";
-    };
-    buildInputs = with self; [ pbr ];
-    propagatedBuildInputs = with self; [ pythonix ];
-    meta = {
-      description = "Allows to `from nixpkgs import` stuff in interactive Python sessions";
-      homepage = http://github.com/t184256/nixpkgs-python-importer;
-      license = licenses.mit;
-      maintainers = with maintainers; [ t184256 ];
-    };
-  };
+  nixpkgs = callPackage ../development/python-modules/nixpkgs { };
 
   nodeenv = callPackage ../development/python-modules/nodeenv { };
 
-  nose = buildPythonPackage rec {
-    version = "1.3.7";
-    name = "nose-${version}";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose/${name}.tar.gz";
-      sha256 = "f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98";
-    };
-
-    propagatedBuildInputs = [ self.coverage ];
-
-    doCheck = false;  # lot's of transient errors, too much hassle
-    checkPhase = if python.is_py3k or false then ''
-      ${python}/bin/${python.executable} setup.py build_tests
-    '' else "" + ''
-      rm functional_tests/test_multiprocessing/test_concurrent_shared.py* # see https://github.com/nose-devs/nose/commit/226bc671c73643887b36b8467b34ad485c2df062
-      ${python}/bin/${python.executable} selftest.py
-    '';
-
-    meta = {
-      description = "A unittest-based testing framework for python that makes writing and running tests easier";
-    };
-  };
+  nose = callPackage ../development/python-modules/nose { };
 
   nose-exclude = callPackage ../development/python-modules/nose-exclude { };
 
-  nose2 = buildPythonPackage rec {
-    name = "nose2-0.5.0";
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose2/${name}.tar.gz";
-      sha256 = "0595rh6b6dncbj0jigsyrgrh6h8fsl6w1fr69h76mxv9nllv0rlr";
-    };
-    meta = {
-      description = "nose2 is the next generation of nicer testing for Python";
-    };
-    propagatedBuildInputs = with self; [ six ];
-    # AttributeError: 'module' object has no attribute 'collector'
-    doCheck = false;
-  };
-
-  nose-cover3 = buildPythonPackage rec {
-    name = "nose-cover3-${version}";
-    version = "0.1.0";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose-cover3/${name}.tar.gz";
-      sha256 = "1la4hhc1yszjpcchvkqk5xmzlb2g1b3fgxj9wwc58qc549whlcc1";
-    };
-
-    propagatedBuildInputs = with self; [ nose ];
-
-    # No tests included
-    doCheck = false;
-
-    meta = {
-      description = "Coverage 3.x support for Nose";
-      homepage = https://github.com/ask/nosecover3;
-      license = licenses.lgpl21;
-    };
-  };
-
-  nosexcover = buildPythonPackage (rec {
-    name = "nosexcover-1.0.10";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nosexcover/${name}.tar.gz";
-      sha256 = "f5b3a7c936c4f703f15418c1f325775098184b69fa572f868edb8a99f8f144a8";
-    };
-
-    propagatedBuildInputs = with self; [ coverage nose ];
-
-    meta = {
-      description = "Extends nose.plugins.cover to add Cobertura-style XML reports";
-
-      homepage = https://github.com/cmheisel/nose-xcover/;
-
-      license = licenses.bsd3;
-    };
-  });
-
-  nosejs = buildPythonPackage {
-    name = "nosejs-0.9.4";
-    src = pkgs.fetchurl {
-      url = mirror://pypi/N/NoseJS/NoseJS-0.9.4.tar.gz;
-      sha256 = "0qrhkd3sga56qf6k0sqyhwfcladwi05gl6aqmr0xriiq1sgva5dy";
-    };
-    buildInputs = with self; [ nose ];
+  nose2 = callPackage ../development/python-modules/nose2 { };
 
-    checkPhase = ''
-      nosetests -v
-    '';
+  nose-cover3 = callPackage ../development/python-modules/nose-cover3 { };
 
-  };
+  nosexcover = callPackage ../development/python-modules/nosexcover { };
 
-  nose-cprof = buildPythonPackage rec {
-    name = "nose-cprof-${version}";
-    version = "0.1.4";
+  nosejs = callPackage ../development/python-modules/nosejs { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nose-cprof/${name}.tar.gz";
-      sha256 = "0ayy5mbjly9aa9dkgpz0l06flspnxmnj6wxdl6zr59byrrr8fqhw";
-    };
-
-    meta = {
-      description = "A python nose plugin to profile using cProfile rather than the default Hotshot profiler";
-    };
-
-    buildInputs = with self; [ nose ];
-  };
+  nose-cprof = callPackage ../development/python-modules/nose-cprof { };
 
   nose_warnings_filters = callPackage ../development/python-modules/nose_warnings_filters { };
 
   notebook = callPackage ../development/python-modules/notebook { };
 
-  notify = pkgs.stdenv.mkDerivation (rec {
-    name = "python-notify-0.1.1";
-
-    src = pkgs.fetchurl {
-      url = http://www.galago-project.org/files/releases/source/notify-python/notify-python-0.1.1.tar.bz2;
-      sha256 = "1kh4spwgqxm534qlzzf2ijchckvs0pwjxl1irhicjmlg7mybnfvx";
-    };
-
-    patches = singleton (pkgs.fetchurl {
-      name = "libnotify07.patch";
-      url = "http://src.fedoraproject.org/cgit/notify-python.git/plain/"
-          + "libnotify07.patch?id2=289573d50ae4838a1658d573d2c9f4c75e86db0c";
-      sha256 = "1lqdli13mfb59xxbq4rbq1f0znh6xr17ljjhwmzqb79jl3dig12z";
-    });
-
-    postPatch = ''
-      sed -i -e '/^PYGTK_CODEGEN/s|=.*|="${self.pygtk}/bin/pygtk-codegen-2.0"|' \
-        configure
-    '';
-
-    nativeBuildInputs = [ pkgs.pkgconfig ];
-    buildInputs = with self; [ python pkgs.libnotify pygobject2 pygtk pkgs.glib pkgs.gtk2 pkgs.dbus-glib ];
-
-    postInstall = "cd $out/lib/python*/site-packages && ln -s gtk-*/pynotify .";
-
-    meta = {
-      description = "Python bindings for libnotify";
-      homepage = http://www.galago-project.org/;
-    };
-  });
+  notify = callPackage ../development/python-modules/notify { };
 
   notify2 = callPackage ../development/python-modules/notify2 {};
 
-  notmuch = buildPythonPackage rec {
-    name = "python-${pkgs.notmuch.name}";
-
-    src = pkgs.notmuch.src;
-
-    sourceRoot = pkgs.notmuch.pythonSourceRoot;
-
-    buildInputs = with self; [ python pkgs.notmuch ];
-
-    postPatch = ''
-      sed -i -e '/CDLL/s@"libnotmuch\.@"${pkgs.notmuch}/lib/libnotmuch.@' \
-        notmuch/globals.py
-    '';
-
-    meta = {
-      description = "A Python wrapper around notmuch";
-      homepage = https://notmuchmail.org/;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
+  notmuch = callPackage ../development/python-modules/notmuch { };
 
   emoji = callPackage ../development/python-modules/emoji { };
 
-  ntfy = buildPythonPackage rec {
-    version = "1.2.0";
-    name = "ntfy-${version}";
-    src = pkgs.fetchFromGitHub {
-      owner = "dschep";
-      repo = "ntfy";
-      rev = "v${version}";
-      sha256 = "0yjxwisxpxy3vpnqk9nw5k3db3xx6wyf6sk1px9m94s30glcq2cc";
-    };
-
-    propagatedBuildInputs = with self; [ appdirs pyyaml requests dbus-python emoji sleekxmpp mock ];
-
-    meta = {
-      description = "A utility for sending notifications, on demand and when commands finish";
-      homepage = http://ntfy.rtfd.org/;
-      license = licenses.gpl3;
-      maintainers = with maintainers; [ kamilchm ];
-    };
-  };
-
-  ntplib = buildPythonPackage rec {
-    name = "ntplib-0.3.3";
-    src = pkgs.fetchurl {
-      url = mirror://pypi/n/ntplib/ntplib-0.3.3.tar.gz;
-      sha256 = "c4621b64d50be9461d9bd9a71ba0b4af06fbbf818bbd483752d95c1a4e273ede";
-    };
+  ntfy = callPackage ../development/python-modules/ntfy { };
 
-    # Require networking
-    doCheck = false;
-
-    meta = {
-      description = "Python NTP library";
-      license = licenses.mit;
-    };
-  };
+  ntplib = callPackage ../development/python-modules/ntplib { };
 
   numba = callPackage ../development/python-modules/numba { };
 
   numexpr = callPackage ../development/python-modules/numexpr { };
 
-  Nuitka = let
-    # scons is needed but using it requires Python 2.7
-    # Therefore we create a separate env for it.
-    scons = pkgs.python27.withPackages(ps: [ pkgs.scons ]);
-  in buildPythonPackage rec {
-    version = "0.5.25";
-    name = "Nuitka-${version}";
-
-    # Latest version is not yet on PyPi
-    src = pkgs.fetchurl {
-      url = "https://github.com/kayhayen/Nuitka/archive/${version}.tar.gz";
-      sha256 = "11psz0pyj56adv4b3f47hl8jakvp2mc2c85s092a5rsv1la1a0aa";
-    };
-
-    buildInputs = with self; stdenv.lib.optionals doCheck [ vmprof pyqt4 ];
-
-    propagatedBuildInputs = [ scons ];
-
-    postPatch = ''
-      patchShebangs tests/run-tests
-    '' + stdenv.lib.optionalString stdenv.isLinux ''
-      substituteInPlace nuitka/plugins/standard/ImplicitImports.py --replace 'locateDLL("uuid")' '"${pkgs.utillinux.out}/lib/libuuid.so"'
-    '';
-
-    # We do not want any wrappers here.
-    postFixup = '''';
-
-    checkPhase = ''
-      tests/run-tests
-    '';
-
-    # Problem with a subprocess (parts)
-    doCheck = false;
-
-    # Requires CPython
-    disabled = isPyPy;
-
-    meta = {
-      description = "Python compiler with full language support and CPython compatibility";
-      license = licenses.asl20;
-      homepage = http://nuitka.net/;
-    };
-  };
+  Nuitka = callPackage ../development/python-modules/nuitka { };
 
   numpy = callPackage ../development/python-modules/numpy {
     blas = pkgs.openblasCompat;
@@ -8119,323 +2950,47 @@ in {
 
   nwdiag = callPackage ../development/python-modules/nwdiag { };
 
-  dynd = buildPythonPackage rec {
-    version = "0.7.2";
-    name = "dynd-${version}";
-    disabled = isPyPy || !isPy3k; # tests fail on python2, 2018-04-11
-
-    src = pkgs.fetchFromGitHub {
-      owner = "libdynd";
-      repo = "dynd-python";
-      rev = "v${version}";
-      sha256 = "19igd6ibf9araqhq9bxmzbzdz05vp089zxvddkiik3b5gb7l17nh";
-    };
-
-    # setup.py invokes git on build but we're fetching a tarball, so
-    # can't retrieve git version. We hardcode:
-    preConfigure = ''
-      substituteInPlace setup.py --replace "ver = check_output(['git', 'describe', '--dirty'," "ver = '${version}'"
-      substituteInPlace setup.py --replace "'--always', '--match', 'v*']).decode('ascii').strip('\n')" ""
-    '';
-
-    # Python 3 works but has a broken import test that I couldn't
-    # figure out.
-    doCheck = !isPy3k;
-    buildInputs = with pkgs; [ cmake libdynd.dev self.cython ];
-    propagatedBuildInputs = with self; [ numpy pkgs.libdynd ];
-
-    meta = {
-      homepage = http://libdynd.org;
-      license = licenses.bsd2;
-      description = "Python exposure of dynd";
-      maintainers = with maintainers; [ teh ];
-    };
-  };
+  dynd = callPackage ../development/python-modules/dynd { };
 
   langcodes = callPackage ../development/python-modules/langcodes { };
 
-  livestreamer = buildPythonPackage rec {
-    version = "1.12.2";
-    name = "livestreamer-${version}";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/chrippa/livestreamer/archive/v${version}.tar.gz";
-      sha256 = "1fp3d3z2grb1ls97smjkraazpxnvajda2d1g1378s6gzmda2jvjd";
-    };
-
-    buildInputs = [ pkgs.makeWrapper ];
-
-    propagatedBuildInputs = with self; [ pkgs.rtmpdump pycrypto requests ]
-      ++ optionals isPy27 [ singledispatch futures ]
-      ++ optionals isPy33 [ singledispatch ];
-
-    postInstall = ''
-      wrapProgram $out/bin/livestreamer --prefix PATH : ${pkgs.rtmpdump}/bin
-    '';
-
-    meta = {
-      homepage = http://livestreamer.tanuki.se;
-      description = ''
-        Livestreamer is CLI program that extracts streams from various
-        services and pipes them into a video player of choice.
-      '';
-      license = licenses.bsd2;
-      maintainers = with maintainers; [ fuuzetsu ];
-    };
-  };
-
-  livestreamer-curses = buildPythonPackage rec {
-    version = "1.5.2";
-    name = "livestreamer-curses-${version}";
-    disabled = isPyPy;
-
-    src = pkgs.fetchurl {
-      url = "https://github.com/gapato/livestreamer-curses/archive/v${version}.tar.gz";
-      sha256 = "1v49sym6mrci9dxy0a7cpbp4bv6fg2ijj6rwk4wzg18c2x4qzkhn";
-    };
-
-    propagatedBuildInputs = with self; [ livestreamer ];
-
-    meta = {
-      homepage = https://github.com/gapato/livestreamer-curses;
-      description = "Curses frontend for livestreamer";
-      license = licenses.mit;
-    };
-  };
-
-  oauth = buildPythonPackage (rec {
-    name = "oauth-1.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/oauth/oauth-1.0.1.tar.gz";
-      sha256 = "0pdgi35hczsslil4890xqawnbpdazkgf2v1443847h5hy2gq2sg7";
-    };
-
-    # No tests included in archive
-    doCheck = false;
-
-    meta = {
-      homepage = http://code.google.com/p/oauth;
-      description = "Library for OAuth version 1.0a";
-      license = licenses.mit;
-      platforms = platforms.all;
-    };
-  });
-
-  oauth2 = buildPythonPackage (rec {
-    name = "oauth2-${version}";
-    version = "1.9.0.post1";
+  livestreamer = callPackage ../development/python-modules/livestreamer { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/oauth2/${name}.tar.gz";
-      sha256 = "c006a85e7c60107c7cc6da1b184b5c719f6dd7202098196dfa6e55df669b59bf";
-    };
+  livestreamer-curses = callPackage ../development/python-modules/livestreamer-curses { };
 
-    propagatedBuildInputs = with self; [ httplib2 ];
-
-    buildInputs = with self; [ mock coverage ];
-
-    # ServerNotFoundError: Unable to find the server at oauth-sandbox.sevengoslings.net
-    doCheck = false;
+  oauth = callPackage ../development/python-modules/oauth { };
 
-    meta = {
-      homepage = "https://github.com/simplegeo/python-oauth2";
-      description = "Library for OAuth version 1.0";
-      license = licenses.mit;
-      maintainers = with maintainers; [ garbas ];
-      platforms = platforms.linux;
-    };
-  });
+  oauth2 = callPackage ../development/python-modules/oauth2 { };
 
   oauth2client = callPackage ../development/python-modules/oauth2client { };
 
-  oauthlib = buildPythonPackage rec {
-    version = "2.0.0";
-    name = "oauthlib-${version}";
+  oauthlib = callPackage ../development/python-modules/oauthlib { };
 
-    src = pkgs.fetchurl {
-      url = "https://github.com/idan/oauthlib/archive/v${version}.tar.gz";
-      sha256 = "02b645a8rqh4xfs1cmj8sss8wqppiadd1ndq3av1cdjz2frfqcjf";
-    };
-
-    buildInputs = with self; [ mock nose unittest2 ];
-
-    propagatedBuildInputs = with self; [ cryptography blinker pyjwt ];
-
-    meta = {
-      homepage = https://github.com/idan/oauthlib;
-      downloadPage = https://github.com/idan/oauthlib/releases;
-      description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic";
-      maintainers = with maintainers; [ prikhi ];
-    };
-  };
-
-
-  obfsproxy = buildPythonPackage ( rec {
-    name = "obfsproxy-${version}";
-    version = "0.2.13";
-
-    src = pkgs.fetchgit {
-      url = meta.repositories.git;
-      rev = "refs/tags/${name}";
-      sha256 = "04ja1cl8xzqnwrd2gi6nlnxbmjri141bzwa5gybvr44d8h3k2nfa";
-    };
+  obfsproxy = callPackage ../development/python-modules/obfsproxy { };
 
-    postPatch = ''
-      substituteInPlace setup.py --replace "version=versioneer.get_version()" "version='${version}'"
-      substituteInPlace setup.py --replace "argparse" ""
-    '';
-
-    propagatedBuildInputs = with self;
-      [ pyptlib argparse twisted pycrypto pyyaml ];
-
-    # No tests in archive
-    doCheck = false;
-
-    meta = {
-      description = "A pluggable transport proxy";
-      homepage = https://www.torproject.org/projects/obfsproxy;
-      repositories.git = https://git.torproject.org/pluggable-transports/obfsproxy.git;
-      maintainers = with maintainers; [ phreedom thoughtpolice ];
-    };
-  });
-
-  objgraph = buildPythonPackage rec {
-    name = "objgraph-${version}";
-    version = "2.0.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/objgraph/${name}.tar.gz";
-      sha256 = "841de52715774ec1d0e97d9b4462d6e3e10406155f9b61f54ba7db984c45442a";
-    };
-
-    # Tests fail with PyPy.
-    disabled = isPyPy;
-
-    propagatedBuildInputs = with self; [pkgs.graphviz];
-
-    meta = {
-      description = "Draws Python object reference graphs with graphviz";
-      homepage = https://mg.pov.lt/objgraph/;
-      license = licenses.mit;
-    };
-  };
+  objgraph = callPackage ../development/python-modules/objgraph { };
 
   odo = callPackage ../development/python-modules/odo { };
 
-  offtrac = buildPythonPackage rec {
-    name = "offtrac-0.1.0";
-    meta.maintainers = with maintainers; [ ];
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/offtrac/${name}.tar.gz";
-      sha256 = "06vd010pa1z7lyfj1na30iqzffr4kzj2k2sba09spik7drlvvl56";
-    };
-    doCheck = false;
-  };
+  offtrac = callPackage ../development/python-modules/offtrac { };
 
   openpyxl = callPackage ../development/python-modules/openpyxl { };
 
   opentimestamps = callPackage ../development/python-modules/opentimestamps { };
 
-  ordereddict = buildPythonPackage rec {
-    name = "ordereddict-${version}";
-    version = "1.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/o/ordereddict/${name}.tar.gz";
-      sha256 = "07qvy11nvgxpzarrni3wrww3vpc9yafgi2bch4j2vvvc42nb8d8w";
-    };
-
-    meta = {
-      description = "A drop-in substitute for Py2.7's new collections.OrderedDict that works in Python 2.4-2.6";
-      license = licenses.bsd3;
-      maintainers = with maintainers; [ garbas ];
-    };
-  };
+  ordereddict = callPackage ../development/python-modules/ordereddict { };
 
   orderedset = callPackage ../development/python-modules/orderedset { };
 
-  python-otr = buildPythonPackage rec {
-    name = "${pname}-${version}";
-    pname = "python-otr";
-    version = "1.2.0";
-
-    disabled = isPy3k;
-
-    src = pkgs.fetchFromGitHub {
-      owner = "AGProjects";
-      repo = pname;
-      rev = "release-" + version;
-      sha256 = "0p3b1n8jlxwd65gbk2k5007fkhdyjwcvr4982s42hncivxvabzzy";
-    };
-
-    propagatedBuildInputs = with self; [ zope_interface cryptography application gmpy2 ];
-
-    meta = {
-      description = "A pure python implementation of OTR";
-      homepage = https://github.com/AGProjects/otr;
-      license = licenses.lgpl21Plus;
-      platforms = platforms.linux;
-      maintainers = with maintainers; [ edwtjo ];
-    };
-  };
+  python-otr = callPackage ../development/python-modules/python-otr { };
 
   plone-testing = callPackage ../development/python-modules/plone-testing { };
 
   ply = callPackage ../development/python-modules/ply { };
 
-  plyvel = buildPythonPackage (rec {
-    name = "plyvel-0.9";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/plyvel/${name}.tar.gz";
-      sha256 = "1scq75qyks9vmjd19bx57f2y60mkdr44ajvb12p3cjg439l96zaq";
-    };
-
-    buildInputs = with self; [ pkgs.leveldb ]
-                            ++ optional isPy3k pytest;
+  plyvel = callPackage ../development/python-modules/plyvel { };
 
-    # no tests for python2
-    doCheck = isPy3k;
-
-    meta = {
-      description = "Fast and feature-rich Python interface to LevelDB";
-      homepage = https://github.com/wbolster/plyvel;
-      license = licenses.bsd3;
-    };
-  });
-
-  osc = buildPythonPackage {
-    name = "osc-0.162.0-55-gb730f88";
-    disabled = isPy3k;
-    src = pkgs.fetchFromGitHub {
-      owner = "openSUSE";
-      repo = "osc";
-      rev = "b730f880cfe85a8547f569355a21706f27ebfa78";
-      sha256 = "0hh9j5zd2kc0804d2jmf1q3w5xm9l9s69hhgysbncrv5fw0414lh";
-    };
-    buildInputs = with pkgs; [ bashInteractive ]; # needed for bash-completion helper
-    propagatedBuildInputs = with self; [ urlgrabber m2crypto pyyaml lxml ];
-    postInstall = ''
-      ln -s $out/bin/osc-wrapper.py $out/bin/osc
-      install -D -m444 osc.fish $out/etc/fish/completions/osc.fish
-      install -D -m555 dist/osc.complete $out/share/bash-completion/helpers/osc-helper
-      mkdir -p $out/share/bash-completion/completions
-      cat >>$out/share/bash-completion/completions/osc <<EOF
-      test -z "\$BASH_VERSION" && return
-      complete -o default _nullcommand >/dev/null 2>&1 || return
-      complete -r _nullcommand >/dev/null 2>&1         || return
-      complete -o default -C $out/share/bash-completion/helpers/osc-helper osc
-      EOF
-    '';
-    meta = {
-      description = "opensuse-commander with svn like handling";
-      maintainers = [ maintainers.peti ];
-      license = licenses.gpl2;
-    };
-  };
+  osc = callPackage ../development/python-modules/osc { };
 
   rfc3986 = callPackage ../development/python-modules/rfc3986 { };
 
@@ -8446,143 +3001,27 @@ in {
   cmd2_9 = callPackage ../development/python-modules/cmd2 {};
   cmd2 = if isPy27 then self.cmd2_8 else self.cmd2_9;
 
- warlock = buildPythonPackage rec {
-   name = "warlock-${version}";
-   version = "1.2.0";
-
-   src = pkgs.fetchurl {
-     url = "mirror://pypi/w/warlock/${name}.tar.gz";
-     sha256 = "0npgi4ks0nww2d6ci791iayab0j6kz6dx3jr7bhpgkql3s4if3bw";
-   };
-
-   propagatedBuildInputs = with self; [
-     six jsonpatch jsonschema jsonpointer
-   ];
-   buildInputs = with self; [
-
-   ];
-
-   meta = with stdenv.lib; {
-     homepage = https://github.com/bcwaldon/warlock;
-   };
- };
-
+  warlock = callPackage ../development/python-modules/warlock { };
 
   pecan = callPackage ../development/python-modules/pecan { };
 
   kaitaistruct = callPackage ../development/python-modules/kaitaistruct { };
 
-  Kajiki = buildPythonPackage rec {
-    name = "Kajiki-${version}";
-    version = "0.5.5";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/K/Kajiki/${name}.tar.gz";
-      sha256 = "effcae388e25c3358eb0bbd733448509d11a1ec500e46c69241fc673021f0517";
-    };
-
-    propagatedBuildInputs = with self; [
-      Babel pytz nine
-    ];
-    meta = with stdenv.lib; {
-      description = "Kajiki provides fast well-formed XML templates";
-      homepage = "https://github.com/nandoflorestan/kajiki";
-    };
-  };
+  Kajiki = callPackage ../development/python-modules/kajiki { };
 
   WSME = callPackage ../development/python-modules/WSME { };
 
-  zake = buildPythonPackage rec {
-    name = "zake-${version}";
-    version = "0.2.2";
+  zake = callPackage ../development/python-modules/zake { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/z/zake/${name}.tar.gz";
-      sha256 = "1rp4xxy7qp0s0wnq3ig4ji8xsl31g901qkdp339ndxn466cqal2s";
-    };
-
-    propagatedBuildInputs = with self; [ kazoo six ];
-    buildInputs = with self; [ testtools ];
-    checkPhase = ''
-      ${python.interpreter} -m unittest discover zake/tests
-    '';
-
-    meta = with stdenv.lib; {
-      homepage = "https://github.com/yahoo/Zake";
-    };
-  };
-
-  kazoo = buildPythonPackage rec {
-    name = "kazoo-${version}";
-    version = "2.2.1";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/k/kazoo/${name}.tar.gz";
-      sha256 = "10pb864if9qi2pq9lfb9m8f7z7ss6rml80gf1d9h64lap5crjnjj";
-    };
-
-    propagatedBuildInputs = with self; [
-      six
-    ];
-    buildInputs = with self; [
-      eventlet gevent nose mock coverage pkgs.openjdk8
-    ];
-
-    # not really needed
-    preBuild = ''
-      sed -i '/flake8/d' setup.py
-    '';
-
-    preCheck = ''
-      sed -i 's/test_unicode_auth/noop/' kazoo/tests/test_client.py
-    '';
-
-    # tests take a long time to run and leave threads hanging
-    doCheck = false;
-    #ZOOKEEPER_PATH = "${pkgs.zookeeper}";
-
-    meta = with stdenv.lib; {
-      homepage = "https://kazoo.readthedocs.org";
-    };
-  };
+  kazoo = callPackage ../development/python-modules/kazoo { };
 
   FormEncode = callPackage ../development/python-modules/FormEncode { };
 
-  pycountry = buildPythonPackage rec {
-    name = "pycountry-${version}";
-    version = "1.17";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/p/pycountry/${name}.tar.gz";
-      sha256 = "1qvhq0c9xsh6d4apcvjphfzl6xnwhnk4jvhr8x2fdfnmb034lc26";
-    };
-  };
-
-  nine = buildPythonPackage rec {
-    name = "nine-${version}";
-    version = "0.3.4";
+  pycountry = callPackage ../development/python-modules/pycountry { };
 
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/n/nine/${name}.tar.gz";
-      sha256 = "1zrsbm0hajfvklkhgysp81hy632a3bdakp31m0lcpd9xbp5265zy";
-    };
-
-    meta = with stdenv.lib; {
-      description = "Let's write Python 3 right now!";
-      homepage = "https://github.com/nandoflorestan/nine";
-    };
-  };
+  nine = callPackage ../development/python-modules/nine { };
 
-
-  logutils = buildPythonPackage rec {
-    name = "logutils-${version}";
-    version = "0.3.3";
-
-    src = pkgs.fetchurl {
-      url = "mirror://pypi/l/logutils/${name}.tar.gz";
-      sha256 = "173w55fg3hp5dhx7xvssmgqkcv5fjlaik11w5dah2fxygkjvhhj0";
-    };
-  };
+  logutils = callPackage ../development/python-modules/logutils { };
 
   ldappool = callPackage ../development/python-modules/ldappool { };
 
@@ -8773,43 +3212,7 @@ in {
     };
   };
 
-  paramiko = buildPythonPackage rec {
-    pname = "paramiko";
-    version = "2.1.1";
-    name = "${pname}-${version}";
-
-    src = fetchPypi {
-      inherit pname version;
-      sha256 = "0xdmamqgx2ymhdm46q8flpj4fncj4wv2dqxzz0bc2dh7mnkss7fm";
-    };
-
-    propagatedBuildInputs = with self; [ cryptography pyasn1 ];
-
-    __darwinAllowLocalNetworking = true;
-
-    # https://github.com/paramiko/paramiko/issues/449
-    doCheck = !(isPyPy || isPy33);
-    checkPhase = ''
-      # test_util needs to resolve an hostname, thus failing when the fw blocks it
-      sed '/UtilTest/d' -i test.py
-
-      ${python}/bin/${python.executable} test.py --no-sftp --no-big-file
-    '';
-
-    meta = {
-      homepage = "https://github.com/paramiko/paramiko/";
-      description = "Native Python SSHv2 protocol library";
-      license = licenses.lgpl21Plus;
-      maintainers = with maintainers; [ aszlig ];
-
-      longDescription = ''
-        This is a library for making SSH2 connections (client or server).
-        Emphasis is on using SSH2 as an alternative to SSL for making secure
-        connections between python scripts. All major ciphers and hash methods
-        are supported. SFTP client and server mode are both supported too.
-      '';
-    };
-  };
+  paramiko = callPackage ../development/python-modules/paramiko { };
 
   parameterized = callPackage ../development/python-modules/parameterized { };
 
@@ -11631,6 +6034,8 @@ in {
     propagatedBuildInputs = [ self.cffi ];
   };
 
+  safe = callPackage ../development/python-modules/safe { };
+
   sampledata = callPackage ../development/python-modules/sampledata { };
 
   sasmodels = callPackage ../development/python-modules/sasmodels { };
@@ -15717,35 +10122,7 @@ EOF
     };
   };
 
-  poezio = buildPythonApplication rec {
-    name = "poezio-${version}";
-    version = "0.11";
-
-    disabled = pythonOlder "3.4";
-
-    buildInputs = with self; [ pytest ];
-    propagatedBuildInputs = with self ; [ aiodns slixmpp pyinotify potr mpd2 ];
-
-    src = pkgs.fetchurl {
-      url = "http://dev.louiz.org/attachments/download/118/${name}.tar.gz";
-      sha256 = "07cn3717swarjv47yw8x95bvngz4nvlyyy9m7ck9fhycjgdy82r0";
-    };
-
-    patches = [
-      ../development/python-modules/poezio/fix_gnupg_import.patch
-    ];
-
-    checkPhase = ''
-      py.test
-    '';
-
-    meta = {
-      description = "Free console XMPP client";
-      homepage = https://poez.io;
-      license = licenses.mit;
-      maintainers = [ maintainers.lsix ];
-    };
-  };
+  poezio = callPackage ../applications/networking/instant-messengers/poezio { };
 
   potr = callPackage ../development/python-modules/potr {};