summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/admin.scm21
-rw-r--r--gnu/packages/bioinformatics.scm31
-rw-r--r--gnu/packages/calendar.scm2
-rw-r--r--gnu/packages/django.scm13
-rw-r--r--gnu/packages/enlightenment.scm12
-rw-r--r--gnu/packages/jrnl.scm2
-rw-r--r--gnu/packages/music.scm2
-rw-r--r--gnu/packages/openstack.scm42
-rw-r--r--gnu/packages/patches/python-pyopenssl-skip-network-test.patch50
-rw-r--r--gnu/packages/pdf.scm4
-rw-r--r--gnu/packages/python.scm492
-rw-r--r--gnu/packages/rdf.scm22
-rw-r--r--gnu/packages/terminals.scm3
-rw-r--r--gnu/packages/version-control.scm2
-rw-r--r--gnu/packages/vpn.scm8
-rw-r--r--guix/build/python-build-system.scm14
17 files changed, 560 insertions, 161 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 21580a3870..2f852b5da0 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -845,6 +845,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-configobj-setuptools.patch	\
   %D%/packages/patches/python-paste-remove-website-test.patch	\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
+  %D%/packages/patches/python-pyopenssl-skip-network-test.patch	\
   %D%/packages/patches/python-pycrypto-CVE-2013-7459.patch	\
   %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
   %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index def9a6fbf3..687cfad970 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1697,15 +1697,26 @@ throughput (in the same interval).")
                (base32
                 "04q2cn8c83f6z6wn1scla1ilrpi5ssjc64987hvmwfvwvb82bvkp"))))
     (build-system python-build-system)
-    (inputs
+    (arguments
+     '(#:tests? #f))
+       ;; FIXME: 10 test failures. Some require newer pytest (> 2.9.2).
+       ;; Others need more work. Un-comment the below to run the tests.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       ;; Some tests need write access to $HOME.
+       ;;       (setenv "HOME" "/tmp")
+       ;;       (zero? (system* "py.test" "-v")))))))
+    (propagated-inputs
      `(("python-colorama" ,python-colorama)
        ("python-decorator" ,python-decorator)
        ("python-psutil" ,python-psutil)
        ("python-six" ,python-six)))
-    (inputs
-     ;; Requires setuptools >= 17.1 due to some features used, while our
-     ;; python currently only includes 12.0. TODO: Remove this input.
-     `(("python-setuptools" ,python-setuptools)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-mock" ,python-pytest-mock)))
     (home-page "https://github.com/nvbn/thefuck")
     (synopsis "Correct mistyped console command")
     (description
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index d82b6c093c..c930099179 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -563,6 +563,8 @@ Python.")
       ("python-future" ,python-future)
       ("python-click" ,python-click)
       ("python-h5py" ,python-h5py)))
+   (native-inputs
+    `(("python-nose" ,python-nose)))
    (home-page "http://www.biom-format.org")
    (synopsis "Biological Observation Matrix (BIOM) format utilities")
    (description
@@ -1561,6 +1563,7 @@ databases.")
        ("python-scipy" ,python2-scipy)))
     (native-inputs
      `(("python-mock" ,python2-mock)   ; for tests
+       ("python-nose" ,python2-nose)   ; for tests
        ("python-pytz" ,python2-pytz))) ; for tests
     (home-page "https://github.com/YeoLab/clipper")
     (synopsis "CLIP peak enrichment recognition")
@@ -1989,6 +1992,7 @@ trees (phylogenies) and characters.")
        ("python-pybigwig" ,python2-pybigwig)))
     (native-inputs
      `(("python-mock" ,python2-mock)   ;for tests
+       ("python-nose" ,python2-nose)   ;for tests
        ("python-pytz" ,python2-pytz))) ;for tests
     (home-page "https://github.com/fidelram/deepTools")
     (synopsis "Tools for normalizing and visualizing deep-sequencing data")
@@ -2865,28 +2869,10 @@ data.  It also provides the bgzip, htsfile, and tabix utilities.")
                 "1k3x44biak00aiv3hpm1yd6nn4hhp7n0qnbs3zh2q9sw7qr1qj5r"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after
-          'install 'wrap-program
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out"))
-                   (python-version (string-take (string-take-right
-                                                 (assoc-ref inputs "python") 5) 3))
-                   (path (string-join
-                          (map (lambda (name)
-                                 (string-append (assoc-ref inputs name)
-                                                "/lib/python" python-version
-                                                "/site-packages"))
-                               '("python-scipy"
-                                 "python-numpy"
-                                 "python-matplotlib"))
-                          ":")))
-              (wrap-program (string-append out "/bin/idr")
-                `("PYTHONPATH" ":" prefix (,path))))
-            #t)))))
-    (inputs
+     `(#:tests? #f)) ; FIXME: "ImportError: No module named 'utility'"
+    (propagated-inputs
      `(("python-scipy" ,python-scipy)
+       ("python-sympy" ,python-sympy)
        ("python-numpy" ,python-numpy)
        ("python-matplotlib" ,python-matplotlib)))
     (native-inputs
@@ -3576,6 +3562,9 @@ the phenotype as it models the data.")
       (build-system python-build-system)
       (arguments
        `(#:python ,python-2
+         ;; FIXME: Tests fail with "No such file or directory:
+         ;; pbtools/pbtranscript/modified_bx_intervals/intersection_unique.so"
+         #:tests? #f
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'enter-directory
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 70bf8f9573..a2ab5d299f 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -126,7 +126,7 @@ data units.")
      `(("sqlite" ,sqlite)))
     (propagated-inputs
      `(("python-configobj" ,python-configobj)
-       ("python-dateutil-2" ,python-dateutil-2)
+       ("python-dateutil" ,python-dateutil)
        ("python-icalendar" ,python-icalendar)
        ("python-tzlocal" ,python-tzlocal)
        ("python-urwid" ,python-urwid)
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index bbb2d71db1..106d18a8d7 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -106,6 +106,10 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
                (base32
                 "0906hms6y6znjhpd0g4wmzv9vcla4brkdpsm4zha9zdj8g5vq2hd"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: Upstream uses a 'runtests.py' script that is not
+     ;; present in the pypi tarball.
+     '(#:tests? #f))
     (propagated-inputs
      `(("python-django" ,python-django)))
     (home-page "https://github.com/alsoicode/django-simple-math-captcha")
@@ -131,7 +135,8 @@ with arguments to the field constructor.")
                 "1mmc7zsz3dlhs6sx4sppkj1vgshabi362r1a8b8wpj1qfximpqcb"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; FIXME: How to run tests?
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-setuppy
            (lambda _
@@ -163,6 +168,12 @@ useful tools for testing Django applications and projects.")
                (base32
                 "0f78hmk8c903zwfzlsiw7ivgag81ymmb5hi73rzxbhnlg2v0l3fx"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "runtests.py")))))))
     (native-inputs
      `(("python-django" ,python-django)
        ("python-mock" ,python-mock)))
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index ca97104958..d60e97922c 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -253,7 +253,17 @@ embedded systems.")
          (lambda _
            (setenv "CFLAGS"
                    (string-append "-I" (assoc-ref %build-inputs "python-dbus")
-                                  "/include/dbus-1.0")))))))
+                                  "/include/dbus-1.0"))
+           #t))
+        (add-before 'check 'set-environment
+          (lambda _
+            ;; Some tests require write access to HOME.
+            (setenv "HOME" "/tmp")
+            #t)))
+       ;; FIXME: Some tests require a running D-Bus server or a network
+       ;; connection and should be disabled. Other test failures looks
+       ;; legitimate. Disabled for now, needs work!
+       #:tests? #f))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python-cython" ,python-cython)))
diff --git a/gnu/packages/jrnl.scm b/gnu/packages/jrnl.scm
index ef1f52956c..f26de0d4ab 100644
--- a/gnu/packages/jrnl.scm
+++ b/gnu/packages/jrnl.scm
@@ -48,7 +48,7 @@
        ("python-pytz" ,python-pytz)
        ("python-tzlocal" ,python-tzlocal)
        ("python-six" ,python-six)
-       ("python-dateutil" , python-dateutil-2)
+       ("python-dateutil" ,python-dateutil)
        ("python-parsedatetime" ,python-parsedatetime)))
     (home-page "http://maebert.github.io/jrnl/")
     (synopsis "Personal journal application")
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index f3e26cb920..f34abbce77 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -2035,6 +2035,8 @@ detailed track info including timbre, pitch, rhythm and loudness information.
                (base32
                 "0bml11gfkxqd3i2jxkn5k2xllc4rvxjcyhs8an05gcyy1zp2bwvb"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires unpackaged python-flaky.
     (native-inputs
      `(("python-coverage" ,python-coverage)
        ("python-mock" ,python-mock)
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index e2672668d8..b3e3f08c23 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -81,6 +81,8 @@ all the files it generates a report.")
           (base32
            "0g4dfskaiy47rhsh4gh66l5vmdsrgq0qk68pl3ix1cj3ffvfndzv"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ;FIXME: Requires packaging python-doc8.
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-wrapt" ,python-wrapt)))
@@ -113,6 +115,9 @@ manner.")
         (base32
          "1a310k3dv04jg7zvmk37h2ql7y9kf4hvdxb74bjlwdxgmy6h4wap"))))
     (build-system python-build-system)
