summaryrefslogtreecommitdiff
path: root/gnu/packages/python.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/python.scm')
-rw-r--r--gnu/packages/python.scm394
1 files changed, 329 insertions, 65 deletions
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index f1dc2da050..3f1328ddf0 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -485,11 +485,10 @@ pidof, tty, taskset, pmap.")
`(("python-py-bcrypt" ,python-py-bcrypt)))
(arguments
`(#:phases
- (alist-cons-before
- 'check 'set-PYTHON_EGG_CACHE
- ;; some tests require access to "$HOME/.cython"
- (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp"))
- %standard-phases)))
+ (modify-phases %standard-phases
+ (add-before 'check 'set-PYTHON_EGG_CACHE
+ ;; some tests require access to "$HOME/.cython"
+ (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
(home-page "https://bitbucket.org/ecollins/passlib")
(synopsis
"Comprehensive password hashing framework")
@@ -1079,12 +1078,10 @@ multiple Unicode code points, e.g. \"G\" + acute-accent)
("gmp" ,gmp)))
(arguments
`(#:phases
- (alist-cons-before
- 'build 'set-build-env
- ;; pycrypto runs an autoconf configure script behind the scenes
- (lambda _
- (setenv "CONFIG_SHELL" (which "bash")))
- %standard-phases)))
+ (modify-phases %standard-phases
+ (add-before 'build 'set-build-env
+ ;; pycrypto runs an autoconf configure script behind the scenes
+ (lambda _ (setenv "CONFIG_SHELL" (which "bash")) #t)))))
(home-page "http://www.pycrypto.org/")
(synopsis "Cryptographic modules for Python")
(description
@@ -1496,11 +1493,11 @@ other Python program.")
(build-system python-build-system)
(arguments
`(#:python ,python-2
- #:phases (alist-replace
- 'check
- (lambda _
- (zero? (system* "./test.sh")))
- %standard-phases)))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (zero? (system* "./test.sh")))))))
(home-page "http://www.alcyone.com/software/empy/")
(synopsis "Templating system for Python")
(description
@@ -1843,7 +1840,7 @@ standard library.")
(define-public python2-unittest2
(package (inherit python-unittest2)
(name "python2-unittest2")
- (version "0.5.1")
+ (version "1.1.0")
(source
(origin
(method url-fetch)
@@ -1852,7 +1849,12 @@ standard library.")
version ".tar.gz"))
(sha256
(base32
- "0wbs4i4x3x7klr3v35ss6p9mcqz883i1xgcpkhvl7n2lyv6yhpda"))))
+ "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))
+ (patches
+ (search-patches "python2-unittest2-remove-argparse.patch"))))
+ (propagated-inputs
+ `(("python2-six" ,python2-six)
+ ("python2-traceback2" ,python2-traceback2)))
(arguments
`(#:python ,python-2
#:tests? #f)))) ; no setup.py test command
@@ -3390,6 +3392,30 @@ sources.")
(define-public python2-sphinx-rtd-theme
(package-with-python2 python-sphinx-rtd-theme))
+(define-public python-guzzle-sphinx-theme
+ (package
+ (name "python-guzzle-sphinx-theme")
+ (version "0.7.11")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "guzzle_sphinx_theme" version))
+ (sha256
+ (base32
+ "1rnkzrrsbnifn3vsb4pfaia3nlvgvw6ndpxp7lzjrh23qcwid34v"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-sphinx" ,python-sphinx)))
+ (home-page "https://github.com/guzzle/guzzle_sphinx_theme")
+ (synopsis "Sphinx theme used by Guzzle")
+ (description "This package provides guzzle_sphinx_theme, a theme for the
+Sphinx documentation system, used by @uref{http://docs.guzzlephp.org, Guzzle}
+and several other projects.")
+ (license license:expat)))
+
+(define-public python2-guzzle-sphinx-theme
+ (package-with-python2 python-guzzle-sphinx-theme))
+
(define-public python-rst.linker
(package
(name "python-rst.linker")
@@ -3717,24 +3743,27 @@ producing implementations of dynamic languages, emphasizing a clean separation
between language specification and implementation aspects.")
(license license:expat)))
+;; NOTE: when upgrading numpy please make sure that python-pandas and
+;; python-scipy still build, as these three packages are often used together.
(define-public python-numpy
(package
(name "python-numpy")
- (version "1.13.1")
+ (version "1.12.0")
(source
(origin
(method url-fetch)
- (uri (pypi-uri "numpy" version ".zip"))
+ (uri (string-append
+ "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
- "1fsgkhh1vdkhmlz8vmdgxnj9n9yaanckxxzz9s0b4p08fqvjic69"))))
+ "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d"))))
(build-system python-build-system)
(inputs
`(("openblas" ,openblas)
("lapack" ,lapack)))
(native-inputs
- `(("unzip" ,unzip)
- ("python-cython" ,python-cython)
+ `(("python-cython" ,python-cython)
("python-nose" ,python-nose)
("gfortran" ,gfortran)))
(arguments
@@ -3742,8 +3771,6 @@ between language specification and implementation aspects.")
(modify-phases %standard-phases
(add-before 'build 'set-environment-variables
(lambda* (#:key inputs #:allow-other-keys)
- ;; numpy's distutils uses $SHELL to run external commands.
- (setenv "SHELL" "bash")
(call-with-output-file "site.cfg"
(lambda (port)
(format port
@@ -3762,6 +3789,11 @@ include_dirs = ~a/include
(assoc-ref inputs "openblas")
(assoc-ref inputs "lapack")
(assoc-ref inputs "lapack"))))
+ ;; Make /gnu/store/...-bash-.../bin/sh the default shell, instead of
+ ;; /bin/sh.
+ (substitute* "numpy/distutils/exec_command.py"
+ (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
+ (string-append match-start (assoc-ref inputs "bash") match-end)))
;; Use "gcc" executable, not "cc".
(substitute* "numpy/distutils/system_info.py"
(("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
@@ -3789,6 +3821,26 @@ capabilities.")
(define-public python2-numpy
(package-with-python2 python-numpy))
+(define-public python-numpy-next
+ (package (inherit python-numpy)
+ (name "python-numpy-next")
+ (version "1.13.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "numpy" version ".zip"))
+ (sha256
+ (base32
+ "1fsgkhh1vdkhmlz8vmdgxnj9n9yaanckxxzz9s0b4p08fqvjic69"))))
+ (native-inputs
+ `(("unzip" ,unzip)
+ ("python-cython" ,python-cython)
+ ("python-nose" ,python-nose)
+ ("gfortran" ,gfortran)))))
+
+(define-public python2-numpy-next
+ (package-with-python2 python-numpy-next))
+
(define-public python-munch
(package
(name "python-munch")
@@ -4139,14 +4191,14 @@ that client code uses to construct the grammar directly in Python code.")
(define-public python-numexpr
(package
(name "python-numexpr")
- (version "2.6.1")
+ (version "2.6.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "numexpr" version))
(sha256
(base32
- "01lsja72m32z0i5p8rwxbfyzk4mplh72k2a140nwh8vv4wpyfbnv"))))
+ "1kpnbb5d5n927113zccfibn16z7gidjipyac6kbbhzs0lnizkgph"))))
(build-system python-build-system)
(arguments `(#:tests? #f)) ; no tests included
(propagated-inputs
@@ -4666,10 +4718,10 @@ as the original project seems to have been abandoned circa 2007.")
("python-pytest" ,python-pytest)
("python-mock" ,python-mock))) ;for tests
(arguments
- `(#:phases (alist-replace
- 'check
- (lambda _ (zero? (system* "py.test")))
- %standard-phases)))
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (zero? (system* "py.test")))))))
(home-page "http://www.sqlalchemy.org")
(synopsis "Database abstraction library")
(description
@@ -4876,20 +4928,21 @@ You might also want to install the following optional dependencies:
(define-public python-alembic
(package
(name "python-alembic")
- (version "0.8.10")
+ (version "0.9.5")
(source
(origin
(method url-fetch)
(uri (pypi-uri "alembic" version))
(sha256
(base32
- "06br9sfqypnjlal6fsbnky3zb0askwcn3diz8k3kwa0qcblm0fqf"))))
+ "01gx2syqbaxh4hr9pf7pxhlb6p36qaf99140dy19lsx1paxb9p4b"))))
(build-system python-build-system)
(native-inputs
`(("python-mock" ,python-mock)
("python-pytest-cov" ,python-pytest-cov)))
(propagated-inputs
- `(("python-sqlalchemy" ,python-sqlalchemy)
+ `(("python-dateutil" ,python-dateutil)
+ ("python-sqlalchemy" ,python-sqlalchemy)
("python-mako" ,python-mako)
("python-editor" ,python-editor)))
(home-page "http://bitbucket.org/zzzeek/alembic")
@@ -4906,17 +4959,17 @@ SQLAlchemy Database Toolkit for Python.")
(define-public python-autopep8
(package
(name "python-autopep8")
- (version "1.2.4")
+ (version "1.3.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "autopep8" version))
(sha256
(base32
- "18parm383lfn42a00wklv3qf20p4v277f1x3cn58x019dqk1xqrq"))))
+ "1p9pa1ffg4iy96l918808jggg9a69iaka5awmj8xid36yc5mk0ky"))))
(build-system python-build-system)
(propagated-inputs
- `(("python-pep8" ,python-pep8)))
+ `(("python-pycodestyle" ,python-pycodestyle)))
(home-page "https://github.com/hhatto/autopep8")
(synopsis "Format Python code according to the PEP 8 style guide")
(description
@@ -7520,10 +7573,7 @@ reading and writing MessagePack data.")
(source
(origin
(method url-fetch)
- (uri (string-append
- "https://pypi.python.org/packages/source/n/netaddr/netaddr-"
- version
- ".tar.gz"))
+ (uri (pypi-uri "netaddr" version))
(sha256
(base32
"1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
@@ -8583,10 +8633,10 @@ automatically detect a wide range of file encodings.")
(native-inputs
`(("python-pytest" ,python-pytest)))
(arguments
- `(#:phases (alist-replace
- 'check
- (lambda _ (zero? (system* "py.test")))
- %standard-phases)))
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (zero? (system* "py.test")))))))
(home-page "http://docopt.org")
(synopsis "Command-line interface description language for Python")
(description "This library allows the user to define a command-line
@@ -9243,16 +9293,13 @@ for atomic file system operations.")
(define-public python-requests-toolbelt
(package
(name "python-requests-toolbelt")
- (version "0.6.2")
+ (version "0.8.0")
(source (origin
(method url-fetch)
- (uri (string-append
- "https://pypi.python.org/packages/"
- "e1/a4/a94c037bc72ad70441aff1403d3243510d2542ddca7759faaeffeb11aefe/"
- "requests-toolbelt-" version ".tar.gz"))
+ (uri (pypi-uri "requests-toolbelt" version))
(sha256
(base32
- "15q9nrgp85nqlr4kdz1zvj8z2npafi2sr12y7fqgxbkq28j1aci6"))))
+ "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
(build-system python-build-system)
(native-inputs
`(("python-betamax" ,python-betamax)
@@ -9266,6 +9313,9 @@ with python-requests.")
(home-page "https://github.com/sigmavirus24/requests-toolbelt")
(license license:asl2.0)))
+(define-public python2-requests-toolbelt
+ (package-with-python2 python-requests-toolbelt))
+
(define-public python-click-threading
(package
(name "python-click-threading")
@@ -9840,10 +9890,11 @@ concurrent.futures package from Python 3.2")
("python-mock" ,python-mock)
("python-tornado" ,python-tornado)))
(propagated-inputs
- `(;; extra packages for https security
+ `(;; These 5 inputs are used to build urrlib3[secure]
("python-certifi" ,python-certifi)
- ("python-ndg-httpsclient" ,python-ndg-httpsclient)
- ("python-pyasn1" ,python-pyasn1)
+ ("python-cryptography" ,python-cryptography) ;
+ ("python-idna" ,python-idna)
+ ("python-ipaddress" ,python-ipaddress)
("python-pyopenssl" ,python-pyopenssl)))
(home-page "https://urllib3.readthedocs.org/")
(synopsis "HTTP library with thread-safe connection pooling")
@@ -9926,14 +9977,14 @@ Pytest but stripped of Pytest specific details.")
(define-public python-tox
(package
(name "python-tox")
- (version "2.8.0")
+ (version "2.8.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "tox" version))
(sha256
(base32
- "00lrql2cfzhb712v70inac6mrgdv8s8fmvz7qpggkk623hkm2pgc"))))
+ "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
(build-system python-build-system)
(arguments
;; FIXME: Tests require pytest-timeout, which itself requires
@@ -10020,14 +10071,14 @@ interface to the Amazon Web Services (AWS) API.")
(define-public awscli
(package
(name "awscli")
- (version "1.11.151")
+ (version "1.11.164")
(source
(origin
(method url-fetch)
(uri (pypi-uri name version))
(sha256
(base32
- "0h6rirbfy0f9cxm7ikll0kr720dircfmxf2vslmhn4n325831wsp"))))
+ "05r8cw7i7ff6barpmyxxk3i52gzb1xyxwj8isynmiyqlmk3c9r8w"))))
(build-system python-build-system)
(propagated-inputs
`(("python-colorama" ,python-colorama)
@@ -11468,8 +11519,21 @@ to occurrences in strings and comments.")
(base32
"0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
(build-system python-build-system)
+ (inputs
+ `(("file" ,file)))
(arguments
- '(#:tests? #f)) ; TODO: Requires many libraries not in Guix.
+ '(#:phases
+ (modify-phases %standard-phases
+ ;; 'file' is used for detection of configuration file encoding
+ ;; let's make link the dependency to particular input
+ (add-before 'build 'patch-file-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((file-path (assoc-ref inputs "file")))
+ (substitute* "py3status/parse_config.py"
+ (("check_output\\(\\['file'")
+ (string-append "check_output(['" file-path "/bin/file'")))
+ #t))))
+ #: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
@@ -11913,13 +11977,13 @@ objects, patterned after the Mocha library for Ruby.")
(define-public python-arrow
(package
(name "python-arrow")
- (version "0.8.0")
+ (version "0.10.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "arrow" version))
(sha256
(base32
- "1bz7hkdgpqcjs866y58z8jywpy7al0f4rxdr00bh2l5qddyw245j"))))
+ "08n7q2l69hlainds1byd4lxhwrq7zsw7s640zkqc3bs5jkq0cnc0"))))
(build-system python-build-system)
(native-inputs
`(;; For testing
@@ -13400,14 +13464,14 @@ useful as a validator for JSON data.")
(define-public python-aniso8601
(package
(name "python-aniso8601")
- (version "1.1.0")
+ (version "1.3.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "aniso8601" version))
(sha256
(base32
- "1k5mjg9iqbjfslb5prrsfz7dhlvi6s35p1jxq8dm87w1b7dn5i2g"))))
+ "1waj54iv3n3lw1fapbz8a93yjgrybgpc86wif5baxdh1arpj9df3"))))
(build-system python-build-system)
(propagated-inputs
`(("python-dateutil" ,python-dateutil)))
@@ -13419,6 +13483,9 @@ useful as a validator for JSON data.")
"This package contains a library for parsing ISO 8601 datetime strings.")
(license license:bsd-3)))
+(define-public python2-aniso8601
+ (package-with-python2 python-aniso8601))
+
(define-public python-flask-restful
(package
(name "python-flask-restful")
@@ -15888,14 +15955,14 @@ complex datatypes to and from native Python datatypes.")
(define-public python-apispec
(package
(name "python-apispec")
- (version "0.22.0")
+ (version "0.25.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "apispec" version))
(sha256
(base32
- "0y3jxmgp2d24am3hxl40f5rw9abb0r8037sagax3dv64h4n1azwq"))))
+ "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
(build-system python-build-system)
(propagated-inputs
`(("python-pyyaml" ,python-pyyaml)))
@@ -16302,3 +16369,200 @@ Templates.")
(define-public python2-uritemplate
(package-with-python2 python-uritemplate))
+
+(define-public python-pydiff
+ (package
+ (name "python-pydiff")
+ (version "0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pydiff" version))
+ (sha256
+ (base32
+ "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/myint/pydiff")
+ (synopsis "Library to diff two Python files at the bytecode level")
+ (description
+ "@code{pydiff} makes it easy to look for actual code changes while
+ignoring formatting changes.")
+ (license license:expat)))
+
+(define-public python2-pydiff
+ (package-with-python2 python-pydiff))
+
+(define-public python-nose-timer
+ (package
+ (name "python-nose-timer")
+ (version "0.7.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "nose-timer" version))
+ (patches
+ (search-patches
+ ;; This patch will not be needed in the next version.
+ ;; It is taken from the master branch.
+ "python-nose-timer-drop-ordereddict.patch"))
+ (sha256
+ (base32
+ "1s32ymsnby8lz2qk55ifj9zi50dqcg6swnj5cz2rmwxg2jsslsxp"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-nose" ,python-nose)
+ ("python-termcolor" ,python-termcolor)))
+ (home-page "https://github.com/mahmoudimus/nose-timer")
+ (synopsis "Timer plugin for nosetests")
+ (description "Shows how much time was needed to run individual tests.")
+ (license license:expat)))
+
+(define-public python2-nose-timer
+ (package-with-python2 python-nose-timer))
+
+(define-public python-tqdm
+ (package
+ (name "python-tqdm")
+ (version "4.15.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "tqdm" version))
+ (sha256
+ (base32
+ "0lwrmby8qz23gvqwkpivfrv4q8nfh90cz9ml6slwvwmcxxsdrhbf"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-flake8" ,python-flake8)
+ ("python-nose" ,python-nose)
+ ("python-nose-timer" ,python-nose-timer)
+ ("python-coverage" ,python-coverage)
+ ("python-virtualenv" ,python-virtualenv)))
+ (home-page "https://github.com/tqdm/tqdm")
+ (synopsis "Fast, extensible progress meter")
+ (description
+ "Make loops show a progress bar on the console by just wrapping any
+iterable with @code{|tqdm(iterable)|}. Offers many options to define
+design and layout.")
+ (license (list license:mpl2.0 license:expat))))
+
+(define-public python2-tqdm
+ (package-with-python2 python-tqdm))
+
+(define-public python-pkginfo
+ (package
+ (name "python-pkginfo")
+ (version "1.4.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pkginfo" version))
+ (sha256
+ (base32
+ "17pqjfpq3c6xzdmk8pski6jcjgjv78q00zjf2bgzb668pzm6l6mv"))))
+ (build-system python-build-system)
+ (arguments
+ ;; The tests are broken upstream.
+ '(#:tests? #f))
+ (home-page
+ "https://code.launchpad.net/~tseaver/pkginfo/trunk")
+ (synopsis
+ "Query metadatdata from sdists, bdists, and installed packages")
+ (description
+ "API to query the distutils metadata written in @file{PKG-INFO} inside a
+source distriubtion (an sdist) or a binary distribution (e.g., created by
+running bdist_egg). It can also query the EGG-INFO directory of an installed
+distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
+created by running @code{python setup.py develop}).")
+ (license license:expat)))
+
+(define-public python2-pkginfo
+ (package-with-python2 python-pkginfo))
+
+(define-public python-twine
+ (package
+ (name "python-twine")
+ (version "1.9.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "twine" version))
+ (sha256
+ (base32
+ "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-tqdm" ,python-tqdm)
+ ("python-pkginfo", python-pkginfo)
+ ("python-requests" ,python-requests)
+ ("python-requests-toolbelt" ,python-requests-toolbelt)))
+ (home-page "https://github.com/pypa/twine")
+ (synopsis "Collection of utilities for interacting with PyPI")
+ (description
+ "@code{twine} currently supports registering projects and uploading
+distributions. It authenticates the user over HTTPS, allows them to pre-sign
+their files and supports any packaging format (including wheels).")
+ (license license:asl2.0)))
+
+(define-public python2-twine
+ (package-with-python2 python-twine))
+
+(define-public python-linecache2
+ (package
+ (name "python-linecache2")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "linecache2" version))
+ (sha256
+ (base32
+ "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
+ (build-system python-build-system)
+ (arguments
+ `(;; The tests depend on unittest2, and our version is a bit too old.
+ #:tests? #f))
+ (native-inputs
+ `(("python-pbr" ,python-pbr)))
+ (home-page
+ "https://github.com/testing-cabal/linecache2")
+ (synopsis "Backports of the linecache module")
+ (description
+ "The linecache module allows one to get any line from any file, while
+attempting to optimize internally, using a cache, the common case where many
+lines are read from a single file.")
+ (license license:psfl)))
+
+(define-public python2-linecache2
+ (package-with-python2 python-linecache2))
+
+(define-public python-traceback2
+ (package
+ (name "python-traceback2")
+ (version "1.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "traceback2" version))
+ (sha256
+ (base32
+ "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
+ (build-system python-build-system)
+ (arguments
+ `(;; python-traceback2 and python-unittest2 depend on one another.
+ #:tests? #f))
+ (native-inputs
+ `(("python-pbr" ,python-pbr)))
+ (propagated-inputs
+ `(("python-linecache2" ,python-linecache2)))
+ (home-page
+ "https://github.com/testing-cabal/traceback2")
+ (synopsis "Backports of the traceback module")
+ (description
+ "This module provides a standard interface to extract, format and print
+stack traces of Python programs. It exactly mimics the behavior of the Python
+interpreter when it prints a stack trace.")
+ (license license:psfl)))
+
+(define-public python2-traceback2
+ (package-with-python2 python-traceback2))