diff options
Diffstat (limited to 'gnu/packages/python.scm')
-rw-r--r-- | gnu/packages/python.scm | 583 |
1 files changed, 380 insertions, 203 deletions
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 91e1a8bf28..6e5e804c34 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -26,7 +26,7 @@ ;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org> ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org> ;;; Copyright © 2016 David Craven <david@craven.ch> -;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com> +;;; Copyright © 2016, 2017, 2018 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at> ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org> ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com> @@ -139,7 +139,7 @@ (define-public python-2.7 (package (name "python") - (version "2.7.13") + (version "2.7.14") (source (origin (method url-fetch) @@ -147,12 +147,12 @@ version "/Python-" version ".tar.xz")) (sha256 (base32 - "0cgpk3zk0fgpji59pb4zy9nzljr70qzgv1vpz5hq5xw2d2c47m9m")) + "0rka541ys16jwzcnnvjp2v12m4cwgd2jp6wj4kj511p715pb5zvi")) (patches (search-patches "python-2.7-search-paths.patch" "python-2-deterministic-build-info.patch" "python-2.7-site-prefixes.patch" "python-2.7-source-date-epoch.patch" - "python-2.7-getentropy-on-old-kernels.patch")) + "python-2.7-adjust-tests.patch")) (modules '((guix build utils))) ;; suboptimal to delete failing tests here, but if we delete them in the ;; arguments then we need to make sure to strip out that phase when it @@ -210,6 +210,7 @@ '("Lib/subprocess.py" "Lib/popen2.py" "Lib/distutils/tests/test_spawn.py" + "Lib/test/support/__init__.py" "Lib/test/test_subprocess.py")) (("/bin/sh") (which "sh"))) @@ -335,28 +336,28 @@ data types.") ;; Current 2.x version. (define-public python-2 python-2.7) -(define-public python-3.5 +(define-public python-3.6 (package (inherit python-2) - (version "3.5.3") + (version "3.6.3") (source (origin (method url-fetch) (uri (string-append "https://www.python.org/ftp/python/" version "/Python-" version ".tar.xz")) (patches (search-patches "python-fix-tests.patch" - "python-3.5-fix-tests.patch" - "python-3.5-getentropy-on-old-kernels.patch" + "python-3-fix-tests.patch" "python-3-deterministic-build-info.patch" "python-3-search-paths.patch")) (patch-flags '("-p0")) (sha256 (base32 - "1c6v1n9nz4mlx9mw1125fxpmbrgniqdbbx9hnqx44maqazb2mzpf")) + "1nl1raaagr4car787a2hmjv2dw6gqny53xfd6wisbgx4r5kxk9yd")) (snippet '(begin (for-each delete-file - '("Lib/ctypes/test/test_win32.py" ; fails on aarch64 - "Lib/test/test_fcntl.py")) + '("Lib/ctypes/test/test_structures.py" ; fails on aarch64 + "Lib/ctypes/test/test_win32.py" ; fails on aarch64 + "Lib/test/test_fcntl.py")) ; fails on aarch64 #t)))) (arguments (substitute-keyword-arguments (package-arguments python-2) ((#:tests? _) #t))) @@ -368,7 +369,7 @@ data types.") "/site-packages")))))))) ;; Current 3.x version. -(define-public python-3 python-3.5) +(define-public python-3 python-3.6) ;; Current major version. (define-public python python-3) @@ -1005,18 +1006,24 @@ from the Python interpreter, or as a small part of a larger application.") (define-public python-six (package (name "python-six") - (version "1.10.0") + (version "1.11.0") (source (origin (method url-fetch) (uri (pypi-uri "six" version)) (sha256 (base32 - "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh")))) + "1scqzwc51c875z23phj48gircqjgnn3af8zy2izjwmnlxrxsgs3h")))) (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (zero? (system* "py.test" "-v"))))))) (native-inputs `(("python-py" ,python-py) - ("python-pytest" ,python-pytest))) + ("python-pytest" ,python-pytest-bootstrap))) (home-page "https://pypi.python.org/pypi/six/") (synopsis "Python 2 and 3 compatibility utilities") (description @@ -1060,24 +1067,48 @@ human-friendly syntax.") (define-public python-pandas (package (name "python-pandas") - (version "0.19.2") + (version "0.22.0") (source (origin (method url-fetch) (uri (pypi-uri "pandas" version)) (sha256 - (base32 "0540cnbwy2hc4hv2sxfs8i47xi91qzvzxfn80dl785ibiicly3vg")) - (patches - (search-patches "python-pandas-skip-failing-tests.patch")))) + (base32 "0v0fi2i10kwnmlpsl6f1fgajcpx3q6766qf6xqi5kw3ivn8l1aa4")))) (build-system python-build-system) + (arguments + `(#:modules ((guix build utils) + (guix build python-build-system) + (ice-9 ftw) + (srfi srfi-26)) + #:phases (modify-phases %standard-phases + (replace 'check + (lambda _ + (let ((build-directory + (string-append + (getcwd) "/build/" + (car (scandir "build" + (cut string-prefix? "lib." <>)))))) + (with-directory-excursion build-directory + ;; Delete tests that require "moto" which is not yet in Guix. + (for-each delete-file + '("pandas/tests/io/conftest.py" + "pandas/tests/io/json/test_compression.py" + "pandas/tests/io/test_excel.py")) + (invoke "pytest" "-v" "pandas" "-k" + (string-append + "not network and not disabled" + ;; XXX: Due to the deleted tests above. + " and not test_read_s3_jsonl"))))))))) (propagated-inputs `(("python-numpy" ,python-numpy) ("python-pytz" ,python-pytz) ("python-dateutil" ,python-dateutil))) (native-inputs - `(("python-nose" ,python-nose) - ("python-cython" ,python-cython))) - (home-page "http://pandas.pydata.org") + `(("python-cython" ,python-cython) + ("python-lxml" ,python-lxml) + ("python-nose" ,python-nose) + ("python-pytest" ,python-pytest))) + (home-page "https://pandas.pydata.org") (synopsis "Data structures for data analysis, time series, and statistics") (description "Pandas is a Python package providing fast, flexible, and expressive data @@ -1308,6 +1339,28 @@ bug tracker.") (home-page "http://www.liquidx.net/pybugz/") (license license:gpl2))) +(define-public python2-enum + (package + (name "python2-enum") + (version "0.4.6") + (source (origin + (method url-fetch) + (uri (pypi-uri "enum" version)) + (sha256 + (base32 + "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl")))) + (build-system python-build-system) + (arguments + `(#:python ,python-2)) + (home-page "http://pypi.python.org/pypi/enum/") + (synopsis "Robust enumerated type support in Python") + (description + "This provides a module for robust enumerations in Python. It has +been superseded by the Python standard library and is provided only for +compatibility.") + ;; Choice of either license. + (license (list license:gpl3+ license:psfl)))) + (define-public python-enum34 (package (name "python-enum34") @@ -1533,17 +1586,62 @@ matching them against a list of media-ranges.") "@code{pafy} is a python library to retrieve YouTube content and metadata.") (license license:lgpl3+))) +(define-public python2-funcsigs + (package + (name "python2-funcsigs") + (version "1.0.2") + (source (origin + (method url-fetch) + (uri (pypi-uri "funcsigs" version)) + (sha256 + (base32 + "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7")))) + (build-system python-build-system) + (arguments + `(#:python ,python-2)) + (native-inputs + `(("python2-unittest2" ,python2-unittest2))) + (home-page "http://funcsigs.readthedocs.org") + (synopsis "Python function signatures from PEP362") + (description + "Backport of @code{funcsigs} which was introduced in Python 3.3.") + (license license:asl2.0))) + +(define-public python-pafy + (package + (name "python-pafy") + (version "0.5.3.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pafy" version)) + (sha256 + (base32 + "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim")))) + (build-system python-build-system) + (arguments + `(#:tests? #f)) ; Currently pafy can not find itself in the tests + (propagated-inputs + ;; Youtube-dl is a python package which is imported in the file + ;; "backend_youtube_dl.py", therefore it needs to be propagated. + `(("youtube-dl" ,youtube-dl))) + (home-page "https://np1.github.io/pafy/") + (synopsis "Retrieve YouTube content and metadata") + (description + "@code{pafy} is a python library to retrieve YouTube content and metadata.") + (license license:lgpl3+))) + (define-public python-py (package (name "python-py") - (version "1.4.32") + (version "1.4.34") (source (origin (method url-fetch) (uri (pypi-uri "py" version)) (sha256 (base32 - "19s1pql9pq85h1qzsdwgyb8a3k1qgkvh33b02m8kfqhizz8rzf64")))) + "1qyd5z0hv8ymxy84v5vig3vps2fvhcf4bdlksb3r03h549fmhb8g")))) (build-system python-build-system) (arguments ;; FIXME: "ImportError: 'test' module incorrectly imported from @@ -1680,7 +1778,10 @@ files.") "02qkfpykbq35id8glfgwc38yc430427yd05z1wc5cnld8zgicmgi")))) (build-system python-build-system) (arguments - `(#:phases + `(;; The tests are fragile, depending on a specific version of pytest: + ;; <https://github.com/pallets/click/issues/823> + #:tests? #f + #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-paths (lambda* (#:key inputs #:allow-other-keys) @@ -1689,10 +1790,7 @@ files.") (substitute* "click/_unicodefun.py" (("'locale'") (string-append "'" glibc "/bin/locale'")))) - #t)) - (replace 'check - (lambda _ - (zero? (system* "make" "test"))))))) + #t))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "http://click.pocoo.org") @@ -1913,7 +2011,7 @@ somewhat intelligible.") #t)))) (build-system python-build-system) (native-inputs - `(("python-pytest" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov) ("python-pytest-runner" ,python-pytest-runner))) (home-page "https://github.com/progrium/pyjwt") @@ -2075,18 +2173,6 @@ for Python.") (base32 "1zzrkywhziqffrzks14kzixz7nd4yh2vc0fb04a68vfd2ai03anx")))) (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - ;; These files cannot be built with Python < 3.6. See - ;; https://github.com/pallets/jinja/issues/655 - ;; FIXME: Remove this when the "python" package is upgraded. - (add-after 'unpack 'delete-incompatible-files - (lambda _ - (for-each delete-file - '("jinja2/asyncsupport.py" - "jinja2/asyncfilters.py")) - #t))))) (propagated-inputs `(("python-markupsafe" ,python-markupsafe))) (home-page "http://jinja.pocoo.org/") @@ -2337,7 +2423,7 @@ sources.") `(("python-sphinxcontrib-websupport" ,python-sphinxcontrib-websupport) ,@(package-propagated-inputs python-sphinx))) (native-inputs - `(("python-pytest" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("imagemagick" ,imagemagick) ; for "convert" ,@(package-native-inputs python-sphinx))) (properties '()))) @@ -2355,7 +2441,7 @@ sources.") (base32 "0kw1axswbvaavr8ggyf4qr6hnisnrzlbkkcdada69vk1x9xjassg")))) (native-inputs - `(("python-pytest" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ,@(package-native-inputs python-sphinx))))) (define-public python2-sphinx @@ -2649,16 +2735,16 @@ between language specification and implementation aspects.") (define-public python-numpy (package (name "python-numpy") - (version "1.12.0") + (version "1.14.0") (source (origin (method url-fetch) (uri (string-append - "https://github.com/numpy/numpy/archive/v" version ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + "https://github.com/numpy/numpy/releases/download/v" + version "/numpy-" version ".tar.gz")) (sha256 (base32 - "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d")))) + "1kh7y2ay21s9mcc11mq59g2f1yc75v152z2k2vlh0xmh9c9rjpf4")))) (build-system python-build-system) (inputs `(("openblas" ,openblas) @@ -2725,26 +2811,6 @@ 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)) - ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of ;; interest only for legacy code going back to NumPy's predecessor ;; Numeric. @@ -2812,14 +2878,14 @@ objects.") (define-public python-colormath (package (name "python-colormath") - (version "2.1.1") + (version "3.0.0") (source (origin (method url-fetch) (uri (pypi-uri "colormath" version)) (sha256 (base32 - "01wp5xwm0a89wdm1dc9rr1ij90idzdiiipxdj1yslhqzkhnjnfh0")))) + "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix")))) (build-system python-build-system) (propagated-inputs `(("python-networkx" ,python-networkx) @@ -2836,14 +2902,14 @@ objects.") (define-public python-spectra (package (name "python-spectra") - (version "0.0.8") + (version "0.0.11") (source (origin (method url-fetch) (uri (pypi-uri "spectra" version)) (sha256 (base32 - "0n87kzhpkml2s2q91rdkl8wz2kkv5b0bkrgww45lxa5vq34qh6w5")))) + "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf")))) (build-system python-build-system) (arguments `(#:phases @@ -3492,14 +3558,14 @@ functions.") (define-public python-scipy (package (name "python-scipy") - (version "0.19.1") + (version "1.0.0") (source (origin (method url-fetch) (uri (pypi-uri "scipy" version)) (sha256 (base32 - "1rl411bvla6q7qfdb47fpdnyjhfgzl6smpha33n9ar1klykjr6m1")))) + "043djb3vyk6qripmyw30jhl0g8qza0fmar6wck10iv79l08izsl7")))) (build-system python-build-system) (propagated-inputs `(("python-numpy" ,python-numpy) @@ -3510,11 +3576,12 @@ functions.") ("openblas" ,openblas))) (native-inputs `(("python-cython" ,python-cython) - ("python-nose" ,python-nose) + ("python-pytest" ,python-pytest) ("python-sphinx" ,python-sphinx) ("python-numpydoc" ,python-numpydoc) ("gfortran" ,gfortran) - ("perl" ,perl))) + ("perl" ,perl) + ("which" ,which))) (outputs '("out" "doc")) (arguments `(#:phases @@ -3543,7 +3610,11 @@ atlas_libs = openblas (let* ((data (string-append (assoc-ref outputs "doc") "/share")) (doc (string-append data "/doc/" ,name "-" ,version)) (html (string-append doc "/html")) - (pyver ,(string-append "PYVER="))) + (pyver ,(string-append "PYVER=" (version-major+minor + (package-version python)))) + ;; By default it tries to run sphinx-build through the Python + ;; interpreter which won't work with our shell wrapper. + (sphinxbuild "SPHINXBUILD=LANG=C sphinx-build")) ;; Make installed package available for building the ;; documentation (add-installed-pythonpath inputs outputs) @@ -3553,7 +3624,7 @@ atlas_libs = openblas (("pngmath_use_preview = True") "pngmath_use_preview = False")) (mkdir-p html) - (system* "make" "html" pyver) + (invoke "make" "html" pyver sphinxbuild) (with-directory-excursion "build/html" (for-each (lambda (file) (let* ((dir (dirname file)) @@ -3561,21 +3632,15 @@ atlas_libs = openblas (install-file file html))) (find-files "." ".*"))))) #t)) - (add-after 'unpack 'fix-tests - (lambda _ - (substitute* "scipy/integrate/tests/test_quadpack.py" - (("libm.so") "libm.so.6")) - #t)) - ;; Tests can only be run after the library has been installed and not - ;; within the source directory. + ;; Tests can only be run after the library has been installed and not + ;; within the source directory. (delete 'check) (add-after 'install 'check (lambda* (#:key inputs outputs #:allow-other-keys) (add-installed-pythonpath inputs outputs) (with-directory-excursion "/tmp" - (zero? (system* "python" "-c" - "import scipy; scipy.test('full')"))) - #t))))) + (invoke "python" "-c" + "import scipy; scipy.test('full', verbose=2)"))))))) (home-page "https://www.scipy.org/") (synopsis "The Scipy library provides efficient numerical routines") (description "The SciPy library is one of the core packages that make up @@ -4053,7 +4118,7 @@ Python language binding specification.") (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive. (native-inputs `(("unzip" ,unzip) - ("python-pytest" ,python-pytest-3.0) + ("python-pytest" ,python-pytest) ("python-pytest-runner" ,python-pytest-runner))) (home-page "https://bitbucket.org/neogeny/grako") (synopsis "EBNF parser generator") @@ -4111,7 +4176,7 @@ cluster without needing to write any wrapper code yourself.") (base32 "0zizn61n5z5hq421hkypk9pw8s6fpxw30f4hsg7k4ivwzy3gjw9j")))) (build-system python-build-system) (native-inputs - `(("python-pytest" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("python-mock" ,python-mock) ("python-tox" ,python-tox) ("which" ,which))) ;for tests @@ -4174,7 +4239,7 @@ displayed.") (replace 'check (lambda _ (zero? (system* "nosetests" "-v"))))))) (native-inputs `(("python-nose" ,python-nose) - ("python-pytest" ,python-pytest-3.0) + ("python-pytest" ,python-pytest) ("man-db" ,man-db) ("which" ,which) ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py' @@ -4195,13 +4260,13 @@ child application and control it as if a human were typing commands.") (define-public python-setuptools-scm (package (name "python-setuptools-scm") - (version "1.15.0") + (version "1.15.6") (source (origin (method url-fetch) (uri (pypi-uri "setuptools_scm" version)) (sha256 (base32 - "0bwyc5markib0i7i2qlyhdzxhiywzxbkfiapldma8m91m82jvwfs")))) + "0pzvfmx8s20yrgkgwfbxaspz2x1g38qv61jpm0ns91lrb22ldas9")))) (build-system python-build-system) (home-page "https://github.com/pypa/setuptools_scm/") (synopsis "Manage Python package versions in SCM metadata") @@ -4821,19 +4886,20 @@ interfaces in an easy and portable manner.") (define-public python-networkx (package (name "python-networkx") - (version "1.11") + (version "2.1") (source (origin (method url-fetch) - (uri (pypi-uri "networkx" version)) + (uri (pypi-uri "networkx" version ".zip")) (sha256 - (base32 "1f74s56xb4ggixiq0vxyfxsfk8p20c7a099lpcf60izv1php03hd")))) + (base32 "1ccb8mfz4m821k9y0cigkbq42q2sbb4dj5fbjshp0awp32j2q9v4")))) (build-system python-build-system) ;; python-decorator is needed at runtime (propagated-inputs `(("python-decorator" ,python-decorator))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-nose" ,python-nose) + ("unzip" ,unzip))) (home-page "http://networkx.github.io/") (synopsis "Python module for creating and manipulating graphs and networks") (description @@ -5254,14 +5320,14 @@ PEP 8.") (define-public python-pyflakes (package (name "python-pyflakes") - (version "1.0.0") + (version "1.5.0") (source (origin (method url-fetch) (uri (pypi-uri "pyflakes" version)) (sha256 (base32 - "0qs2sgqszq7wcplis8509wk2ygqcrwzbs1ghfj3svvivq2j377pk")))) + "1x1pcca4a24k4pw8x1c77sgi58cg1wl2k38mp8a25k608pzls3da")))) (build-system python-build-system) (home-page "https://github.com/pyflakes/pyflakes") @@ -5276,17 +5342,17 @@ PEP 8.") (define-public python-mccabe (package (name "python-mccabe") - (version "0.4.0") + (version "0.6.1") (source (origin (method url-fetch) (uri (pypi-uri "mccabe" version)) (sha256 (base32 - "0yr08a36h8lqlif10l4xcikbbig7q8f41gqywir7rrvnv3mi4aws")))) + "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx")))) (build-system python-build-system) (native-inputs - `(("python-pytest" ,python-pytest) + `(("python-pytest" ,python-pytest-bootstrap) ("python-pytest-runner" ,python-pytest-runner))) (home-page "https://github.com/flintwork/mccabe") (synopsis "McCabe checker, plugin for flake8") @@ -5359,51 +5425,60 @@ complexity of Python source code.") (define-public python-flake8 (package (name "python-flake8") - (version "2.5.4") + (version "3.4.1") (source (origin (method url-fetch) (uri (pypi-uri "flake8" version)) (sha256 (base32 - "0bs9cz4fr99r2rwig1b8jwaadl1nan7kgpdzqwj0bwbckwbmh7nc")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Remove pre-compiled .pyc files from source. - (for-each delete-file-recursively - (find-files "." "__pycache__" #:directories? #t)) - (for-each delete-file (find-files "." "\\.pyc$")) - #t)))) - (build-system python-build-system) - (propagated-inputs - `(("python-pep8" ,python-pep8) + "1n0i38592vy3q0x2a9bf8z6rhhn04i30wsn5i5zzcj7qkxvl8062")))) + (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* "pytest" "-v"))))))) + (propagated-inputs + `(("python-pycodestyle" ,python-pycodestyle) ("python-pyflakes" ,python-pyflakes) + ;; flake8 depends on a newer setuptools than provided by python. + ("python-setuptools" ,python-setuptools) ("python-mccabe" ,python-mccabe))) (native-inputs `(("python-mock" ,python-mock) ; TODO: only required for < 3.3 - ("python-nose" ,python-nose))) + ("python-pytest" ,python-pytest-bootstrap) + ("python-pytest-runner" ,python-pytest-runner))) (home-page "https://gitlab.com/pycqa/flake8") (synopsis "The modular source code checker: pep8, pyflakes and co") (description "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.") + (properties `((python2-variant . ,(delay python2-flake8)))) (license license:expat))) (define-public python2-flake8 - (package-with-python2 python-flake8)) + (let ((base (package-with-python2 (strip-python2-variant python-flake8)))) + (package (inherit base) + (propagated-inputs + `(("python2-configparser" ,python2-configparser) + ("python2-enum" ,python2-enum) + ,@(package-propagated-inputs base)))))) (define-public python-flake8-polyfill (package (name "python-flake8-polyfill") - (version "1.0.1") + (version "1.0.2") (source (origin (method url-fetch) (uri (pypi-uri "flake8-polyfill" version)) (sha256 (base32 - "02gn2wxvh9vnf7m7dld7ca4l60mg5c370hv3swwppkngwaqmcw67")))) + "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4")))) (build-system python-build-system) (arguments '(#:phases @@ -5417,6 +5492,7 @@ complexity of Python source code.") (native-inputs `(("python-flake8" ,python-flake8) ("python-mock" ,python-mock) + ("python-pep8" ,python-pep8) ("python-pycodestyle" ,python-pycodestyle) ("python-pytest" ,python-pytest))) (home-page "https://gitlab.com/pycqa/flake8-polyfill") @@ -7164,6 +7240,10 @@ Python at your fingertips, in Lisp form.") (build-system python-build-system) (arguments `(#:python ,python-2 + ;; The test suite fails with Python > 2.7.13: + ;; import test.support + ;; ImportError: No module named support + #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-/bin/sh @@ -7171,15 +7251,7 @@ Python at your fingertips, in Lisp form.") (substitute* '("subprocess32.py" "test_subprocess32.py") (("/bin/sh") (which "sh"))) - #t)) - (delete 'check) - (add-after 'install 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; For some reason this package fails to import - ;; _posixsubprocess.so when PYTHONPATH is set to the build - ;; directory. Running tests after install is easier. - (add-installed-pythonpath inputs outputs) - (zero? (system* "python" "test_subprocess32.py"))))))) + #t))))) (home-page "https://github.com/google/python-subprocess32") (synopsis "Backport of the subprocess module from Python 3.2") (description @@ -8513,28 +8585,73 @@ are synchronized with data exchanges on \"channels\".") (define-public python-gevent (package (name "python-gevent") - (version "1.1.1") + (version "1.2.2") (source (origin (method url-fetch) (uri (pypi-uri "gevent" version)) (sha256 (base32 - "1smf3kvidpdiyi2c81alal74p2zm0clrm6xbyy6y1k9a3f2vkrbf")) + "0bbbjvi423y9k9xagrcsimnayaqymg6f2dj76m9z3mjpkjpci4a7")) (modules '((guix build utils))) (snippet '(begin ;; unbunding libev and c-ares - (for-each delete-file-recursively '("libev" "c-ares")) - ;; fixing testsuite - (call-with-output-file "greentest/__init__.py" noop) - (substitute* "greentest/testrunner.py" - (("import util") "from . import util") - (("from util import log") "from .util import log")))))) + (delete-file-recursively "deps") + #t)))) (build-system python-build-system) + (arguments + `(#:modules ((ice-9 ftw) + (srfi srfi-26) + (guix build utils) + (guix build python-build-system)) + #:phases (modify-phases %standard-phases + (add-after 'unpack 'unpack-libev + (lambda* (#:key inputs #:allow-other-keys) + (mkdir-p "deps/libev") + ;; FIXME: gevent requires building libev, even though + ;; it only links against the proper one. + (invoke "tar" "-xf" (assoc-ref inputs "libev-source") + "--strip-components=1" "-C" "deps/libev"))) + (add-before 'patch-source-shebangs 'patch-hard-coded-paths + (lambda _ + (substitute* "src/gevent/subprocess.py" + (("/bin/sh") (which "sh"))) + (for-each (lambda (file) + (substitute* file + (("/bin/sh") (which "sh")) + (("/bin/true") (which "true")))) + (find-files "src/greentest" "\\.py$")) + #t)) + (add-before 'build 'do-not-use-bundled-sources + (lambda _ + (setenv "CONFIG_SHELL" (which "bash")) + (setenv "LIBEV_EMBED" "false") + (setenv "CARES_EMBED" "false") + (setenv "EMBED" "false") + #t)) + (replace 'check + (lambda _ + ;; Make sure the build directory is on PYTHONPATH. + (setenv "PYTHONPATH" + (string-append + (getenv "PYTHONPATH") ":" + (getcwd) "/build/" + (car (scandir "build" (cut string-prefix? "lib." <>))))) + (with-directory-excursion "src/greentest" + ;; XXX: Many tests require network access. Instead we only + ;; run known-good tests. Unfortunately we cannot use + ;; recursion here since this directory also contains + ;; Python-version-specific subfolders. + (apply invoke "python" "testrunner.py" "--config" + "known_failures.py" + (scandir "." (cut regexp-exec + (make-regexp "test_+(subprocess|core)") + <>))))))))) (propagated-inputs `(("python-greenlet" ,python-greenlet))) (native-inputs - `(("python-six" ,python-six))) + `(("libev-source" ,(package-source libev)) + ("python-six" ,python-six))) (inputs `(("c-ares" ,c-ares) ("libev" ,libev))) @@ -9404,8 +9521,8 @@ interface for programs.") (base32 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8")))) (build-system python-build-system) - (native-inputs - `(("python-pytest" ,python-pytest))) + (arguments + '(#:tests? #f)) ; The tests are not distributed (propagated-inputs `(("python-requests" ,python-requests) ("python-six" ,python-six))) @@ -9609,8 +9726,8 @@ to Python.") (base32 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7")))) (build-system python-build-system) - (native-inputs - `(("python-pytest" ,python-pytest))) + (arguments + '(#:tests? #f)) ; The tests are not distributed (propagated-inputs `(("python-graphql-core" ,python-graphql-core) ("python-promise" ,python-promise) @@ -10732,49 +10849,31 @@ in other versions.") (define-public python-mando (package - (name "python-mando") - (version "0.5") - (source - (origin - (method url-fetch) - (uri (pypi-uri "mando" version)) - (sha256 - (base32 - "0q05h66439gqdmlk4jqm6xrwrzfdgs4mwk70barxhr2y83qbbdc0")))) - (build-system python-build-system) - (propagated-inputs - `(("python-rst2ansi" ,python-rst2ansi))) - (native-inputs - `(("python-sphinx" ,python-sphinx-1.5.3) - ("python-paramunittest" ,python-paramunittest))) - (home-page "https://mando.readthedocs.org/") - (synopsis - "Wrapper around argparse, allowing creation of complete CLI applications") - (description - "This package is a wrapper around argparse, allowing you to write complete CLI - applications in seconds while maintaining all the flexibility.") - (license license:expat))) + (name "python-mando") + (version "0.6.4") + (source (origin + (method url-fetch) + (uri (pypi-uri "mando" version)) + (sha256 + (base32 + "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr")))) + (build-system python-build-system) + (propagated-inputs + `(("python-rst2ansi" ,python-rst2ansi) + ("python-six" ,python-six))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://mando.readthedocs.org/") + (synopsis + "Wrapper around argparse, allowing creation of complete CLI applications") + (description + "This package is a wrapper around argparse, allowing you to write complete CLI +applications in seconds while maintaining all the flexibility.") + (license license:expat))) (define-public python2-mando (package-with-python2 python-mando)) -(define-public python-mando-0.3.1 - ;; python-radon (version 1.5.0) has a requirement - ;; for mando<0.4,>=0.3 - (package - (inherit python-mando) - (name "python-mando") - (version "0.3.1") - (source - (origin - (method url-fetch) - (uri (string-append "https://github.com/rubik/mando/archive/v" - version - ".tar.gz")) - (sha256 - (base32 - "17jlkdpqw22z1nyml5ybslilqkzmnk0dxxjml8bfghav1l5hbwd2")))))) - (define-public python-fudge (package (name "python-fudge") @@ -11145,24 +11244,27 @@ for more filetypes can be easily added by creating plugins for them.") (define-public python-radon (package (name "python-radon") - (version "1.5.0") + (version "2.2.0") (source (origin (method url-fetch) (uri (pypi-uri "radon" version)) (sha256 (base32 - "1h6jv36am0i827182a04ki6291lyx4kp957xfr5njgprj4nd0qsl")))) + "07gq5hq4nrffxnlnksws9hrx7fd001gam63j62i82gyfr23gvdym")))) (build-system python-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "python" "radon/tests/run.py")))))) (propagated-inputs `(("python-colorama" ,python-colorama) ("python-flake8-polyfill" ,python-flake8-polyfill) - ("python-mando" ,python-mando-0.3.1))) + ("python-mando" ,python-mando))) (native-inputs - `(("python-flake8" ,python-flake8) - ("python-tox" ,python-tox) - ("python-pytest" ,python-pytest) - ("python-paramunittest" ,python-paramunittest))) + `(("python-pytest" ,python-pytest) + ("python-pytest-mock" ,python-pytest-mock))) (home-page "https://radon.readthedocs.org/") (synopsis "Code Metrics in Python") (description "Radon is a Python tool which computes various code metrics. @@ -11453,7 +11555,7 @@ address is valid and really exists.") `(("python-dateutil" ,python-dateutil) ("python-simplejson" ,python-simplejson))) (native-inputs - `(("python-pytest-3.0" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("python-pytz" ,python-pytz))) (home-page "https://github.com/marshmallow-code/marshmallow") (synopsis "Convert complex datatypes to and from native @@ -11480,7 +11582,7 @@ complex datatypes to and from native Python datatypes.") (propagated-inputs `(("python-pyyaml" ,python-pyyaml))) (native-inputs - `(("python-pytest-3.0" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("python-flask" ,python-flask) ("python-marshmallow" ,python-marshmallow) ("python-tornado" ,python-tornado) @@ -11533,7 +11635,7 @@ Swagger 2.0).") ("python-flake8" ,python-flake8) ("python-flask-restful" ,python-flask-restful) ("python-flex" ,python-flex) - ("python-pytest-3.0" ,python-pytest-3.0) + ("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov) ("python-marshmallow" ,python-marshmallow) ("python-apispec" ,python-apispec))) @@ -11831,31 +11933,37 @@ ignoring formatting changes.") (define-public python-tqdm (package (name "python-tqdm") - (version "4.15.0") + (version "4.19.5") (source (origin (method url-fetch) (uri (pypi-uri "tqdm" version)) (sha256 (base32 - "0lwrmby8qz23gvqwkpivfrv4q8nfh90cz9ml6slwvwmcxxsdrhbf")))) + "0xvkffm77nqckk29xjy5fkqvig5b97vk7nzafp3cn36w4zqyccnz")))) (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))) + ("python-coverage" ,python-coverage))) (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)))) + (license (list license:mpl2.0 license:expat)) + (properties `((python2-variant . ,(delay python2-tqdm)))))) (define-public python2-tqdm - (package-with-python2 python-tqdm)) + (let ((tqdm (package-with-python2 + (strip-python2-variant python-tqdm)))) + (package + (inherit tqdm) + (native-inputs + ;; FIXME: This should be propagated from python2-flake8 instead. + `(("python2-enum34" ,python2-enum34) + ,@(package-native-inputs tqdm)))))) (define-public python-pkginfo (package @@ -11931,7 +12039,7 @@ their files and supports any packaging format (including wheels).") `(;; The tests depend on unittest2, and our version is a bit too old. #:tests? #f)) (native-inputs - `(("python-pbr" ,python-pbr))) + `(("python-pbr" ,python-pbr-minimal))) (home-page "https://github.com/testing-cabal/linecache2") (synopsis "Backports of the linecache module") @@ -11960,7 +12068,7 @@ lines are read from a single file.") `(;; python-traceback2 and python-unittest2 depend on one another. #:tests? #f)) (native-inputs - `(("python-pbr" ,python-pbr))) + `(("python-pbr" ,python-pbr-minimal))) (propagated-inputs `(("python-linecache2" ,python-linecache2))) (home-page @@ -12061,7 +12169,7 @@ services.") "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj")))) (build-system python-build-system) (native-inputs - `(("python-pytest-3.0" ,python-pytest-3.0))) + `(("python-pytest" ,python-pytest))) (propagated-inputs `(("python-setuptools-scm" ,python-setuptools-scm))) (home-page "https://github.com/Changaco/setuptools_scm_git_archive/") @@ -12119,7 +12227,7 @@ belong to tagged versions.") `(#:python ,python-2)) (native-inputs `(("unzip" ,unzip) - ("python2-pytest-3.0" ,python2-pytest-3.0) + ("python2-pytest" ,python2-pytest) ("python2-pytest-runner" ,python2-pytest-runner))) (propagated-inputs `(("python-fonttools" ,python2-fonttools) @@ -12471,7 +12579,7 @@ files, and Makefiles.") (lambda _ (invoke "py.test")))))) (native-inputs - `(("python-pytest-3.0" ,python-pytest-3.0))) + `(("python-pytest" ,python-pytest))) (home-page "http://github.com/Suor/whatever") (synopsis "Make anonymous functions by partial application of operators") (description "@code{whatever} provides an easy way to make anonymous @@ -12502,7 +12610,7 @@ functions by partial application of operators.") (lambda _ (invoke "py.test")))))) (native-inputs - `(("python-pytest-3.0" ,python-pytest-3.0) + `(("python-pytest" ,python-pytest) ("python-pytest-warnings" ,python-pytest-warnings) ("python-whatever" ,python-whatever))) (home-page "http://github.com/Suor/funcy") @@ -12557,6 +12665,75 @@ Week instances stringify to this form.") (define-public python2-isoweek (package-with-python2 python-isoweek)) +(define-public python-tokenize-rt + (package + (name "python-tokenize-rt") + (version "2.0.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "tokenize-rt" version)) + (sha256 + (base32 + "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw")))) + (build-system python-build-system) + (home-page "https://github.com/asottile/tokenize-rt") + (synopsis "Wrapper around the stdlib tokenize which roundtrips.") + (description + "This Python library is a wrapper around @code{tokenize} from the Python +standard library. It provides two additional tokens @code{ESCAPED_NL} and +@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens} +and @code{tokens_to_src} to roundtrip.") + (license license:expat))) + +(define-public python-future-fstrings + (package + (name "python-future-fstrings") + (version "0.4.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "future_fstrings" version)) + (sha256 + (base32 + "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47")))) + (build-system python-build-system) + (propagated-inputs + `(("python-tokenize-rt" ,python-tokenize-rt))) + (home-page "https://github.com/asottile/future-fstrings") + (synopsis "Backport of fstrings to Python < 3.6") + (description + "This package provides a UTF-8 compatible encoding +@code{future_fstrings}, which performs source manipulation. It decodes the +source bytes using the UTF-8 encoding and then rewrites Python 3.6 style +@code{f} strings.") + (license license:expat))) + +(define-public python-typing + (package + (name "python-typing") + (version "3.6.4") + (source + (origin + (method url-fetch) + (uri (pypi-uri "typing" version)) + (sha256 + (base32 + "1wmk9nkh30n37cbrqwkbggmj2390lhrlagjkd0ikm02l88saj06l")))) + (build-system python-build-system) + (home-page "https://docs.python.org/3/library/typing.html") + (synopsis "Type hints for Python") + (description "This is a backport of the standard library @code{typing} +module to Python versions older than 3.5. Typing defines a standard notation +for Python function and variable type annotations. The notation can be used +for documenting code in a concise, standard format, and it has been designed +to also be used by static and runtime type checkers, static analyzers, IDEs +and other tools.") + (license license:psfl))) + +(define-public python2-typing + (package-with-python2 python-typing)) + (define-public bpython (package (name "bpython") |