+    (arguments
+     ;; TODO: Requires unpackaged 'eventlet'.
+     '(#:tests? #f))
     (propagated-inputs
       `(("python-flake8-2.2.4" ,python-flake8-2.2.4)
         ("python-mccabe-0.2.1" ,python-mccabe-0.2.1)
@@ -146,9 +151,14 @@ guidelines}.")
           (base32
            "0njmh40i1lg5mzn9hc2ax83adj6dli455j6xifilrw27c4wlkjzx"))))
     (build-system python-build-system)
+    (arguments
+     ;; TODO: Requires newer version of testtools (>=1.4.0).
+     '(#:tests? #f))
     (native-inputs
       `(("python-fixtures" ,python-fixtures)
+        ("python-oslosphinx" ,python-oslosphinx)
         ("python-pbr" ,python-pbr)
+        ("python-sphinx" ,python-sphinx)
         ("python-testtools" ,python-testtools)))
     (home-page "http://www.openstack.org/")
     (synopsis "Mock object framework for Python")
@@ -282,10 +292,13 @@ portions of your testing code.")
     (native-inputs
       `(("python-pbr" ,python-pbr)
         ;; Tests
+        ("python-discover" ,python-discover)
         ("python-docutils" ,python-docutils)
         ("python-mock" ,python-mock)
+        ("python-oslosphinx" ,python-oslosphinx)
         ("python-oslotest" ,python-oslotest)
-        ("python-sphinx" ,python-sphinx)))
+        ("python-sphinx" ,python-sphinx)
+        ("python-testrepository" ,python-testrepository)))
     (home-page "https://github.com/dreamhost/stevedore")
     (synopsis "Manage dynamic plugins for Python applications")
     (description
@@ -315,7 +328,8 @@ extensions.")
         "1cpp2vwmawpd29hjsklsps181lq2ah91cl412qvpnz228nf9sqn5"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; FIXME: Requires oslo.log >= 1.14.0.
+       #:phases
        (modify-phases %standard-phases
          (add-before
           'check 'pre-check
@@ -362,6 +376,8 @@ common features used in Tempest.")
          (base32
           "13r778jfb0fhna37c2pd1f2xipnsbd7zli7qhn96acrzymrwj5k1"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires packaging python-argparse.
     (propagated-inputs
       `(("python-netaddr" ,python-netaddr)
         ("python-six" ,python-six)
@@ -395,11 +411,19 @@ common features used in Tempest.")
         (base32
          "0kvha0rs9295njyl2z6n6zm5dapi5mrl5zwjm0m6ldqrvccyf8c3"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires python-mock >= 1.2.
     (native-inputs
       `(("python-babel" ,python-babel)
         ("python-pbr" ,python-pbr)
         ;; Tests.
-        ("python-oslotest" ,python-oslotest)))
+        ("python-coverage" ,python-coverage)
+        ("python-hacking" ,python-hacking)
+        ("python-mock" ,python-mock)
+        ("python-os-client-config" ,python-os-client-config)
+        ("python-oslotest" ,python-oslotest)
+        ("python-oslosphinx" ,python-oslosphinx)
+        ("python-sphinx" ,python-sphinx)))
     (home-page "http://launchpad.net/oslo")
     (synopsis "Oslo context library")
     (description
@@ -423,6 +447,8 @@ pipeline and used by various modules such as logging.")
           (base32
            "0bpb1c20sm8my650gl824nzaip83bfn8hr91s65k5ncmyh8hb6pl"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Circular dependency on python-oslo.config.
     (propagated-inputs
       `(("python-babel" ,python-babel)
         ("python-six" ,python-six)))
@@ -459,6 +485,8 @@ in an application or library.")
         (base32
           "1fhy6yvbd565nv4x4i3ppyrlbmz3yy9d0xsvw5nkqsa7g43nmf8z"))))
   (build-system python-build-system)
+  (arguments
+   '(#:tests? #f)) ; FIXME: Requires oslo.utils >= 3.2.0.
   (propagated-inputs
    `(("python-debtcollector" ,python-debtcollector)
      ("python-oslo.config" ,python-oslo.config)
@@ -496,6 +524,8 @@ handlers and support for context specific logging (like resource id’s etc).")
         (base32
          "00s03krhf833gs76aw5ns32w9m1i4hx6x6d9g82m0j5wyqk0sci4"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires python-oslo.utils >= 3.2.0.
     (propagated-inputs
       `(("python-iso8601" ,python-iso8601)
         ("python-netaddr" ,python-netaddr)
@@ -603,6 +633,8 @@ and better support for mocking results.")
             ;; phase.
             (delete-file "oslo_utils/tests/test_netutils.py")))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires oslo.config >= 2.7.0.
     (propagated-inputs
       `(("python-debtcollector" ,python-debtcollector)
         ("python-oslo.i18n" ,python-oslo.i18n)
@@ -616,6 +648,8 @@ and better support for mocking results.")
       `(("python-babel" ,python-babel)
         ("python-pbr" ,python-pbr)
         ;; Tests.
+        ("python-bandit" ,python-bandit)
+        ("python-oslo.config" ,python-oslo.config)
         ("python-oslotest" ,python-oslotest)
         ("python-mock" ,python-mock)
         ("python-mox3" ,python-mox3)
@@ -643,6 +677,8 @@ handling.")
          (base32
           "1w4csvkah67rfpxylxnvs2s3594i0f9isy8pf4gnsqs5zirvjaa4"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Many tests are failing.
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ;; and some packages for the tests
diff --git a/gnu/packages/patches/python-pyopenssl-skip-network-test.patch b/gnu/packages/patches/python-pyopenssl-skip-network-test.patch
new file mode 100644
index 0000000000..a24eaf69a0
--- /dev/null
+++ b/gnu/packages/patches/python-pyopenssl-skip-network-test.patch
@@ -0,0 +1,50 @@
+This test tries connecting to an external server which is not supported
+in the build environment. See discussion at:
+
+https://lists.gnu.org/archive/html/guix-devel/2016-12/msg00650.html
+
+diff --git a/tests/test_ssl.py b/tests/test_ssl.py
+index ee849fd..60048b8 100644
+--- a/tests/test_ssl.py
++++ b/tests/test_ssl.py
+@@ -1180,40 +1180,6 @@ class ContextTests(TestCase, _LoopbackMixin):
+             TypeError, context.load_verify_locations, None, None, None
+         )
+ 
+-    @pytest.mark.skipif(
+-        platform == "win32",
+-        reason="set_default_verify_paths appears not to work on Windows.  "
+-        "See LP#404343 and LP#404344."
+-    )
+-    def test_set_default_verify_paths(self):
+-        """
+-        :py:obj:`Context.set_default_verify_paths` causes the
+-        platform-specific CA certificate locations to be used for
+-        verification purposes.
+-        """
+-        # Testing this requires a server with a certificate signed by one
+-        # of the CAs in the platform CA location.  Getting one of those
+-        # costs money.  Fortunately (or unfortunately, depending on your
+-        # perspective), it's easy to think of a public server on the
+-        # internet which has such a certificate.  Connecting to the network
+-        # in a unit test is bad, but it's the only way I can think of to
+-        # really test this. -exarkun
+-
+-        # Arg, verisign.com doesn't speak anything newer than TLS 1.0
+-        context = Context(SSLv23_METHOD)
+-        context.set_default_verify_paths()
+-        context.set_verify(
+-            VERIFY_PEER,
+-            lambda conn, cert, errno, depth, preverify_ok: preverify_ok)
+-
+-        client = socket()
+-        client.connect(("encrypted.google.com", 443))
+-        clientSSL = Connection(context, client)
+-        clientSSL.set_connect_state()
+-        clientSSL.do_handshake()
+-        clientSSL.send(b"GET / HTTP/1.0\r\n\r\n")
+-        self.assertTrue(clientSSL.recv(1024))
+-
+     def test_set_default_verify_paths_signature(self):
+         """
+         :py:obj:`Context.set_default_verify_paths` takes no arguments and
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 9b3571e67b..b86647d4ee 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -629,6 +629,10 @@ using a stylus.")
                (base32
                 "0rz2pg04wnzjjm2f5a8ik9v8s54mv4xrjhv5liqjijqv6awh12gl"))))
     (build-system python-build-system)
+    (arguments
+     '(;; FIXME: There is one test failure, but it does not cause the
+       ;; build to fail. No time to investigate right now.
+       #:test-target "tests"))
     (propagated-inputs
      `(("python-pillow" ,python-pillow)))
     (home-page "http://www.reportlab.com")
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 727e1bff26..bfd003ba3e 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -75,6 +75,7 @@
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
@@ -87,6 +88,7 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages shells)
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
@@ -438,6 +440,9 @@ instead of @command{python3}.")))
         (base32
          "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: some tests does not return and times out.
+     '(#:tests? #f))
     (home-page "https://www.github.com/giampaolo/psutil")
     (synopsis "Library for retrieving information on running processes")
     (description
@@ -538,6 +543,14 @@ John the Ripper).")
         (base32
          "14k8z7ndc3zk5xivnm4d8lncchx475ll5izpf8vmfbq7rp9yp5rj"))))
     (build-system python-build-system)
+    (arguments
+     '(;; FIXME: One test fails with "EOFError not raised by connect".
+       #:tests? #f))
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "python" "test.py")))))))
     (propagated-inputs
      `(("python-pycrypto" ,python-pycrypto)
        ("python-ecdsa" ,python-ecdsa)))
@@ -1046,6 +1059,9 @@ password storage.")
        (base32
         "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh"))))
     (build-system python-build-system)
+    (native-inputs
+     `(("python-py" ,python-py)
+       ("python-pytest" ,python-pytest)))
     (home-page "http://pypi.python.org/pypi/six/")
     (synopsis "Python 2 and 3 compatibility utilities")
     (description
@@ -1059,7 +1075,7 @@ Python file, so it can be easily copied into your project.")
 (define-public python2-six
   (package-with-python2 python-six))
 
-(define-public python-dateutil-2
+(define-public python-dateutil
   (package
     (name "python-dateutil")
     (version "2.5.2")
@@ -1080,29 +1096,6 @@ Python file, so it can be easily copied into your project.")
 datetime module, available in Python 2.3+.")
     (license license:bsd-3)))
 
-(define-public python2-dateutil-2
-  (package-with-python2 python-dateutil-2))
-
-(define-public python-dateutil
-  (package
-    (name "python-dateutil")
-    (version "1.5") ; last version for python < 3
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "http://labix.org/download/python-dateutil/"
-                          "python-dateutil-" version ".tar.gz"))
-      (sha256
-       (base32
-        "0fqfglhy5khbvsipr3x7m6bcaqljh8xl5cw33vbfxy7qhmywm2n0"))))
-    (build-system python-build-system)
-    (home-page "https://dateutil.readthedocs.io/en/stable/")
-    (synopsis "Extensions to the standard datetime module")
-    (description
-     "The dateutil module provides powerful extensions to the standard
-datetime module, available in Python 2.3+.")
-    (license license:psfl)))
-
 (define-public python2-dateutil
   (package-with-python2 python-dateutil))
 
@@ -1148,7 +1141,7 @@ datetime module, available in Python 2.3+.")
     (propagated-inputs
      `(("python-numpy" ,python-numpy)
        ("python-pytz" ,python-pytz)
-       ("python-dateutil" ,python-dateutil-2)))
+       ("python-dateutil" ,python-dateutil)))
     (native-inputs
      `(("python-nose" ,python-nose)
        ("python-cython" ,python-cython)))
@@ -1724,6 +1717,12 @@ standard library.")
         (base32
          "0561gz2w3i825gyl42mcq14y3dcgkapfiv5zv9a2bz15qxiijl56"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: "ImportError: 'test' module incorrectly imported from
+     ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
+     ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
+     ;; Is this module globally installed?"
+     '(#:tests? #f))
     (home-page "http://pylib.readthedocs.org/")
     (synopsis "Python library for parsing, I/O, instrospection, and logging")
     (description
@@ -1922,6 +1921,15 @@ same arguments.")
            (for-each delete-file (find-files "." "\\.pyc$"))
            #t))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ;FIXME: Some tests are failing.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (delete 'check)
+       ;;   (add-after 'install 'check
+       ;;     (lambda* (#:key inputs outputs #:allow-other-keys)
+       ;;       (add-installed-pythonpath inputs outputs)
+       ;;       (zero? (system* "py.test" "-v")))))
     (native-inputs
      `(("unzip" ,unzip)
        ("python-setuptools-scm" ,python-setuptools-scm)))
@@ -2155,10 +2163,18 @@ from git information.
         (base32
          "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "-m" "testtools.run"
+                             "fixtures.test_suite")))))))
     (propagated-inputs
      `(("python-six" ,python-six)))
     (native-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal)
+     `(("python-mock" ,python-mock)
+       ("python-pbr-minimal" ,python-pbr-minimal)
        ("python-testtools" ,python-testtools)))
     (home-page "https://launchpad.net/python-fixtures")
     (synopsis "Python test fixture library")
@@ -2184,6 +2200,9 @@ Python tests.")
         (base32
          "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: Many tests are failing.
+     '(#:tests? #f))
     (propagated-inputs
      `(("python-fixtures" ,python-fixtures)
        ("python-subunit" ,python-subunit)
@@ -2213,6 +2232,9 @@ have failed since the last commit or what tests are currently failing.")
         (base32
          "01rbr4br4lsk0lwn8fb96zwd2xr4f0mg1w7iq3j11i8f5ig2nqs1"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
+     '(#:tests? #f))
     (home-page "http://nedbatchelder.com/code/coverage")
     (synopsis "Code coverage measurement for Python")
     (description
@@ -2388,7 +2410,12 @@ is used by the Requests library to verify HTTPS requests.")
                (substitute* "click/_unicodefun.py"
                  (("'locale'")
                   (string-append "'" glibc "/bin/locale'"))))
-             #t)))))
+             #t))
+         (replace 'check
+           (lambda _
+             (zero? (system* "make" "test")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "http://click.pocoo.org")
     (synopsis "Command line library for Python")
     (description
@@ -2447,12 +2474,11 @@ installed with a newer @code{pip} or with wheel's own command line utility.")
              (sha256
               (base32
                "0zsqrzlybf25xscgi7ja4s48y2abf9wvjkn47wh984qgs1fq2xy5"))))
+    ;; TODO: unbundle urllib3 and chardet.
     (build-system python-build-system)
-    (native-inputs
-     `(("python-py" ,python-py)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-cov" ,python-pytest-cov)
-       ("python-wheel" ,python-wheel)))
+    (arguments
+     ;; FIXME: Some tests require network access.
+     '(#:tests? #f))
     (home-page "http://python-requests.org/")
     (synopsis "Python HTTP library")
     (description
@@ -2625,6 +2651,7 @@ somewhat intelligeble.")
     (build-system python-build-system)
     (native-inputs
      `(("python-nose" ,python-nose)
+       ("python-mock" ,python-mock)
        ("python-cryptography" ,python-cryptography)
        ("python-pyjwt" ,python-pyjwt)
        ("python-blinker" ,python-blinker)))
@@ -2641,7 +2668,6 @@ OAuth request-signing logic.")
     (package
       (inherit base)
       (native-inputs `(("python2-unittest2" ,python2-unittest2)
-                       ("python2-mock" ,python2-mock)
                        ,@(package-native-inputs base))))))
 
 (define-public python-itsdangerous
@@ -2788,15 +2814,26 @@ written in pure Python.")
                (base32
                 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
     (home-page "http://defunkt.io/pystache/")
     (synopsis "Python logic-less template engine")
     (description
      "Pystache is a Python implementation of the framework agnostic,
 logic-free templating system Mustache.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pystache))))))
 
 (define-public python2-pystache
-  (package-with-python2 python-pystache))
+  (package (inherit (package-with-python2
+                     (strip-python2-variant python-pystache)))
+           (arguments
+            `(#:python ,python-2
+              #:phases
+              (modify-phases %standard-phases
+                (replace 'check
+                  (lambda _
+                    (zero? (system* "python" "test_pystache.py")))))))))
 
 (define-public python-joblib
   (package
@@ -2893,6 +2930,9 @@ reStructuredText.")
         (base32
          "10axnp2wpjnq9g8wg53fx0c70dfxqrz498jyz8mrdx9a3flwir48"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: Tests require sphinx, which depends on this.
+     '(#:tests? #f))
     (home-page "http://pygments.org/")
     (synopsis "Syntax highlighting")
     (description
@@ -2916,6 +2956,9 @@ reStructuredText.")
         (base32
          "011xizm3jnmf4cvs5i6kgf6c5nn046h79i8j0vd0f27yw9j3p4wl"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: Missing dependencies.
+     '(#:tests? #f))
     (propagated-inputs
      `(("python-jinja2" ,python-jinja2)
        ("python-docutils" ,python-docutils)
@@ -2944,6 +2987,8 @@ sources.")
         (base32
          "19nw3rn7awplcdrz63kg1njqwkbymfg9lwn7l2grhdyhyr2gaa8g"))))
     (build-system python-build-system)
+    (propagated-inputs
+     `(("python-sphinx" ,python-sphinx)))
     (home-page "https://github.com/snide/sphinx_rtd_theme/")
     (synopsis "ReadTheDocs.org theme for Sphinx")
     (description "A theme for Sphinx used by ReadTheDocs.org.")
@@ -2965,7 +3010,7 @@ sources.")
          "0bh4lnj2p1nh0wf5pgxgfbrp27xhb1rinahkb5j7s3qprq6qn0sr"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil-2)
+     `(("python-dateutil" ,python-dateutil)
        ("python-six" ,python-six)))
     (native-inputs
      `(("python-setuptools-scm" ,python-setuptools-scm)))
@@ -3059,7 +3104,7 @@ interested parties to subscribe to events, or \"signals\".")
        ("python-blinker" ,python-blinker)
        ("python-unidecode" ,python-unidecode)
        ("python-six" ,python-six)
-       ("python-dateutil-2" ,python-dateutil-2)))
+       ("python-dateutil" ,python-dateutil)))
     (home-page "http://getpelican.com/")
     (arguments
      `(;; XXX Requires a lot more packages to do unit tests :P
@@ -3136,6 +3181,9 @@ mining and data analysis.")
        (sha256
         (base32 "0jz416fqvpahqyffw8plmszzfj669w8wvf3y9clnr5lr6a7md3kn"))))
     (build-system python-build-system)
+    (arguments
+     ;; TODO: Some tests require running X11 server. Disable them?
+     '(#:tests? #f))
     ;; See DEPENDS.txt for the list of build and run time requiremnts
     (propagated-inputs
      `(("python-matplotlib" ,python-matplotlib)
@@ -3387,7 +3435,8 @@ objects.")
     (native-inputs
      `(("unzip" ,unzip)
        ("python2-cython" ,python2-cython)
-       ("python2-mock" ,python2-mock)))
+       ("python2-mock" ,python2-mock)
+       ("python2-nose" ,python2-nose)))
     (home-page "http://research.microsoft.com/en-us/um/redmond/projects/mscompbio/fastlmm/")
     (synopsis "Perform genome-wide association studies on large data sets")
     (description
@@ -3622,7 +3671,7 @@ transcendental functions).")
        ("python-pygobject" ,python-pygobject)
        ("gobject-introspection" ,gobject-introspection)
        ("python-tkinter" ,python "tk")
-       ("python-dateutil" ,python-dateutil-2)
+       ("python-dateutil" ,python-dateutil)
        ("python-numpy" ,python-numpy-bootstrap)
        ("python-pillow" ,python-pillow)
        ("python-pytz" ,python-pytz)
@@ -3786,6 +3835,16 @@ operators such as union, intersection, and difference.")
         (base32
          "0nhan2qvrw7b7gg5zddwa22kybdv3x1g26vkd7q8lvnkgzrs4dga"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             ;; It's easier to run tests after install.
+             ;; Make installed package available for running the tests
+             (add-installed-pythonpath inputs outputs)
+             (zero? (system* "python" "-m" "rpy2.tests" "-v")))))))
     (propagated-inputs
      `(("python-six" ,python-six)))
     (inputs
@@ -4100,11 +4159,22 @@ both of which are installed automatically if you install this library.")
          (base32
           "1wghyvk73cmq3iqyg3fczw128fv2pan2v76m0xg1bw05h8fhvnk3"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Many tests require a running database server.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-sqlalchemy" ,python-sqlalchemy)))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     `(("python-dateutil" ,python-dateutil)
+       ("python-flexmock" ,python-flexmock)
+       ("python-psycopg2" ,python-psycopg2)
+       ("python-pytest" ,python-pytest)
+       ("python-pytz" ,python-pytz)))
     (home-page "https://github.com/kvesteri/sqlalchemy-utils")
     (synopsis "Various utility functions for SQLAlchemy")
     (description
@@ -4367,16 +4437,18 @@ a front-end for C compilers or analysis tools.")
      `(("python-cffi" ,python-cffi) ; used at run time
        ("python-six" ,python-six)))
     (arguments
-     `(#:phases
-       (alist-cons-after
-        'install 'install-doc
-        (lambda* (#:key outputs #:allow-other-keys)
-          (let ((doc (string-append (assoc-ref outputs "out") "/share"
-                                    "/doc/" ,name "-" ,version)))
-            (mkdir-p doc)
-            (copy-file "README.md"
-                       (string-append doc "/README.md"))))
-        %standard-phases)))
+     `(;; FIXME: Tests cannot load libxcb.so.1
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((doc (string-append (assoc-ref outputs "out") "/share"
+                                       "/doc/" ,name "-" ,version)))
+               (mkdir-p doc)
+               (copy-file "README.md"
+                          (string-append doc "/README.md"))
+               #t))))))
     (home-page "https://github.com/tych0/xcffib")
     (synopsis "XCB Python bindings")
     (description
@@ -4413,25 +4485,27 @@ support for Python 3 and PyPy.  It is based on cffi.")
     (propagated-inputs
      `(("python-xcffib" ,python-xcffib))) ; used at run time
     (arguments
-     `(#:phases
-       (alist-cons-after
-        'install 'install-doc
-        (lambda* (#:key inputs outputs #:allow-other-keys)
-          (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-                 (doc (string-append data "/doc/" ,name "-" ,version))
-                 (html (string-append doc "/html")))
-            (setenv "LD_LIBRARY_PATH"
-                    (string-append (assoc-ref inputs "cairo") "/lib" ":"
-                                   (assoc-ref inputs "gdk-pixbuf") "/lib"))
-            (setenv "LANG" "en_US.UTF-8")
-            (mkdir-p html)
-            (for-each (lambda (file)
-                        (copy-file (string-append "." file)
-                                   (string-append doc file)))
-                      '("/README.rst" "/CHANGES" "/LICENSE"))
-            (system* "python" "setup.py" "build_sphinx")
-            (copy-recursively "docs/_build/html" html)))
-        %standard-phases)))
+     `(;; FIXME: Tests cannot find 'libcairo.so.2'.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
+                    (doc (string-append data "/doc/" ,name "-" ,version))
+                    (html (string-append doc "/html")))
+               (setenv "LD_LIBRARY_PATH"
+                       (string-append (assoc-ref inputs "cairo") "/lib" ":"
+                                      (assoc-ref inputs "gdk-pixbuf") "/lib"))
+               (setenv "LANG" "en_US.UTF-8")
+               (mkdir-p html)
+               (for-each (lambda (file)
+                           (copy-file (string-append "." file)
+                                      (string-append doc file)))
+                         '("/README.rst" "/CHANGES" "/LICENSE"))
+               (system* "python" "setup.py" "build_sphinx")
+               (copy-recursively "docs/_build/html" html)
+               #t))))))
     (home-page "https://github.com/SimonSapin/cairocffi")
     (synopsis "Python bindings and object-oriented API for Cairo")
     (description
@@ -4512,6 +4586,8 @@ Python language binding specification.")
        (sha256
         (base32 "1gzjg2k6f14i1msm2b0ax8d9ds1hvk6qd5nlaivg8m4cxqp4cp1x"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
     (propagated-inputs
      `(("python-psutil" ,python-psutil)
        ("python-drmaa" ,python-drmaa)
@@ -4530,21 +4606,39 @@ cluster without needing to write any wrapper code yourself.")
 (define-public python-pexpect
   (package
     (name "python-pexpect")
-    (version "3.3")
+    (version "4.2.1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/source/p/"
-                           "pexpect/pexpect-" version ".tar.gz"))
+       (uri (pypi-uri "pexpect" version))
        (sha256
-        (base32 "1fp5gm976z7ghm8jw57463rj19cv06c8zw842prgyg788f6n3snz"))))
+        (base32 "14ls7k99pwvl21zqv65kzrhccv50j89m5ij1hf0slmsvlxjj84rx"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'check 'prepare-tests
+           (lambda _
+             (substitute* (find-files "tests")
+               (("/bin/ls") (which "ls"))
+               (("/bin/echo") (which "echo"))
+               (("/bin/which") (which "which"))
+               ;; Many tests try to use the /bin directory which
+               ;; is not present in the build environment.
+               ;; Use one that's non-empty and unlikely to change.
+               (("/bin'") "/dev'"))
+             ;; XXX: Socket connection test gets "Connection reset by peer".
+             ;; Why does it not work? Delete for now.
+             (delete-file "tests/test_socket.py")
+             #t))
          (replace 'check (lambda _ (zero? (system* "nosetests")))))))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     `(("python-nose" ,python-nose)
+       ("python-pytest" ,python-pytest)
+       ("man-db" ,man-db)
+       ("which" ,which)))
+    (propagated-inputs
+     `(("python-ptyprocess" ,python-ptyprocess)))
     (home-page "http://pexpect.readthedocs.org/")
     (synopsis "Controlling interactive console applications")
     (description
@@ -5242,13 +5336,12 @@ implementation of D-Bus.")
       `(("sqlite" ,sqlite)))
     (arguments
      `(#:phases
-        ;; swap check and install phases
-        (alist-cons-after
-         'install 'check
-         (assoc-ref %standard-phases 'check)
-         (alist-delete
-          'check
-          %standard-phases))))
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (zero? (system* "python" "setup.py" "test")))))))
     (home-page "https://github.com/rogerbinns/apsw/")
     (synopsis "Another Python SQLite Wrapper")
     (description "APSW is a Python wrapper for the SQLite
@@ -5320,7 +5413,8 @@ screen-scraping projects.  It offers Pythonic idioms for navigating,
 searching, and modifying a parse tree, providing a toolkit for
 dissecting a document and extracting what you need.  It automatically
 converts incoming documents to Unicode and outgoing documents to UTF-8.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
 
 (define-public python2-beautifulsoup4
   (package
@@ -5484,17 +5578,18 @@ of the structure, dynamics, and functions of complex networks.")
 (define-public snakemake
   (package
     (name "snakemake")
-    (version "3.2.1")
+    (version "3.9.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/s/snakemake/snakemake-"
-             version ".tar.gz"))
+       (uri (pypi-uri "snakemake" version))
        (sha256
-        (base32 "0fi4b63sj60hvi7rfydvmz2icl4wj74djw5sn2gl8hxd02qw4b91"))))
+        (base32 "1d48ql0010v9ls6mac7fz6j391gm4h74a64hqgw89s0vfqgdyzdl"))))
     (build-system python-build-system)
-    (home-page "https://bitbucket.org/johanneskoester/snakemake")
+    (arguments
+     ;; TODO: Package missing test dependencies.
+     '(#:tests? #f))
+    (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home")
     (synopsis "Python-based execution environment for make-like workflows")
     (description
       "Snakemake aims to reduce the complexity of creating workflows by
@@ -5513,6 +5608,8 @@ Python style, together with a fast and comfortable execution environment.")
        (sha256
         (base32 "0ibi3xsfm2kysph61mnfy0pf8d5rkgxgrdb0z9nbizgcgdsb5a0m"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; Tests requires a running X11 server.
     (propagated-inputs
      `(("python-pandas" ,python-pandas)
        ("python-matplotlib" ,python-matplotlib)
@@ -5534,10 +5631,40 @@ and statistical routines from scipy and statsmodels.")
       (propagated-inputs `(("python2-pytz" ,python2-pytz)
                            ,@(package-propagated-inputs base))))))
 
+(define-public python-mpmath
+  (package
+  (name "python-mpmath")
+  (version "0.19")
+  (source (origin
+            (method url-fetch)
+            (uri (string-append "http://mpmath.org/files/mpmath-"
+                                version ".tar.gz"))
+            (sha256
+             (base32
+              "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
+  (build-system python-build-system)
+  (arguments
+   '(#:phases
+     (modify-phases %standard-phases
+       (replace 'check
+         (lambda _
+           (zero?
+            (system* "python" "mpmath/tests/runtests.py" "-local")))))))
+  (home-page "http://mpmath.org")
+  (synopsis "Arbitrary-precision floating-point arithmetic in python")
+  (description
+    "@code{mpmath} can be used as an arbitrary-precision substitute for
+Python's float/complex types and math/cmath modules, but also does much
+more advanced mathematics.")
+  (license license:bsd-3)))
+
+(define-public python2-mpmath
+  (package-with-python2 python-mpmath))
+
 (define-public python-sympy
   (package
     (name "python-sympy")
-    (version "0.7.6")
+    (version "1.0")
     (source
      (origin
        (method url-fetch)
@@ -5545,8 +5672,10 @@ and statistical routines from scipy and statsmodels.")
              "https://github.com/sympy/sympy/releases/download/sympy-"
              version "/sympy-" version ".tar.gz"))
        (sha256
-        (base32 "19yp0gy4i7p4g6l3b8vaqkj9qj7yqb5kqy0qgbdagpzgkdz958yz"))))
+        (base32 "1bpzjwr9hrr7w88v4vgnj9lr6vxcldc94si13n8xpr1rv08d5b1y"))))
     (build-system python-build-system)
+    (propagated-inputs
+     `(("python-mpmath" ,python-mpmath)))
     (home-page "http://www.sympy.org/")
     (synopsis "Python library for symbolic mathematics")
     (description
@@ -5664,6 +5793,17 @@ It is written entirely in Python.")
        (sha256
         (base32 "1gzgwayl6hmc9jfcl88bni4jcsk2jcca9dn1rvrfsvnijcjx7hn9"))))
     (build-system python-build-system)
+    (arguments
+     '(;; FIXME: Two tests error out with:
+       ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       ;; 'setup.py test' hits an AssertionError on BSD-specific
+       ;;       ;; "tornado/platform/kqueue.py". This is the supported method:
+       ;;       (zero? (system* "python" "-m" "tornado.test")))))
+       #:tests? #f))
     (native-inputs
      `(("python-certifi" ,python-certifi)))
     (propagated-inputs
@@ -5873,7 +6013,10 @@ complexity of Python source code.")
                ".tar.gz"))
         (sha256
           (base32
-            "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))))
+           "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
+    (arguments
+     ;; XXX Tests not compatible with Python 3.5.
+     '(#:tests? #f))))
 
 (define-public python2-pep8-1.5.7
   (package-with-python2 python-pep8-1.5.7))
@@ -5892,7 +6035,10 @@ complexity of Python source code.")
                ".tar.gz"))
         (sha256
           (base32
-            "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))))
+           "0sbpq6pqm1i9wqi41mlfrsc5rk92jv4mskvlyxmnhlbdnc80ma1z"))))
+    (arguments
+     ;; XXX Tests not compatible with Python 3.5.
+     '(#:tests? #f))))
 
 (define-public python2-pyflakes-0.8.1
   (package-with-python2 python-pyflakes-0.8.1))
@@ -5960,7 +6106,10 @@ complexity of Python source code.")
             (for-each delete-file-recursively
                       (find-files "." "__pycache__" #:directories? #t))
             (for-each delete-file (find-files "." "\\.pyc$"))
-            #t))))))
+            #t))))
+    (arguments
+     ;; XXX Fails with Python 3.5.
+     '(#:tests? #f))))
 
 (define-public python2-flake8-2.2.4
   (package-with-python2 python-flake8-2.2.4))
@@ -6171,6 +6320,9 @@ from an XML-based format.")
         (base32
          "0g6n288l83sfwavxh1aryi0aqvsr3sp7v6f903mckwqa4scpky62"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: Some tests need network access.
+     '(#:tests? #f))
     (synopsis "Tool and library for manipulating LilyPond files")
     (description "This package provides a Python library to parse, manipulate
 or create documents in LilyPond format.  A command line program ly is also
@@ -6339,6 +6491,8 @@ and MAC network addresses.")
        (base32
         "0c7gh3lsdjds262h0v1sqc66l7hqgfwbakn96qrhdbl0i3vm5yz8"))))
   (build-system python-build-system)
+  (native-inputs
+   `(("python-pytest" ,python-pytest)))
   (home-page "https://bitbucket.org/micktwomey/pyiso8601")
   (synopsis "Module to parse ISO 8601 dates")
   (description
@@ -6751,13 +6905,25 @@ message digests and key derivation functions.")
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "0vji4yrfshs15xpczbhzhasnjrwcarsqg87n98ixnyafnyxs6ybp"))))
+         "0vji4yrfshs15xpczbhzhasnjrwcarsqg87n98ixnyafnyxs6ybp"))
+       (patches
+        (search-patches "python-pyopenssl-skip-network-test.patch"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (zero? (system* "py.test" "-v")))))))
     (propagated-inputs
      `(("python-cryptography" ,python-cryptography)
        ("python-six" ,python-six)))
     (inputs
      `(("openssl" ,openssl)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/pyca/pyopenssl")
     (synopsis "Python wrapper module around the OpenSSL library")
     (description
@@ -7074,9 +7240,19 @@ functions to find and load entry points.")
         (base32
          "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
     (build-system python-build-system)
-    ;; The "bdist_egg" target is disabled by default, causing the installation
-    ;; to fail.
-    (arguments `(#:configure-flags (list "bdist_egg")))
+    (arguments
+     `(;; The "bdist_egg" target is disabled by default, causing the installation
+       ;; to fail.
+       #:configure-flags (list "bdist_egg")
+       ;; FIXME: 5 failures, 40 errors.
+       #:tests? #f))
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "py.test" "-v")))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (propagated-inputs
      `(("python-bleach" ,python-bleach)
        ("python-entrypoints" ,python-entrypoints)
@@ -7177,7 +7353,8 @@ interactive computing.")
     (propagated-inputs
      `(("python-notebook" ,python-notebook)))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     `(("python-certifi" ,python-certifi)
+       ("python-nose" ,python-nose)))
     (home-page "http://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "This package provides interactive HTML widgets for Jupyter
@@ -7458,6 +7635,8 @@ forms, HTTP servers, regular expressions, and more.")
         (base32
          "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (native-inputs
      `(("python-six" ,python-six)
        ;("python-zope-interface" ,python-zope-interface)
@@ -7518,8 +7697,11 @@ internationalized messages within program source text.")
         (base32
          "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
     (propagated-inputs
      `(("python-zope-event" ,python-zope-event)
+       ("python-zope-exceptions", python-zope-exceptions)
        ("python-zope-interface" ,python-zope-interface)))
     (native-inputs
      `(("python-zope-testing" ,python-zope-testing)
@@ -7547,6 +7729,8 @@ defining data schemas.")
                (base32
                 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (propagated-inputs
      `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
        ("python-zope-schema" ,python-zope-schema)))
@@ -7572,6 +7756,8 @@ Markup Language.")
         (base32
          "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (propagated-inputs
      `(("python-zope-interface" ,python-zope-interface)))
     (home-page "http://pypi.python.org/pypi/zope.proxy")
@@ -7599,6 +7785,8 @@ brokering, etc.) for which the proxy is responsible.")
         (base32
          "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
     (propagated-inputs
      `(("python-zope-proxy" ,python-zope-proxy)
        ("python-zope-schema" ,python-zope-schema)))
@@ -7624,12 +7812,15 @@ Zope3, which are are special objects that have a structural location.")
         (base32
          "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
     (propagated-inputs
      `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
        ("python-zope-proxy" ,python-zope-proxy)
        ("python-zope-schema" ,python-zope-schema)))
-     (native-inputs
-     `(("python-zope-component" ,python-zope-component)
+    (native-inputs
+     `(("python-six" ,python-six)
+       ("python-zope-component" ,python-zope-component)
        ("python-zope-configuration" ,python-zope-configuration)
        ("python-zope-location" ,python-zope-location)
        ("python-zope-testrunner" ,python-zope-testrunner)
@@ -8233,7 +8424,7 @@ processes across test runs.")
                "1bvi7rzh7scl4nmgj2n2cy7k0v3p29y15cqy2hcdnfq9mnhdr63y"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil-2" ,python-dateutil-2)
+     `(("python-dateutil" ,python-dateutil)
        ("python-pytz" ,python-pytz)))
     (synopsis "Python library for parsing iCalendar files")
     (description "The icalendar package is a parser/generator of iCalendar
@@ -8291,6 +8482,14 @@ Blog, News or Announcements section to a Sphinx website.")
                (base32
                 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "py.test" "-v")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (propagated-inputs
      `(("python-args" ,python-args)))
     (home-page "https://github.com/kennethreitz/clint")
@@ -8360,6 +8559,17 @@ with a new public API, and RPython support.")
                (base32
                 "1msqv747iz12r73mz4qvsmlwkddwjvrahlrk7ysrcz07h7dsscxs"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; Tests require write access to HOME.
+             (setenv "HOME" "/tmp")
+             (zero? (system* "nosetests")))))))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-nose" ,python-nose)))
     (propagated-inputs
      `(("python-astor" ,python-astor)
        ("python-clint" ,python-clint)
@@ -8634,6 +8844,8 @@ servers.")
       (base32
        "0g9xvl69y7nr3w7ag4fsp6sm4fqf6vrqjw7504x2hzrrsh3ampq8"))))
    (build-system python-build-system)
+   (native-inputs
+    `(("python-nose" ,python-nose)))
    (synopsis "JSON Matching Expressions")
    (description "JMESPath (pronounced “james path”) is a Python library that
 allows one to declaratively specify how to extract elements from a JSON
@@ -8656,8 +8868,11 @@ document.")
       (base32
        "1zxczlwqy9bl27d9bc5x99mb5mcsxm350240lp5nx7014xb311lj"))))
    (build-system python-build-system)
+   (arguments
+    ;; FIXME: Many tests are failing.
+    '(#:tests? #f))
    (propagated-inputs
-    `(("python-dateutil" ,python-dateutil-2)
+    `(("python-dateutil" ,python-dateutil)
       ("python-docutils" ,python-docutils)
       ("python-jmespath" ,python-jmespath)))
    (native-inputs
@@ -8716,7 +8931,7 @@ Amazon Web Services (AWS) API.")
                (base32
                 "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
     (build-system python-build-system)
-    (propagated-inputs
+    (native-inputs
      `(("python-flake8" ,python-flake8)
        ("python-pytest" ,python-pytest)))
     (synopsis "Library for property based testing")
@@ -8733,7 +8948,8 @@ seamlessly into your existing Python unit testing work flow.")
                      (strip-python2-variant python-hypothesis))))
     (package (inherit hypothesis)
       (native-inputs
-       `(("python2-enum34" ,python2-enum34))))))
+       `(("python2-enum34" ,python2-enum34)
+         ,@(package-native-inputs hypothesis))))))
 
 (define-public python-pytest-subtesthack
   (package
@@ -9199,6 +9415,10 @@ RabbitMQ messaging server is the most popular implementation.")
                 (strip-python2-variant python-kombu))))
     (package
       (inherit kombu)
+      (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
+                   ;; It works fine on the python3 variant.
+                   #:tests? #f
+                   ,@(package-arguments kombu)))
       (native-inputs `(("python2-unittest2" ,python2-unittest2)
                 ,@(package-native-inputs kombu))))))
 
@@ -9422,7 +9642,7 @@ introspection of @code{zope.interface} instances in code.")
      '(;; The test suite relies on some non-portable Windows interfaces.
        #:tests? #f))
     (propagated-inputs
-     `(("python-dateutil-2" ,python-dateutil-2)
+     `(("python-dateutil" ,python-dateutil)
        ("python-pyicu" ,python-pyicu)))
     (synopsis "Parse and generate vCard and vCalendar files")
     (description "Vobject is intended to be a full featured Python package for
@@ -10108,6 +10328,8 @@ to occurences in strings and comments.")
         (base32
          "0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; TODO: Requires many libraries not in Guix.
     (home-page "https://github.com/ultrabug/py3status")
     (synopsis "Extensible i3status wrapper written in Python")
     (description "py3status is an i3status wrapper which extends i3status
@@ -10262,6 +10484,13 @@ to provide a high-level synchronous API on top of the libev event loop.")
                (base32
                 "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: Some tests are failing.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "./bin/trial" "twisted")))))
     (propagated-inputs
      `(("python-zope-interface" ,python-zope-interface)))
     (home-page "https://twistedmatrix.com/")
@@ -10500,7 +10729,7 @@ objects, patterned after the Mocha library for Ruby.")
        ("python-chai" ,python-chai)
        ("python-simplejson" ,python-simplejson)))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil-2)))
+     `(("python-dateutil" ,python-dateutil)))
     (home-page "https://github.com/crsmithdev/arrow/")
     (synopsis "Dates and times for Python")
     (description
@@ -10523,6 +10752,8 @@ datetime type.")
               (base32
                "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
     (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "http://github.com/jpvanhal/inflection")
     (synopsis "Python string transformation library")
     (description
@@ -10691,13 +10922,19 @@ parsing UK postcodes.")
              (base32
               "0vs0dkmg0dlaxf8w6q2i3k0i03gmp56ablldv7ci9x3nbadkn71g"))))
   (build-system python-build-system)
+  (arguments
+   '(#:phases
+     (modify-phases %standard-phases
+       (replace 'check
+         (lambda _
+           (zero? (system* "python" "-m" "unittest" "-v" "faker.tests")))))))
   (native-inputs
    `(;; For testing
      ("python-email-validator" ,python-email-validator)
      ("python-mock" ,python-mock)
      ("python-ukpostcodeparser" ,python-ukpostcodeparser)))
   (propagated-inputs
-   `(("python-dateutil" ,python-dateutil-2)
+   `(("python-dateutil" ,python-dateutil)
      ("python-six" ,python-six)))
   (home-page "https://github.com/joke2k/faker")
   (synopsis "Python package that generates fake data")
@@ -10727,6 +10964,8 @@ addresses, and phone numbers.")
                (base32
                 "1f5m28vkh4ksq3d80d8mmd2z8wxvc3mgy2pmrv2751dm2xgznm4w"))))
     (build-system python-build-system)
+    (native-inputs
+     `(("python-unidecode" ,python-unidecode)))
     (propagated-inputs
      `(("python-pyyaml" ,python-pyyaml)))
     (home-page "https://github.com/mk-fg/pretty-yaml")
@@ -10841,6 +11080,11 @@ characters, mouse support, and auto suggestions.")
           (base32
             "0c8x962ynpx001fdvp07m2q5jk4igkxbj3rmnydavphvlgxijk1v"))))
     (build-system python-build-system)
+    (arguments
+     ;; FIXME: One test fails (use "py.test" instead of 'setup.py test').
+     '(#:tests? #f))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/davidhalter/jedi")
     (synopsis
       "Autocompletion for Python that can be used for text editors")
@@ -10862,6 +11106,8 @@ characters, mouse support, and auto suggestions.")
                (base32
                 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
     (propagated-inputs
      `(("python-docopt" ,python-docopt)
        ("python-jedi" ,python-jedi)
@@ -10967,6 +11213,13 @@ relays publish about themselves.")
           (base32
             "0k1nfdrxxkdlv4zgaqsdv8li0pj3gbh2pyxw8q2bsg6f9490amyn"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
     (home-page
       "https://github.com/pyserial/pyserial")
     (synopsis "Python Serial Port Bindings")
@@ -11286,7 +11539,7 @@ List.  Forked from and using the same API as the publicsuffix package.")
        ("python-coverage" ,python-coverage)))
     (propagated-inputs
      `(("python-six" ,python-six)
-       ("python-dateutil-2" ,python-dateutil-2)))
+       ("python-dateutil" ,python-dateutil)))
     (arguments
      `(#:phases (modify-phases %standard-phases
         ;; The tests are normally executed via `make test`, but the PyPi
@@ -11937,7 +12190,7 @@ useful as a validator for JSON data.")
             "1k5mjg9iqbjfslb5prrsfz7dhlvi6s35p1jxq8dm87w1b7dn5i2g"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-dateutil-2" ,python-dateutil-2)))
+     `(("python-dateutil" ,python-dateutil)))
     (home-page
       "https://bitbucket.org/nielsenb/aniso8601")
     (synopsis
@@ -12134,10 +12387,7 @@ python-axolotl.")
            (lambda _
              (for-each delete-file-recursively
                        '("axolotl/tests" "build/lib/axolotl/tests"))
-             #t)))
-       ;; Prevent creation of the egg. This works around
-       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765
-       #:configure-flags '("--root=/")))
+             #t)))))
     (propagated-inputs
      `(("python-axolotl-curve25519" ,python-axolotl-curve25519)
        ("python-dateutil" ,python-dateutil)
@@ -12165,6 +12415,12 @@ asynchronous messaging environments.")
           (base32
             "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "test3.py")))))))
     (home-page "http://github.com/gfxmonk/termstyle")
     (synopsis "Console text coloring for Python")
     (description "This package provides console text coloring for Python.")
@@ -12215,6 +12471,13 @@ asynchronous messaging environments.")
           (base32
             "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
     (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; FIXME: 35/882 tests failing.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       (zero? (system* "nosetests")))))))
     (propagated-inputs
       `(("python-aniso8601" ,python-aniso8601)
         ("python-flask" ,python-flask)
@@ -12295,6 +12558,9 @@ specs from your Flask-Restful projects.")
           (base32
             "11bwiw6j0nilgz81xnw6f1npyga3prp8asjqrm87cdr3ria5l03x"))))
     (build-system python-build-system)
+    (native-inputs
+     `(("python-pexpect" ,python-pexpect)
+       ("tcsh" ,tcsh)))
     (home-page "https://github.com/kislyuk/argcomplete")
     (synopsis "Shell tab completion for Python argparse")
     (description "argcomplete provides extensible command line tab completion
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 1dd23c28e3..97e6b881cc 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -315,6 +315,18 @@ ideal (e.g. in LV2 implementations or embedded applications).")
           (base32
             "0kvaf332cqbi47rqzlpdx4mbkvw12mkrzkj8n9l19wk713d4py9w"))))
     (build-system python-build-system)
+    (arguments
+     '(;; FIXME: Three test failures. Try uncommenting the below next update.
+       #:tests? #f))
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;   (replace 'check
+       ;;     (lambda _
+       ;;       ;; Run tests from the build directory so python3 only
+       ;;       ;; sees the installed 2to3 version.
+       ;;       (zero? (system* "nosetests" "--where=./build/src")))))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
     (propagated-inputs
       `(("python-html5lib" ,python-html5lib)
         ("python-isodate" ,python-isodate)
@@ -329,12 +341,4 @@ powerful language for representing information.")
                         "See LICENSE in the distribution."))))
 
 (define-public python2-rdflib
-  (let ((base (package-with-python2 python-rdflib)))
-    (package
-      (inherit base)
-      (inputs
-        (append (package-inputs base)
-                `(("python2-nose" ,python2-nose))))
-      (arguments
-        `(#:python ,python-2
-          #:tests? #f))))) ; 3 tests fail, also outside Guix
+  (package-with-python2 python-rdflib))
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 20897860d2..8e648c4031 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -165,6 +165,9 @@ insert mode and command mode where keybindings have different functions.")
                   (string-append "'" ncurses "/bin/tput'"))))
              #t)))))
     (inputs `(("ncurses" ,ncurses)))
+    (native-inputs
+     ;; For tests.
+     `(("python-requests" ,python-requests)))
     (home-page "https://asciinema.org")
     (synopsis "Terminal session recorder")
     (description
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index fdd75a4ecd..8833b17e42 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1172,7 +1172,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
      `(;; for the tests
        ("python2-six" ,python2-six)))
     (propagated-inputs
-     `(("python2-dateutil" ,python2-dateutil-2)
+     `(("python2-dateutil" ,python2-dateutil)
        ("python2-futures" ,python2-futures)
        ("python2-rauth" ,python2-rauth)
        ("python2-swiftclient" ,python2-swiftclient)))
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 0ce51aaf88..6b13cf169b 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -247,6 +247,14 @@ DNS domain name queries.")
         (base32
          "0a92lk8790dpp9j64vb6p4sazax0x3nby01lnfll7mxs1hx6n27q"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-paths
+           (lambda _
+             (substitute* "sshoot/tests/test_manager.py"
+               (("/bin/sh") (which "sh")))
+             #t)))))
     (inputs
      `(("python-argcomplete" ,python-argcomplete)
        ("python-prettytable" ,python-prettytable)
diff --git a/guix/build/python-build-system.scm b/guix/build/python-build-system.scm
index 3f280b0ac0..dd07986b94 100644
--- a/guix/build/python-build-system.scm
+++ b/guix/build/python-build-system.scm
@@ -137,11 +137,15 @@
       ;; (given with `package_dir`). This will by copied to the output, too,
       ;; so we need to remove.
       (let ((before (find-files "build" "\\.egg-info$" #:directories? #t)))
-        (call-setuppy test-target '() use-setuptools?)
-        (let* ((after (find-files "build" "\\.egg-info$" #:directories? #t))
-               (inter (lset-difference eqv? after before)))
-          (for-each delete-file-recursively inter)))
-    #t))
+        (if (call-setuppy test-target '() use-setuptools?)
+            (let* ((after (find-files "build" "\\.egg-info$" #:directories? #t))
+                   (inter (lset-difference eqv? after before)))
+              (for-each delete-file-recursively inter)
+              #t)
+            #f))
+      (begin
+        (format #t "test suite not run~%")
+        #t)))
 
 (define (get-python-version python)
   (let* ((version     (last (string-split python #\-)))