projects/guix·blob python-team · refs

1326 lines · 46.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016, 2017, 2018, 2023 Tobias Geerinckx-Rice <[email protected]>
3;;; Copyright © 2017, 2018, 2019, 2021, 2022, 2023 Ricardo Wurmus <[email protected]>
4;;; Copyright © 2017 Nikita <[email protected]>
5;;; Copyright © 2017 Julien Lepiller <[email protected]>
6;;; Copyright © 2018-2020, 2022, 2023 Efraim Flashner <[email protected]>
7;;; Copyright © 2020 Nicolas Goaziou <[email protected]>
8;;; Copyright © 2020, 2022, 2023 Marius Bakke <[email protected]>
9;;; Copyright © 2021, 2025 Brendan Tildesley <[email protected]>
10;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
11;;; Copyright © 2024 TakeV <[email protected]>
12;;; Copyright © 2023 Ivan Vilata i Balaguer <[email protected]>
13;;; Copyright © 2024 Maxim Cournoyer <[email protected]>
14;;; Copyright © 2025 Nicolas Graves <[email protected]>
15;;; Copyright © 2025 Vinicius Monego <[email protected]>
16;;;
17;;; This file is part of GNU Guix.
18;;;
19;;; GNU Guix is free software; you can redistribute it and/or modify it
20;;; under the terms of the GNU General Public License as published by
21;;; the Free Software Foundation; either version 3 of the License, or (at
22;;; your option) any later version.
23;;;
24;;; GNU Guix is distributed in the hope that it will be useful, but
25;;; WITHOUT ANY WARRANTY; without even the implied warranty of
26;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27;;; GNU General Public License for more details.
28;;;
29;;; You should have received a copy of the GNU General Public License
30;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
31
32(define-module (gnu packages python-compression)
33 #:use-module ((guix licenses) #:prefix license:)
34 #:use-module (guix utils)
35 #:use-module (guix packages)
36 #:use-module (guix download)
37 #:use-module (guix git-download)
38 #:use-module (guix gexp)
39 #:use-module (guix build-system cargo)
40 #:use-module (guix build-system gnu)
41 #:use-module (guix build-system pyproject)
42 #:use-module (gnu packages)
43 #:use-module (gnu packages build-tools)
44 #:use-module (gnu packages libffi)
45 #:use-module (gnu packages compression)
46 #:use-module (gnu packages cmake)
47 #:use-module (gnu packages check)
48 #:use-module (gnu packages digest)
49 #:use-module (gnu packages machine-learning)
50 #:use-module (gnu packages maths)
51 #:use-module (gnu packages pkg-config)
52 #:use-module (gnu packages python)
53 #:use-module (gnu packages python-build)
54 #:use-module (gnu packages python-check)
55 #:use-module (gnu packages python-crypto)
56 #:use-module (gnu packages python-science)
57 #:use-module (gnu packages python-web)
58 #:use-module (gnu packages python-xyz)
59 #:use-module (gnu packages rust)
60 #:use-module (gnu packages sphinx))
61
62(define-public python-backports-zstd
63 (package
64 (name "python-backports-zstd")
65 (version "1.2.0")
66 (source
67 (origin
68 (method git-fetch)
69 (uri (git-reference
70 (url "https://github.com/rogdham/backports.zstd")
71 (commit (string-append "v" version))))
72 (file-name (git-file-name name version))
73 (sha256
74 (base32 "08dlr3zfk6fsn9g99msy2ap43c740hmc1l1c4xccigkrkjn9p0sp"))))
75 (build-system pyproject-build-system)
76 (arguments
77 (list
78 ;; tests: 1249 passed
79 #:test-backend #~'unittest
80 #:test-flags #~(list "discover" "tests")
81 #:phases
82 #~(modify-phases %standard-phases
83 (add-after 'unpack 'use-system-zstd
84 (lambda _
85 (substitute* "setup.py"
86 (("_SYSTEM_ZSTD = False")
87 "_SYSTEM_ZSTD = True"))))
88 (add-after 'unpack 'skip-copy-of-zstd-license
89 (lambda _
90 (substitute* "setup.py"
91 (("f.write.*read_text.*")
92 ""))))
93 (add-after 'unpack 'skip-tests-requiring-root
94 (lambda _
95 (substitute* "tests/test/test_tarfile.py"
96 (("import pwd, grp")
97 "return False"))))
98 (add-before 'check 'pre-check
99 (lambda _
100 ;; Skip tests that may fail when using the system library.
101 (setenv "BACKPORTSZSTD_SKIP_EXTENSION_TEST" "1"))))))
102 (native-inputs
103 (list pythoncapi-compat
104 python-setuptools))
105 (inputs
106 (list (list zstd "lib")))
107 (home-page "https://peps.python.org/pep-0784/")
108 (synopsis "Backport of compression.zstd for Python")
109 (description
110 "This package provides a backport of the compression.zstd module for
111Python versions below 3.14.")
112 (license license:psfl)))
113
114(define-public python-blosc
115 (package
116 (name "python-blosc")
117 (version "1.11.4")
118 (source
119 (origin
120 (method url-fetch)
121 (uri (pypi-uri "blosc" version))
122 (sha256
123 (base32
124 "0dqxyk87xwmj2g1midp29zpibf58vxqavx2sqy9ylfjdapci5cz0"))
125 (snippet
126 #~(begin (use-modules (guix build utils))
127 (delete-file-recursively "blosc/c-blosc")))))
128 (build-system pyproject-build-system)
129 (arguments
130 (list
131 #:test-backend #~'custom
132 #:test-flags #~(list "-m" "blosc.test")
133 #:phases
134 #~(modify-phases %standard-phases
135 (add-after 'unpack 'find-blosc
136 (lambda _
137 (setenv "USE_SYSTEM_BLOSC" "1")
138 (setenv "Blosc_ROOT" #$(this-package-input "c-blosc")))))))
139 (native-inputs
140 (list cmake-minimal
141 ninja/pinned
142 python-numpy
143 python-psutil
144 python-py-cpuinfo
145 python-scikit-build
146 python-setuptools))
147 (inputs
148 (list c-blosc))
149 (home-page "https://github.com/blosc/python-blosc")
150 (synopsis "Python wrapper for the Blosc data compressor library")
151 (description "Blosc is a high performance compressor optimized for binary
152data. It has been designed to transmit data to the processor cache faster
153than the traditional, non-compressed, direct memory fetch approach via a
154@code{memcpy()} system call.
155
156Blosc works well for compressing numerical arrays that contains data with
157relatively low entropy, like sparse data, time series, grids with
158regular-spaced values, etc.
159
160This Python package wraps the Blosc library.")
161 (license license:bsd-3)))
162
163(define-public python-blosc2
164 (package
165 (name "python-blosc2")
166 (version "3.12.2")
167 (source
168 (origin
169 (method url-fetch)
170 (uri (pypi-uri "blosc2" version))
171 (sha256
172 (base32 "17z3byk0q79rf7j8nh4k0qls1mwdrlylgi85qayqirvk9df92bx4"))))
173 (build-system pyproject-build-system)
174 (arguments
175 (list
176 ;; tests: 8192 passed, 7466 deselected
177 #:test-flags
178 ;; Network access is requited: OSError: Could not find a suitable TLS CA
179 ;; certificate bundle, invalid path: /etc/ssl/certs/ca-certificates.crt
180 #~(list "--deselect=tests/test_embed_store.py::test_with_remote"
181 "tests")
182 #:phases
183 #~(modify-phases %standard-phases
184 (add-before 'build 'configure
185 (lambda _
186 (setenv "USE_SYSTEM_BLOSC2" "ON"))))))
187 (native-inputs
188 (list cmake-minimal
189 pkg-config
190 python-cython
191 python-psutil
192 python-pytest
193 python-pytorch ;XXX: hard dependency to run tests
194 python-scikit-build-core
195 python-setuptools))
196 (inputs
197 (list c-blosc2))
198 (propagated-inputs
199 (list python-msgpack
200 python-ndindex
201 python-numexpr
202 python-numpy
203 python-platformdirs
204 python-py-cpuinfo
205 python-requests))
206 (home-page "https://github.com/blosc/python-blosc2")
207 (synopsis "Python wrapper for the Blosc2 data compressor library")
208 (description
209 "Blosc2 is a high performance compressor optimized for binary
210data. It has been designed to transmit data to the processor cache faster
211than the traditional, non-compressed, direct memory fetch approach via a
212@code{memcpy()} system call.
213
214Python-Blosc2 wraps the C-Blosc2 library, and it aims to leverage its new API
215so as to support super-chunks, multi-dimensional arrays, serialization and
216other features introduced in C-Blosc2.
217
218Python-Blosc2 also reproduces the API of Python-Blosc and is meant to be able
219to access its data, so it can be used as a drop-in replacement.")
220 (license license:bsd-3)))
221
222(define-public python-brotli
223 (package
224 (name "python-brotli")
225 (version "1.2.0")
226 (source
227 (origin
228 (method git-fetch)
229 (uri (git-reference
230 (url "https://github.com/google/brotli")
231 (commit (string-append "v" version))))
232 (file-name (git-file-name name version))
233 (sha256
234 (base32 "0vv7r7m7m6hqhbwb017s4rvc378mjxxvigg37r76imsqlyafbxvq"))
235 (modules '((guix build utils)))
236 (snippet
237 #~(begin
238 ;; Cherry-picked from upstream since the latest release
239 ;; https://github.com/google/brotli/commit/09b0992b6acb7faa6fd3b23f9bc036ea117230fc
240 (substitute* (find-files "scripts" "^lib.*pc\\.in")
241 (("-R\\$\\{libdir\\} ") ""))))))
242 (build-system pyproject-build-system)
243 (native-inputs
244 (list python-pytest
245 python-setuptools))
246 (home-page "https://github.com/google/brotli")
247 (synopsis "Python interface to Brotli")
248 (description "This package provides a Python interface to the @code{brotli}
249package, an implementation of the Brotli lossless compression algorithm.")
250 (license license:expat)))
251
252(define-public python-multivolumefile
253 (package
254 (name "python-multivolumefile")
255 (version "0.2.3")
256 (source
257 (origin
258 (method url-fetch)
259 (uri (pypi-uri "multivolumefile" version))
260 (sha256
261 (base32
262 "1mh9sz50s1p8ik83a455pqd57syprad7xhfmk28yb5mwmw58sr50"))))
263 (build-system pyproject-build-system)
264 (native-inputs
265 (list python-pytest
266 python-setuptools
267 python-setuptools-scm))
268 (home-page "https://github.com/miurahr/multivolume")
269 (synopsis "Treat multiple files as one")
270 (description "MultiVolumefile is a Python library that provides a
271file-object abstraction, making it possible to use multiple files as if they
272were a single file.")
273 (license license:lgpl2.1+)))
274
275(define-public python-cramjam
276 (package
277 (name "python-cramjam")
278 (version "2.11.0.post1")
279 (source
280 (origin
281 (method git-fetch)
282 (uri (git-reference
283 (url "https://github.com/milesgranger/cramjam")
284 (commit (string-append "v" version))))
285 (file-name (git-file-name name version))
286 (sha256
287 (base32 "1028aydcjy7917vsgg67v6cnskzw0wk4x1vz017mar99yiq7z349"))))
288 (build-system pyproject-build-system)
289 (arguments
290 (list
291 ;; tests: 740 passed, 1 skipped, 4 deselected
292 #:test-flags
293 #~(list "--ignore=benchmarks/test_bench.py"
294 #$@(map (lambda (test)
295 (string-append "--deselect=tests/test_variants.py::"
296 test))
297 ;; FIXME: Did not raise cramjam.DecompressionError
298 (list "test_variants_raise_exception[deflate]"
299 ;; This test fails nondeterministically.
300 "test_variants_decompress_into[zlib-Buffer-File]"
301 ;; could not convert string to float: '<' -
302 ;; Consider hexadecimal for huge integer literals
303 ;; to avoid decimal conversion limits.
304 "test_variants_decompress_into[lz4-numpy-bytes]"
305 ;; could not convert string to float: 'M' -
306 ;; Consider hexadecimal for huge integer literals
307 ;; to avoid decimal conversion limits.
308 "test_variants_decompress_into[zstd-File-Buffer]")))
309 #:imported-modules `(,@%cargo-build-system-modules
310 ,@%pyproject-build-system-modules)
311 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
312 (guix build pyproject-build-system)
313 (guix build utils))
314 #:phases
315 #~(modify-phases %standard-phases
316 (add-after 'unpack 'prepare-cargo-build-system
317 (lambda args
318 (for-each (lambda (phase)
319 (format #t "Running cargo phase: ~a~%" phase)
320 (apply (assoc-ref cargo:%standard-phases phase)
321 #:cargo-target #$(cargo-triplet)
322 args))
323 '(unpack-rust-crates
324 configure
325 check-for-pregenerated-files
326 patch-cargo-checksums))))
327 (add-before 'check 'configure-tests
328 (lambda _
329 ;; XXX: Otherwise some flaky tests seem to fail with
330 ;; SyntaxError: could not convert string to float
331 (setenv "CI" "1"))))))
332 (native-inputs
333 (append
334 (list maturin
335 pkg-config
336 python-pytest
337 python-pytest-xdist
338 python-numpy
339 python-hypothesis
340 rust
341 `(,rust "cargo"))
342 (or (and=> (%current-target-system)
343 (compose list make-rust-sysroot))
344 '())))
345 (inputs
346 (cons* libdeflate
347 lz4
348 `(,zstd "lib")
349 (cargo-inputs 'python-cramjam)))
350 (home-page "https://github.com/milesgranger/cramjam")
351 (synopsis "Python bindings to compression algorithms in Rust")
352 (description
353 "This package provides thin Python bindings to compression and
354decomporession algorithms implemented in Rust. This allows for using
355algorithms such as Snappy without additional system dependencies. The
356following algorithms are available:
357
358@itemize
359@item Snappy
360@item Brotli
361@item Bzip2
362@item LZ4
363@item Gzip
364@item Deflate
365@item Zstd
366@end itemize")
367 (license license:expat)))
368
369(define-public python-ewah-bool-utils
370 (package
371 (name "python-ewah-bool-utils")
372 (version "1.2.2")
373 (source
374 (origin
375 (method url-fetch)
376 (uri (pypi-uri "ewah_bool_utils" version))
377 (sha256
378 (base32 "1hvs1fvf3g7kq6hnzxyxfrwvmykw503cmxf1l3irs67gr931z47b"))))
379 (build-system pyproject-build-system)
380 (arguments
381 (list
382 #:phases
383 #~(modify-phases %standard-phases
384 (add-before 'check 'build-extensions
385 (lambda _
386 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
387 (native-inputs
388 (list python-cython
389 python-pytest
390 python-setuptools
391 python-wheel))
392 (propagated-inputs
393 (list python-numpy))
394 (home-page "https://github.com/yt-project/ewah_bool_utils")
395 (synopsis "EWAH Bool Array compression")
396 (description "This package provide a Python wrapper to @acronym{EWAH,
397 Enhanced Word-Aligned Hybrid} compression bitarray method.")
398 (license (list
399 ;; LICENSE: for Python code.
400 license:bsd-3
401 ;; XXX: Check if it's possible to have it as a dedicated package
402 ;; and link here..
403 ;; ewah_bool_utils/cpp/LICENSE: for C++ bundle, sourced from
404 ;; <https://github.com/lemire/EWAHBoolArray>.
405 license:asl2.0))))
406
407(define-public python-pybcj
408 (package
409 (name "python-pybcj")
410 (version "1.0.7")
411 (source
412 (origin
413 (method git-fetch)
414 (uri (git-reference
415 (url "https://github.com/miurahr/pybcj")
416 (commit (string-append "v" version))))
417 (file-name (git-file-name name version))
418 (sha256
419 (base32 "1w5c706l0nhqrh1ms3m01w7pbd4vsm3jv84gxwlgrpr0w7d8hq7p"))))
420 (build-system pyproject-build-system)
421 (native-inputs
422 (list python-hypothesis
423 python-pytest
424 python-setuptools
425 python-setuptools-scm))
426 (home-page "https://github.com/miurahr/pybcj")
427 (synopsis "BCJ filter library")
428 (description "In data compression, BCJ, short for Branch-Call-Jump, refers
429to a technique that improves the compression of machine code of executable
430binaries by replacing relative branch addresses with absolute ones. This
431allows a LZMA compressor to identify duplicate targets and archive higher
432compression rate. BCJ is used in the 7-zip compression utility as the default
433filter for executable binaries.
434
435pybcj provides Python bindings to a BCJ implementation in C.")
436 (license license:lgpl2.1+)))
437
438;; XXX: Project is archived and not maintained since 2021.
439(define-public python-bcj-cffi
440 (package
441 (name "python-bcj-cffi")
442 (version "0.5.1")
443 (source
444 (origin
445 (method url-fetch)
446 (uri (pypi-uri "bcj-cffi" version))
447 (sha256
448 (base32 "1k6h9x8j65hssbgmvhl71sdjj9aq8d81drdibrdflaz7a895sjib"))))
449 (build-system pyproject-build-system)
450 (native-inputs
451 (list python-pytest python-setuptools python-setuptools-scm))
452 (propagated-inputs
453 (list python-cffi))
454 (home-page "https://github.com/miurahr/bcj-cffi")
455 (synopsis "Branch / Call /Jump CFFI library in Python")
456 (description "This package provides an implementation of the Branch / Call /
457Jump conversion filter by CFFI for Python.")
458 (license license:lgpl2.1+)))
459
460(define-public python-brotlicffi
461 (package
462 (name "python-brotlicffi")
463 (version "1.2.0.1")
464 (source
465 (origin
466 (method git-fetch)
467 (uri (git-reference
468 (url "https://github.com/python-hyper/brotlicffi")
469 (commit (string-append "v" version))))
470 (file-name (git-file-name name version))
471 (sha256
472 (base32 "1jal6gz3crca61gnmxjl37dycak0rsj46kvyfqhkmc15s17f64rm"))
473 (snippet
474 #~(begin
475 (use-modules (guix build utils))
476 (delete-file-recursively "libbrotli")))))
477 (build-system pyproject-build-system)
478 (arguments
479 (list
480 #:phases
481 #~(modify-phases %standard-phases
482 (add-after 'unpack 'use-shared-brotli
483 (lambda _
484 (setenv "USE_SHARED_BROTLI" "1")))
485 (add-before 'check 'set-brotli-source
486 (lambda _
487 (let* ((brotli-source
488 #+(package-source (this-package-input "brotli")))
489 (brotli-test-data
490 (string-append brotli-source "/tests/testdata"))
491 (brotli-version-source
492 (string-append brotli-source "/c/common/version.h")))
493 (substitute* "test/conftest.py"
494 (("TEST_DATA_DIR = .*")
495 (format #f "TEST_DATA_DIR = ~s~%" brotli-test-data)))
496 (substitute* "test/test_compatibility.py"
497 (("open\\(version_h\\)")
498 (format #f "open(~s)" brotli-version-source)))))))))
499 (native-inputs
500 (list python-pytest
501 python-setuptools))
502 (inputs
503 (list brotli))
504 (propagated-inputs
505 (list python-cffi))
506 (home-page "https://github.com/python-hyper/brotlicffi")
507 (synopsis "Python CFFI bindings to the Brotli library")
508 (description
509 "This package provides Python CFFI bindings to the Brotli library.")
510 (license license:expat)))
511
512(define-public python-inflate64
513 (package
514 (name "python-inflate64")
515 (version "1.0.4")
516 (source (origin
517 (method url-fetch)
518 (uri (pypi-uri "inflate64" version))
519 (sha256
520 (base32
521 "1kh7nkvm6r6ccxkbygzwdjaxnspnhqd2ivf0mxvrf0hcjs3cd65k"))))
522 (build-system pyproject-build-system)
523 (native-inputs
524 (list python-pytest python-setuptools python-setuptools-scm))
525 (home-page "https://pypi.org/project/inflate64/")
526 (synopsis "Compression/decompression library")
527 (description "The @code{inflate64} package provides @code{Deflater} and
528@code{Inflater} classes to compress and decompress with the Enhanced Deflate
529compression algorithm.")
530 (license license:lgpl2.1+)))
531
532(define-public python-isal
533 (package
534 (name "python-isal")
535 (version "1.8.0")
536 (source
537 (origin
538 (method url-fetch)
539 (uri (pypi-uri "isal" version))
540 (sha256
541 (base32 "1d7j30922v547vnif171yhk1jml9cv14izda0w506qhslglk6hhj"))
542 ;; Remove bundled isa-l source code
543 (modules '((guix build utils)))
544 (snippet
545 #~(delete-file-recursively "src/isal/isa-l"))))
546 (build-system pyproject-build-system)
547 (arguments
548 (list
549 #:phases
550 #~(modify-phases %standard-phases
551 (add-after 'unpack 'use-dynamic-linking
552 (lambda _
553 (setenv "PYTHON_ISAL_LINK_DYNAMIC" "1"))))))
554 (inputs (list isa-l))
555 (native-inputs
556 (list python-cython
557 python-pytest
558 python-setuptools
559 python-setuptools-scm))
560 (home-page "https://github.com/pycompression/python-isal")
561 (synopsis "Python bindings for the ISA-L compression library")
562 (description
563 "This package aims to provide faster zlib and gzip compatible compression
564and decompression by implementing Python bindings for the ISA-L library.")
565 (license license:expat)))
566
567(define-public python-jaraco-stream
568 (package
569 (name "python-jaraco-stream")
570 (version "3.0.4")
571 (source
572 (origin
573 (method git-fetch)
574 (uri (git-reference
575 (url "https://github.com/jaraco/jaraco.stream")
576 (commit (string-append "v" version))))
577 (file-name (git-file-name name version))
578 (sha256
579 (base32 "0jsmyh37m78gfk70n3j5k5djh6pajn96sbkfi987sjil3r3ix854"))))
580 (build-system pyproject-build-system)
581 (native-inputs
582 (list python-pytest
583 python-setuptools
584 python-setuptools-scm))
585 (propagated-inputs
586 (list python-more-itertools))
587 (home-page "https://github.com/jaraco/jaraco.stream")
588 (synopsis "Routines for dealing with data streams")
589 (description
590 "This package includes a set of generators for dynamically loading gzip
591data. It is geared towards dealing with data streams.")
592 (license license:expat)))
593
594(define-public python-pylsqpack
595 (package
596 (name "python-pylsqpack")
597 (version "0.3.24")
598 (source
599 (origin
600 (method git-fetch)
601 (uri (git-reference
602 (url "https://github.com/aiortc/pylsqpack")
603 (commit version)))
604 (file-name (git-file-name name version))
605 (sha256
606 (base32 "1mv48f6n2cflibjbkxx8cig6rblfdbpj969h5wm2s2nb1zbjmc54"))
607 (modules '((guix build utils)))
608 (snippet
609 #~(begin
610 (delete-file-recursively "vendor")))))
611 (build-system pyproject-build-system)
612 (arguments
613 (list
614 #:phases
615 #~(modify-phases %standard-phases
616 (add-before 'build 'use-system-libs
617 (lambda _
618 (mkdir-p "vendor/ls-qpack/deps/xxhash")
619 (copy-recursively
620 #$(package-source (this-package-native-input "ls-qpack"))
621 "vendor/ls-qpack")
622 (copy-recursively
623 #$(package-source (this-package-native-input "xxhash"))
624 "vendor/ls-qpack/deps/xxhash"))))))
625 (native-inputs
626 (list ls-qpack
627 python-pytest
628 python-setuptools
629 xxhash))
630 (home-page "https://github.com/aiortc/pylsqpack")
631 (synopsis "Python bindings for @code{ls-qpack}")
632 (description
633 "@code{pylsqpack} is a wrapper around the @code{ls-qpack} library.
634It provides Python Decoder and Encoder objects to read or write HTTP/3
635headers compressed with QPACK.")
636 (license license:expat)))
637
638(define-public python-pyppmd
639 (package
640 (name "python-pyppmd")
641 (version "1.3.1")
642 (source
643 (origin
644 (method git-fetch)
645 (uri (git-reference
646 (url "https://github.com/miurahr/pyppmd")
647 (commit (string-append "v" version))))
648 (file-name (git-file-name name version))
649 (sha256
650 (base32 "172b4x115sv10amlmjjg3g4nvq5vh8sqvkkdi04w6a3v7yh66rrp"))))
651 (build-system pyproject-build-system)
652 (arguments
653 (list #:test-flags #~(list "--benchmark-disable")))
654 (native-inputs
655 (list python-hypothesis
656 python-pytest
657 python-pytest-benchmark
658 python-pytest-timeout
659 python-setuptools
660 python-setuptools-scm))
661 (home-page "https://github.com/miurahr/pyppmd")
662 (synopsis "PPMd compression/decompression library")
663 (description "Pyppmd provides classes and functions for compressing and
664decompressing text data, using the @dfn{Prediction by partial matching} (PPM)
665compression algorithm variation H and I.2. It provides an API similar to
666Python's zlib/bz2/lzma modules.")
667 (license license:lgpl2.1+)))
668
669;; XXX: Project is archived and not maintained since 2022.
670(define-public python-ppmd-cffi
671 (package
672 (name "python-ppmd-cffi")
673 (version "0.5.0")
674 (source
675 (origin
676 (method url-fetch)
677 (uri (pypi-uri "ppmd-cffi" version))
678 (sha256
679 (base32
680 "0vprpl29fkflqx0m6anfpx7q7i4cw0d0qxcdm91k4pl82dcad81g"))))
681 (build-system pyproject-build-system)
682 (arguments
683 (list
684 ;; AssertionError: assert False
685 #:test-flags #~(list "--deselect=tests/test_cli.py::test_cli_help")))
686 (propagated-inputs
687 (list python-cffi))
688 (native-inputs
689 (list python-pytest python-setuptools python-setuptools-scm))
690 (home-page "https://github.com/miurahr/ppmd")
691 (synopsis "Prediction by Partial Matching compression library")
692 (description "PPMd is a compression algorithm library using the Prediction
693by Partial Matching statistical technique. It is used in RAR and 7-Zip as one of
694several possible methods.")
695 (license license:lgpl2.1+)))
696
697(define-public python-py7zr
698 (package
699 (name "python-py7zr")
700 (version "1.1.3")
701 (source
702 (origin
703 (method git-fetch)
704 (uri (git-reference
705 (url "https://github.com/miurahr/py7zr")
706 (commit (string-append "v" version))))
707 (file-name (git-file-name name version))
708 (sha256
709 (base32
710 "061m163ffcjc686bgz949cqajj61ncj532wx9vngd6kambzlm0a8"))))
711 (build-system pyproject-build-system)
712 (arguments
713 (list
714 #:test-flags
715 #~(list "--ignore=tests/test_benchmark.py")))
716 (propagated-inputs
717 (list python-backports-zstd
718 python-brotli
719 python-brotlicffi
720 python-inflate64
721 python-multivolumefile
722 python-psutil
723 python-pybcj
724 python-pycryptodomex
725 python-pyppmd
726 python-pyzstd
727 python-texttable))
728 (native-inputs
729 (list python-libarchive-c
730 python-pytest
731 python-pytest-benchmark
732 python-pytest-httpserver
733 python-pytest-remotedata
734 python-pytest-timeout
735 python-requests
736 python-setuptools
737 python-setuptools-scm))
738 (home-page "https://github.com/miurahr/py7zr")
739 (synopsis "7-zip in Python")
740 (description "This package provides py7zr, which implements 7-zip
741archive compression, decompression, encryption and decryption in
742Python.")
743 (license license:lgpl2.1+)))
744
745(define-public python-lzo
746 (package
747 (name "python-lzo")
748 (version "1.15")
749 (source
750 (origin
751 (method url-fetch)
752 (uri (pypi-uri "python-lzo" version))
753 (sha256
754 (base32 "0jbv6853p8flk65ks0nw37f6f5v0ryi6nhppv5fm3863ql0alym5"))))
755 (build-system pyproject-build-system)
756 (arguments
757 (list
758 #:phases
759 #~(modify-phases %standard-phases
760 (add-after 'unpack 'patch-setuppy
761 (lambda* (#:key inputs #:allow-other-keys)
762 (substitute* "setup.py"
763 (("include_dirs.append\\(.*\\)")
764 (format #f "include_dirs.append(~s)"
765 (search-input-directory inputs "include/lzo")))))))))
766 (native-inputs (list python-pytest python-setuptools python-wheel))
767 (inputs (list lzo))
768 (home-page "https://github.com/jd-boyd/python-lzo")
769 (synopsis "Python bindings for the LZO data compression library")
770 (description
771 "Python-LZO provides Python bindings for LZO, i.e. you can access
772the LZO library from your Python scripts thereby compressing ordinary
773Python strings.")
774 (license license:gpl2+)))
775
776(define-public python-lz4
777 (package
778 (name "python-lz4")
779 (version "4.4.4")
780 (source
781 (origin
782 (method url-fetch)
783 (uri (pypi-uri "lz4" version))
784 (sha256
785 (base32
786 "1nmb757fx3k30zsjiaz7nj6cgp4zxl44w28s4l8k0ff4grid03q7"))
787 (modules '((guix build utils)))
788 (snippet '(begin
789 ;; Remove bundled copy of lz4.
790 (delete-file-recursively "lz4libs")))))
791 (build-system pyproject-build-system)
792 (arguments
793 ;; Taken from tox.ini (excludes experimental tests).
794 (list #:test-flags #~(list "tests/block" "tests/frame")))
795 (native-inputs
796 (list pkg-config
797 python-pytest
798 python-pkgconfig
799 python-setuptools
800 python-setuptools-scm
801 python-psutil))
802 (inputs
803 (list lz4))
804 (home-page "https://github.com/python-lz4/python-lz4")
805 (synopsis "LZ4 bindings for Python")
806 (description
807 "This package provides python bindings for the lz4 compression library
808by Yann Collet. The project contains bindings for the LZ4 block format and
809the LZ4 frame format.")
810 (license license:bsd-3)))
811
812(define-public python-lzstring
813 (package
814 (name "python-lzstring")
815 (version "1.0.4")
816 (source
817 (origin
818 (method url-fetch)
819 (uri (pypi-uri "lzstring" version))
820 (sha256
821 (base32 "18ly9pppy2yspxzw7k1b23wk77k7m44rz2g0271bqgqrk3jn3yhs"))))
822 (build-system pyproject-build-system)
823 (arguments
824 ;; No tests in PyPI, this project is a fork of
825 ;; <https://github.com/eduardtomasek/lz-string-python> and doesn't provide
826 ;; tags.
827 (list #:tests? #f))
828 (native-inputs
829 (list python-setuptools))
830 (propagated-inputs
831 (list python-future))
832 (home-page "https://github.com/gkovacs/lz-string-python")
833 (synopsis "String compression")
834 (description "Lz-string is a string compressor library for Python.")
835 (license license:expat)))
836
837(define-public python-python-snappy
838 (package
839 ;; PyPI contains both `snappy' and `python-snappy' as completely distinct
840 ;; packages. To avoid a name collision in Guix, we use the variable name
841 ;; `python-python-snappy' for the package called `python-snappy' on PyPI.
842 (name "python-python-snappy")
843 (version "0.7.3")
844 (source
845 (origin
846 (method url-fetch)
847 (uri (pypi-uri "python_snappy" version))
848 (sha256
849 (base32 "1qyfhsaagpzgrw5n2zklx670zi0f3lm1djqyg2n3hbgvmldnq8a0"))))
850 (build-system pyproject-build-system)
851 (arguments
852 (list #:test-backend #~'unittest))
853 (native-inputs (list python-setuptools))
854 (inputs
855 (list snappy))
856 (propagated-inputs (list python-cramjam))
857 (home-page "https://github.com/intake/python-snappy")
858 (synopsis "Python bindings for the Snappy compression library")
859 (description
860 "@code{python-python-snappy} provides bindings to the Snappy library and
861can be used to compress and decompress files and streams. It can also be used
862directly from the command line.")
863 (license license:bsd-3)))
864
865(define-public python-bitshuffle
866 (package
867 (name "python-bitshuffle")
868 (version "0.5.2")
869 (source (origin
870 (method url-fetch)
871 (uri (pypi-uri "bitshuffle" version))
872 (sha256
873 (base32
874 "139xz3m2m8sal8riicvmb9i0sq4085s2hc6c148bwhmzpnvky3nw"))
875 (modules '((guix build utils)))
876 (snippet
877 '(begin
878 ;; TODO Remove bundled libraries: lz4, lzf, and zstd.
879 ;; Remove generated Cython files.
880 (delete-file "bitshuffle/h5.c")
881 (delete-file "bitshuffle/ext.c")))))
882 (build-system pyproject-build-system)
883 (arguments
884 (list
885 #:test-flags
886 ;; FileNotFoundError: [Errno 2] Unable to synchronously open file
887 ;; (unable to open file: name =
888 ;; '/tmp/<...>/tests/data/regression_0.1.3.h5', errno = 2, error message
889 ;; = 'No such file or directory', flags = 0, o_flags = 0)
890 #~(list "--deselect=tests/test_regression.py::TestAll::test_regression")
891 #:phases
892 #~(modify-phases %standard-phases
893 (add-before 'build 'pre-build
894 ;; TODO: Check how to build on other architectures.
895 ;; Taken form .github/workflows/wheels.yml.
896 (lambda _
897 #$@(if (target-x86-64?)
898 '((setenv "BITSHUFFLE_ARCH" "haswell")
899 (setenv "CIBW_SKIP" "pp* *musllinux* cp311-macosx*")
900 (setenv "CIBW_ARCHS" "x86_64"))
901 '())
902 (setenv "HDF5_DIR" #$(this-package-input "hdf5")))))))
903 (native-inputs
904 (list python-cython
905 python-pytest
906 python-setuptools))
907 (inputs
908 (list python-numpy
909 python-h5py
910 hdf5))
911 (home-page "https://github.com/kiyo-masui/bitshuffle")
912 (synopsis "Filter for improving compression of typed binary data")
913 (description "Bitshuffle is an algorithm that rearranges typed, binary data
914for improving compression, as well as a python/C package that implements this
915algorithm within the Numpy framework.")
916 (license license:expat)))
917
918(define-public bitshuffle-for-snappy
919 (package/inherit python-bitshuffle
920 (name "bitshuffle-for-snappy")
921 (build-system gnu-build-system)
922 (arguments
923 (list
924 #:tests? #f
925 #:phases
926 #~(modify-phases %standard-phases
927 (replace 'configure
928 (lambda _
929 (with-output-to-file "Makefile"
930 (lambda _
931 (format #t "\
932libbitshuffle.so: src/bitshuffle.o src/bitshuffle_core.o src/iochain.o lz4/lz4.o
933\tgcc -O3 -ffast-math -std=c99 -o $@ -shared -fPIC $^
934
935%.o: %.c
936\tgcc -O3 -ffast-math -std=c99 -fPIC -Isrc -Ilz4 -c $< -o $@
937
938PREFIX:=~a
939LIBDIR:=$(PREFIX)/lib
940INCLUDEDIR:=$(PREFIX)/include
941
942install: libbitshuffle.so
943\tinstall -dm755 $(LIBDIR)
944\tinstall -dm755 $(INCLUDEDIR)
945\tinstall -m755 libbitshuffle.so $(LIBDIR)
946\tinstall -m644 src/bitshuffle.h $(INCLUDEDIR)
947\tinstall -m644 src/bitshuffle_core.h $(INCLUDEDIR)
948\tinstall -m644 src/iochain.h $(INCLUDEDIR)
949\tinstall -m644 lz4/lz4.h $(INCLUDEDIR)
950" #$output))))))))
951 (inputs '())
952 (native-inputs '())))
953
954(define-public python-uncompresspy
955 (package
956 (name "python-uncompresspy")
957 (version "0.4.0")
958 (source
959 (origin
960 (method url-fetch)
961 (uri (pypi-uri "uncompresspy" version))
962 (sha256
963 (base32 "1110dipshnijhq6dk5dxzxx3zpynm6dx5kcc430fw24b8xwlc9in"))))
964 (build-system pyproject-build-system)
965 (arguments
966 (list #:tests? #f)) ;no tests
967 (native-inputs
968 (list python-setuptools))
969 (home-page "https://github.com/kYwzor/uncompresspy")
970 (synopsis "Uncompressing LZW files in Python")
971 (description
972 "This package implement a pure Python module for uncompressing LZW
973files (.Z), such as the ones created by Unix's shell tool compress.")
974 (license license:bsd-3)))
975
976(define-public python-unix-ar
977 (package
978 (name "python-unix-ar")
979 (version "0.2.1")
980 (source
981 (origin
982 (method git-fetch)
983 (uri (git-reference
984 (url "https://github.com/getninjas/unix_ar")
985 (commit version)))
986 (file-name (git-file-name name version))
987 (sha256
988 (base32 "0bdxm7y0r7xz3d2iglxwmf1290pi3h05x3gjc0f0af01pl2j2pqn"))))
989 (build-system pyproject-build-system)
990 (arguments
991 (list
992 #:test-flags
993 ;; These tests have timestamp-related issues.
994 #~(list "tests.py" "-k" "not test_add and not test_addfile")))
995 (native-inputs (list python-pytest python-setuptools python-wheel))
996 (home-page "https://github.com/getninjas/unix_ar")
997 (synopsis "AR file handling in Python")
998 (description "This package provides utilities to handle AR files in
999Python.")
1000 (license license:bsd-3)))
1001
1002(define-public python-unlzw-cython
1003 (package
1004 (name "python-unlzw-cython")
1005 (version "1.0.0")
1006 (source
1007 (origin
1008 (method git-fetch)
1009 (uri (git-reference
1010 (url "https://github.com/AlecThomson/unlzw-cython")
1011 (commit (string-append "v" version))))
1012 (file-name (git-file-name name version))
1013 (sha256
1014 (base32 "147j0aixkrd86vb22jppkznyk2qhk2kkzmdz3w2am0gng0g4d41i"))))
1015 (build-system pyproject-build-system)
1016 (native-inputs
1017 (list python-cython
1018 python-hatch-cython
1019 python-hatch-vcs
1020 python-hatchling
1021 python-pytest
1022 python-setuptools))
1023 (home-page "https://github.com/AlecThomson/unlzw-cython")
1024 (synopsis "Cython unlzw port to open .Z files")
1025 (description
1026 "This package provides a cython-accelerated decompression module for
1027@code{.Z} files compressed using the Unix @code{compress} utility. This is a
1028fork of @url{https://github.com/scivision/unlzw3, unlzw3}.")
1029 (license license:zlib)))
1030
1031(define-public python-unlzw3
1032 (package
1033 (name "python-unlzw3")
1034 (version "0.2.3")
1035 (source
1036 (origin
1037 (method git-fetch)
1038 (uri (git-reference
1039 (url "https://github.com/scivision/unlzw3")
1040 (commit (string-append "v" version))))
1041 (file-name (git-file-name name version))
1042 (sha256
1043 (base32 "1ddsk9gs4yzvca80r0q6spvfvw31miwmp2dy93w4lcadr54sh6mc"))))
1044 (build-system pyproject-build-system)
1045 (native-inputs
1046 (list python-pytest
1047 python-setuptools))
1048 (home-page "https://github.com/scivision/unlzw3")
1049 (synopsis "Decompression module for .Z files")
1050 (description
1051 "This package provides a pure Python decompression module for @code{.Z}
1052files compressed using Unix compress utility. It's a maintained fork of
1053@url{https://github.com/umeat/unlzw}.")
1054 (license license:expat)))
1055
1056(define-public python-zipfile2
1057 (package
1058 (name "python-zipfile2")
1059 (version "0.0.12")
1060 (source
1061 (origin
1062 (method git-fetch)
1063 (uri (git-reference
1064 (url "https://github.com/itziakos/zipfile2/")
1065 (commit (string-append "v" version))))
1066 (file-name (git-file-name name version))
1067 (sha256
1068 (base32 "1hmq33r3ffrrvm5nggsp69cjdbgjbwn6zbcrs2rhmb8pds0h81q7"))
1069 ;; TODO: Remove in the next release:
1070 ;; https://github.com/itziakos/zipfile2/commit/5ea38d6eaaa5
1071 (patches (search-patches "python-zipfile2-python-3.12-support.patch"))))
1072 (build-system pyproject-build-system)
1073 (native-inputs
1074 (list python-pytest
1075 python-setuptools))
1076 (home-page "https://github.com/itziakos/zipfile2/")
1077 (synopsis "Improved @code{ZipFile} Python class")
1078 (description
1079 "Zipfile2 is a backward compatible replacement to @code{ZipFile}. It
1080provides handling of symlinks, and exception management.")
1081 (license license:psfl)))
1082
1083(define-public python-zipp
1084 (package
1085 (name "python-zipp")
1086 (version "3.23.0")
1087 (source
1088 (origin
1089 (method git-fetch)
1090 (uri (git-reference
1091 (url "https://github.com/jaraco/zipp")
1092 (commit (string-append "v" version))))
1093 (file-name (git-file-name name version))
1094 (sha256
1095 (base32 "1r8yk1flzlblif7z5ib94mvl12vvwlzhi42vnzrdnaimr80kpal9"))))
1096 (build-system pyproject-build-system)
1097 (native-inputs
1098 (list python-jaraco-itertools
1099 python-jaraco-test
1100 python-pytest
1101 python-setuptools
1102 python-setuptools-scm))
1103 (home-page "https://github.com/jaraco/zipp")
1104 (synopsis "Backport of pathlib-compatible object wrapper for zip files")
1105 (description
1106 "This package provides a @code{pathlib}-compatible @code{Zipfile} object
1107wrapper. It provides a backport of the @code{zipfile.Path} object.")
1108 (license license:expat)))
1109
1110(define-public python-deflate
1111 (package
1112 (name "python-deflate")
1113 (version "0.8.0")
1114 (source
1115 (origin
1116 (method url-fetch)
1117 (uri (pypi-uri "deflate" version))
1118 (sha256
1119 (base32 "0cgk118r3sglrjqirr22y7mr7fnhijhwd3v6isykjbf2m2dqyy41"))))
1120 (build-system pyproject-build-system)
1121 (arguments
1122 (list
1123 #:phases #~(modify-phases %standard-phases
1124 (add-after 'unpack 'libdeflate-prefix
1125 (lambda _
1126 (setenv "LIBDEFLATE_PREFIX"
1127 #$(this-package-input "libdeflate")))))))
1128 (native-inputs (list cmake-minimal python-pytest python-scikit-build-core))
1129 (inputs (list libdeflate))
1130 (home-page "https://github.com/dcwatson/deflate")
1131 (synopsis "Python wrapper for @code{libdeflate}")
1132 (description "This package contains a very thin Python wrapper for
1133@code{libdeflate}.")
1134 (license license:expat)))
1135
1136(define-public python-xopen
1137 (package
1138 (name "python-xopen")
1139 ;; TODO: Newer versions require zlib-ng:
1140 ;; <https://github.com/zlib-ng/zlib-ng>,
1141 ;; <https://github.com/pycompression/python-zlib-ng>.
1142 (version "1.8.0")
1143 (source
1144 (origin
1145 (method url-fetch)
1146 (uri (pypi-uri "xopen" version))
1147 (sha256
1148 (base32 "0h08wpd5zwnlzwnbbbhahbcs69kzsfbaaigqw0viq6ri8n4zrh00"))))
1149 (build-system pyproject-build-system)
1150 ;; tests: 343 passed, 5 skipped
1151 (native-inputs
1152 (list python-pytest
1153 python-pytest-timeout
1154 python-setuptools
1155 python-setuptools-scm))
1156 (propagated-inputs
1157 (list pigz python-isal))
1158 (home-page "https://github.com/marcelm/xopen/")
1159 (synopsis "Open compressed files transparently")
1160 (description "This module provides an @code{xopen} function that works
1161like Python's built-in @code{open} function, but can also deal with compressed
1162files. Supported compression formats are gzip, bzip2 and, xz, and are
1163automatically recognized by their file extensions. The focus is on being as
1164efficient as possible on all supported Python versions.")
1165 (license license:expat)))
1166
1167(define-public python-zipstream-ng
1168 (package
1169 (name "python-zipstream-ng")
1170 (version "1.9.0")
1171 (source
1172 (origin
1173 (method url-fetch)
1174 (uri (pypi-uri "zipstream_ng" version))
1175 (sha256
1176 (base32 "1snsczv5v2fvndxi8hbgd42ghhiwc20cdz8dz3xpw4rdh8q41nd0"))))
1177 (build-system pyproject-build-system)
1178 (native-inputs
1179 (list python-pytest python-setuptools python-wheel))
1180 (home-page "https://github.com/pR0Ps/zipstream-ng")
1181 (synopsis "Streamable zip file generator")
1182 (description
1183 "This package provides a modern and easy to use streamable zip file
1184generator")
1185 (license license:lgpl3)))
1186
1187(define-public python-zlib-ng
1188 (package
1189 (name "python-zlib-ng")
1190 (version "1.0.0")
1191 (source
1192 (origin
1193 (method git-fetch)
1194 (uri (git-reference
1195 (url "https://github.com/pycompression/python-zlib-ng")
1196 (commit (string-append "v" version))))
1197 (file-name (git-file-name name version))
1198 (sha256
1199 (base32 "05s0023hhdk59339mmd20yycy6ldssa2kmxmzflkqlab5mpx5wxp"))))
1200 (build-system pyproject-build-system)
1201 (arguments
1202 (list
1203 #:phases
1204 #~(modify-phases %standard-phases
1205 (add-after 'unpack 'use-system-zlib-ng
1206 (lambda _
1207 (copy-recursively
1208 #$(package-source (this-package-input "zlib-ng"))
1209 "src/zlib_ng/zlib-ng")
1210 (setenv "PYTHON_ZLIB_NG_LINK_DYNAMIC " "true"))))))
1211 (native-inputs
1212 (list cmake-minimal
1213 python-pytest
1214 python-setuptools
1215 python-setuptools-scm))
1216 (inputs
1217 (list zlib-ng))
1218 (home-page "https://github.com/pycompression/python-zlib-ng")
1219 (synopsis "Drop-in replacement for zlib and gzip modules using zlib-ng")
1220 (description
1221 "This package provides a faster @code{zlib} and @code{gzip} compatible
1222compression and decompression by providing Python bindings for the
1223@code{zlib-ng} library.")
1224 (license license:psfl)))
1225
1226(define-public python-zopfli
1227 (package
1228 (name "python-zopfli")
1229 (version "0.4.0")
1230 (source
1231 (origin
1232 (method git-fetch)
1233 (uri (git-reference
1234 (url "https://github.com/fonttools/py-zopfli")
1235 (commit (string-append "v" version))))
1236 (file-name (git-file-name name version))
1237 (sha256
1238 (base32 "1figk175w1q8ww8ryh2ypg7jjlkjbnry3gwhn8d56xh5icwgwi5g"))))
1239 (build-system pyproject-build-system)
1240 (arguments
1241 (list
1242 #:phases
1243 #~(modify-phases %standard-phases
1244 (add-after 'unpack 'use-system-zopfli
1245 (lambda _
1246 (setenv "USE_SYSTEM_ZOPFLI" "1"))))))
1247 (native-inputs
1248 (list python-pytest
1249 python-setuptools
1250 python-setuptools-scm))
1251 (inputs
1252 (list zopfli))
1253 (home-page "https://github.com/fonttools/py-zopfli")
1254 (synopsis "Python bindings for Zopfli")
1255 (description "@code{pyzopfli} is a straight forward wrapper around the
1256@code{ZlibCompress} method of the the @code{zopfli} library.")
1257 (license license:asl2.0)))
1258
1259(define-public python-zstandard
1260 (package
1261 (name "python-zstandard")
1262 (version "0.23.0")
1263 (source
1264 (origin
1265 (method url-fetch)
1266 (uri (pypi-uri "zstandard" version))
1267 (sha256
1268 (base32 "02dwqq5dw73zypvwpadscra8x6rwbglblh57yxl5y9g710nwdn5j"))))
1269 (build-system pyproject-build-system)
1270 ;; TODO: Unbunle zstd.
1271 (arguments
1272 (list
1273 #:phases
1274 #~(modify-phases %standard-phases
1275 (add-after 'unpack 'patch-build-system
1276 (lambda _
1277 (substitute* "pyproject.toml"
1278 ((":__legacy__") ""))))
1279 (add-before 'check 'build-extensions
1280 (lambda _
1281 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
1282 (native-inputs
1283 (list python-pytest python-setuptools))
1284 (propagated-inputs
1285 (list python-cffi))
1286 (home-page "https://github.com/indygreg/python-zstandard")
1287 (synopsis "Zstandard bindings for Python")
1288 (description "This project provides Python bindings for interfacing with
1289the Zstandard compression library. A C extension and CFFI interface are
1290provided.")
1291 (license license:bsd-3)))
1292
1293(define-public python-pyzstd
1294 (package
1295 (name "python-pyzstd")
1296 (version "0.18.0")
1297 (source
1298 (origin
1299 (method git-fetch)
1300 (uri (git-reference
1301 (url "https://github.com/Rogdham/pyzstd")
1302 (commit version)))
1303 (file-name (git-file-name name version))
1304 (sha256
1305 (base32 "08ih7vr3rzwrzpzwhk1k94z5nm9mmvls7c6w8wsqncf0kyl8d7yp"))
1306 (modules '((guix build utils)))
1307 (snippet '(begin
1308 ;; Remove a bundled copy of the zstd sources.
1309 (delete-file-recursively "zstd")
1310 (mkdir "zstd")
1311 (call-with-output-file "zstd/LICENSE"
1312 (const #t))))))
1313 (build-system pyproject-build-system)
1314 (arguments
1315 (list
1316 #:configure-flags
1317 #~'(("--build-option" . "--dynamic-link-zstd"))))
1318 (inputs (list `(,zstd "lib")))
1319 (native-inputs (list python-pytest python-setuptools))
1320 (propagated-inputs (list python-typing-extensions))
1321 (home-page "https://github.com/Rogdham/pyzstd")
1322 (synopsis "Zstandard bindings for Python")
1323 (description
1324 "This package provides Python bindings to the Zstandard (zstd)
1325compression library. The API is similar to Python's bz2/lzma/zlib module.")
1326 (license license:bsd-3)))