Parallel random access to gzip files
Project description
This module provides a PragzipFile class, which can be used to seek inside gzip files without having to decompress them first.
Alternatively, you can use this simply as a parallelized gzip decoder as a replacement for Python's builtin gzip
module in order to fully utilize all your cores.
The random seeking support is the same as provided by indexed_gzip but further speedups are realized at the cost of higher memory usage thanks to a least-recently-used cache in combination with a parallelized prefetcher.
Table of Contents
- Installation
- Usage
- Performance comparison with gzip module
- Internal Architecture
- Tracing the Decoder
Installation
You can simply install it from PyPI:
python3 -m pip install --upgrade pip # Recommended for newer manylinux wheels
python3 -m pip install pragzip
The latest unreleased development version can be tested out with:
python3 -m pip install --force-reinstall 'git+https://github.com/mxmlnkn/indexed_bzip2.git@master#egginfo=pragzip&subdirectory=python/pragzip'
And to build locally, you can use build
and install the wheel:
cd python/pragzip
rm -rf dist
python3 -m build .
python3 -m pip install --force-reinstall --user dist/*.whl
Usage
Command Line Tool
pragzip --help
# Parallel decoding: 1.7 s
time pragzip -d -c -P 0 sample.gz | wc -c
# Serial decoding: 22 s
time gzip -d -c sample.gz | wc -c
Python Library
Simple open, seek, read, and close
from pragzip import PragzipFile
file = PragzipFile( "example.gz", parallelization = os.cpu_count() )
# You can now use it like a normal file
file.seek( 123 )
data = file.read( 100 )
file.close()
The first call to seek will ensure that the block offset list is complete and therefore might create them first. Because of this the first call to seek might take a while.
Use with context manager
import os
import pragzip
with pragzip.open( "example.gz", parallelization = os.cpu_count() ) as file:
file.seek( 123 )
data = file.read( 100 )
Storing and loading the block offset map
The creation of the list of gzip blocks can take a while because it has to decode the gzip file completely. To avoid this setup when opening a gzip file, the block offset list can be exported and imported.
Open a pure Python file-like object for indexed reading
import io
import os
import pragzip as pragzip
with open( "example.gz", 'rb' ) as file:
in_memory_file = io.BytesIO( file.read() )
with pragzip.open( in_memory_file, parallelization = os.cpu_count() ) as file:
file.seek( 123 )
data = file.read( 100 )
Via Ratarmount
pragzip
is planned to be used as a backend inside ratarmount with version 0.12.
Then, you can use ratarmount to mount single gzip files easily.
base64 /dev/urandom | head -c $(( 4 * 1024 * 1024 * 1024 )) | gzip > sample.gz
# Serial decoding: 23 s
time gzip -c -d sample.gz | wc -c
python3 -m pip install --user ratarmount
ratarmount sample.gz mounted
# Parallel decoding: 3.5 s
time cat mounted/sample | wc -c
# Random seeking to the middle of the file and reading 1 MiB: 0.287 s
time dd if=mounted/sample bs=$(( 1024 * 1024 )) \
iflag=skip_bytes,count_bytes skip=$(( 2 * 1024 * 1024 * 1024 )) count=$(( 1024 * 1024 )) | wc -c
C++ library
Because it is written in C++, it can of course also be used as a C++ library.
In order to make heavy use of templates and to simplify compiling with Python setuptools
, it is mostly header-only so that integration it into another project should be easy.
The license is also permissive enough for most use cases.
I currently did not yet test integrating it into other projects other than simply manually copying the source in src/core
, src/pragzip
, and if integrated zlib is desired also src/external/zlib
.
If you have suggestions and wishes like support with CMake or Conan, please open an issue.
Performance comparison with gzip module when a gzip index exists
These are simple timing tests for reading all the contents of a gzip file sequentially.
import gzip
import time
with gzip.open( gzipFilePath ) as file:
t0 = time.time()
while file.read( 4*1024*1024 ):
pass
t1 = time.time()
print( f"Decoded file in {t1-t0}s" )
The usage of pragzip is slightly different:
import indexed_gzip
import pragzip
import time
with indexed_gzip.IndexedGzipFile(gzipFilePath) as file:
file.build_full_index()
file.export_index(gzipFilePath + ".index")
# parallelization = 0 means that it is automatically using all available cores.
for parallelization in [0, 1, 2, 6, 12, 24, 32]:
with pragzip.PragzipFile(gzipFilePath, parallelization = parallelization) as file:
file.set_block_offsets(open(gzipFilePath + ".index", 'rb'))
t0 = time.time()
while file.read( 4*1024*1024 ):
pass
t1 = time.time()
print( f"Decoded file in {t1-t0}s" )
Results for an AMD Ryzen 3900X 12-core (24 virtual cores) processor and with gzipFilePath=4GB-base64.gz
, which is a 4 GiB gzip compressed file with base64 random data.
Module | Runtime / s |
---|---|
gzip | 17.2 |
pragzip with parallelization = 0 | 1.25 |
pragzip with parallelization = 1 | 13.8 |
pragzip with parallelization = 2 | 7.0 |
pragzip with parallelization = 6 | 2.5 |
pragzip with parallelization = 12 | 1.47 |
pragzip with parallelization = 24 | 1.25 |
pragzip with parallelization = 32 | 1.33 |
The speedup of pragzip
over the gzip
module with parallelization = 0
is 17.2/1.25 = 14.
When using only one core, pragzip
is faster by (17.2-13.8)/17.2 = 20%.
Internal Architecture
The main part of the internal architecture used for parallelizing is the same as used for indexed_bzip2.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pragzip-0.3.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | abdee97e90e174eeab68252a678fba846d6b06457f9214d500a472464d1896af |
|
MD5 | 4d0670a2b76391110c528259fec46018 |
|
BLAKE2b-256 | 3720160f3568833d235034ab2512d2c12cfa552b5f38b540b606751b999c22c3 |
Hashes for pragzip-0.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 36a2945a3919ecc367f6291c0d2a23af7882960d4448b6f396d14de2732abe5b |
|
MD5 | e090ce5a23394944d56780f7b93c5275 |
|
BLAKE2b-256 | 23c5b4ec103fd6005235bc612d176c8ebf6ca46fd73d9048c7a1c7f266a66d7f |
Hashes for pragzip-0.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0756b2a55727dac82b2462e32e82aacebe1af3d5a829a726ab74c53dca6e95bb |
|
MD5 | 9976dab7e910798b44396c796d6f334d |
|
BLAKE2b-256 | 9262af59b8e834e8a5121d33b32cceeb66c515296c367fde97781d6fb0f83d37 |
Hashes for pragzip-0.3.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe43c80f0daa8c38904d55326506af4cd61a33dc3a0ce3c7a05fa1b88bea610e |
|
MD5 | 5116fcc70ab7a2f4cc8014129a3baa8b |
|
BLAKE2b-256 | ad248a02c54b4f3b7daccaaf2cc772c871a659cce48f838258447856a1f399a0 |
Hashes for pragzip-0.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 51f492cb91a0e49043622e0d7292c71c4bd3f1823afe79bd8f809443d11393ba |
|
MD5 | 8ae8b41c4e675da1c66742ec10ed8ce0 |
|
BLAKE2b-256 | 1af1828996fa40334822ea488b310e573fd3efe576695c9daa1763bd2196f587 |
Hashes for pragzip-0.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1fdd44cc77f494091818b83d27d848ee02e43df4d249bd7465f17f5e792f44b1 |
|
MD5 | 31dba88f32e5c82c17e629477dc9feb5 |
|
BLAKE2b-256 | 9627af660fb46e772ae85c337570968a5d8cc0bfcb7ab482e3df38a48133b243 |
Hashes for pragzip-0.3.0-pp37-pypy37_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75a2588bfb7fff14ff10afb77c94ae047f9d2ba0ec2f517bb72f2581e653f613 |
|
MD5 | eac4c93852f579f319939fec984f68b8 |
|
BLAKE2b-256 | 54c0446003fb9f7dbc05de57ccd7f5e757dfc82cf3026edb974542ba2d5a39e0 |
Hashes for pragzip-0.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 145c2ea5f57e4341051a3f45cb0eebeb8c2438186f4668e61b0beb62d353aaa1 |
|
MD5 | b8538fe8f8edc4a1fe59b48cb978b058 |
|
BLAKE2b-256 | 7a9fe9e38092c31a00146efe98fa54f70e1269f52c1a417fd41ed7b86b9be710 |
Hashes for pragzip-0.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f5f516702fdda93a8c5b6e8c7021ff24574c83f633ad174cc5e5052555cb427 |
|
MD5 | 4398eceea92686d014a645eb5aca3f58 |
|
BLAKE2b-256 | d2d632da82e65b1557ccf5a18525808584f0b266dbde38d67b9efbbc7b8b197a |
Hashes for pragzip-0.3.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2e000fddc6fa4cf9753ecff42df2690cfd992521331e417db5530f6458fe3b6 |
|
MD5 | d31872e45a6a43b7b8cc8d32aca6f770 |
|
BLAKE2b-256 | 6267a500a03724d7f922b52ae5c7c33b1f37c87385a7cf6ef0c82738ff58a4b4 |
Hashes for pragzip-0.3.0-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7563d19f9372bbcb54c5d1697d9d4a889e8be659f697354cb1bb772a8fda4adc |
|
MD5 | 00535a5638d29bc169c34a176045d326 |
|
BLAKE2b-256 | 8e7ba7d6a6028acc835f54e31e71645a7aa18ab5cf374b6ae5ed4db1ebf7d21c |
Hashes for pragzip-0.3.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae7c87cb61c7524dc298c54b226fd91bad844e856bd956ea17bd5b2b0adecd5b |
|
MD5 | 9f23341f04dff5b3d6141830b05d2701 |
|
BLAKE2b-256 | f27eafaf02e11a04122c5d200f7c54ed5c41f961be5a235f68c7759676a485d0 |
Hashes for pragzip-0.3.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87984f2aac1c2c99d8f826903545c6bdeae654141e5062901999a23c4d2d398b |
|
MD5 | cd9dd3f5e8fc4ca5ff38e7609dc7f69d |
|
BLAKE2b-256 | b3f69558bf2daee0ff3f997794c9608961f0a09577467b5bfef512161f571d9b |
Hashes for pragzip-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47cb28fbaaac66f418cca5db7e9163bd672c07c41c49e840c5961b211eba6577 |
|
MD5 | 2fbbef1893980905a2e580fabacedc24 |
|
BLAKE2b-256 | 75fbbb875c120070c428f790436f36800b6173b799d2ab09daef7c779bc92876 |
Hashes for pragzip-0.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da061cc46446bc31dc83122ba007a3c10990bd8ebcd003341d37959168736cd9 |
|
MD5 | 1c7c5cf6355041c4b4dd407a61b3ba9e |
|
BLAKE2b-256 | 8ab7af8a76df0f0aede1267131306c46470ff739a455a5b5e04d1c6bc02bf986 |
Hashes for pragzip-0.3.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e00209b4a872c52724dacadb5043df26d224342edbd678e4f30992ace30174c |
|
MD5 | d745f183afd486e8c77f74d7ee5a045c |
|
BLAKE2b-256 | f9f702725d4ac5013f97556ebb3c1cff14ce922ef135e9b493af3069c3366534 |
Hashes for pragzip-0.3.0-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72ed7a7a57c6d7be34bdc438bc64ad24219cb779c50b9132b5d70a6a909aea38 |
|
MD5 | d426280777de52da4257469b76dd4bd1 |
|
BLAKE2b-256 | 09da594281a4042eb21344fd8b0aaf78b5330829887466a0e116045170f1e92f |
Hashes for pragzip-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db51d8178db77ab17b0b40607cc2f77c0fb67063b33adc331e3d86fb6de91098 |
|
MD5 | b63987cbe7f4b9234b53df5915561a52 |
|
BLAKE2b-256 | 1de9fcb13ab05d4f3054721b5afb6859c49dda90f9be259576e1fe82c1961ed4 |
Hashes for pragzip-0.3.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b85c049f88f2c7736d4533dce1ef81daa0fb3d1af65b19fefa4fd2461ad13f2c |
|
MD5 | b221b12cc725a0164de9036ba8aa4a7a |
|
BLAKE2b-256 | e0c1f22b3802f54486f1d7ab5bb650c71f1100ee2609ec24d4b251069b912975 |
Hashes for pragzip-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd992cbe59ebcb9ccc21abb1091a788fb298580b8eb47e62ad081ffc87171bc2 |
|
MD5 | 523fa00520503a78de6320ccedc83ac7 |
|
BLAKE2b-256 | b353bca62590ed2724d1867381b3be968208f2f7f28668651939e0a764eaf654 |
Hashes for pragzip-0.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3c8c024b8953aae9e9a2615b569f6778c7a0216702472c1c1decc6c12855d73 |
|
MD5 | ebea1ff9f4b161e4c0533892c70f3a16 |
|
BLAKE2b-256 | 543d0b6d4a1689bb79cc5ffa3b25dbcb1402b4e29adb409d7fde770edf8177a0 |
Hashes for pragzip-0.3.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d058f927bf1dc1434aac9fd4b0bd3739272bc6b6da4f8b469f6ecdf7083293e |
|
MD5 | ab3806d7b5886f55fbe7b736a1a17061 |
|
BLAKE2b-256 | d2e167877a12b6aecad8d67e97de21f836a063b1926439b6b0d0a8eadf19f71a |
Hashes for pragzip-0.3.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d199707f3bc9c6dd648bee0b895fc22d24a5718bbeaa828dfe0bfb943dc4060 |
|
MD5 | 4263e5e55db476184ac92d1cbe158600 |
|
BLAKE2b-256 | 7911ccf3b374801c69a3dcfc1151236c4b65ae182223c60823a5f76ced918e55 |
Hashes for pragzip-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2ac89045e30a1bc0f6d36c41343ce384889ebd183007319305eefd940223469 |
|
MD5 | 6bb2859b35e9b43c1c6f3a26557a000c |
|
BLAKE2b-256 | d6a482580ab46ace808736117d62c6cec14b0c4b8d32464f95db4d26c29057ff |
Hashes for pragzip-0.3.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26a1a8797fd85d05651bd3dfb5a2059d9694936365fb4e46159c4c477198778a |
|
MD5 | 18287fc610667f7ba8937fc9d1eb1be8 |
|
BLAKE2b-256 | fc4b7aed7156d9790b38f497658ffc5769a116f6414fb6e6d844d61c7ec932c2 |
Hashes for pragzip-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e73735747f507072c3eff61a99d1191bb6991829bc764d173e2c22bf145c1cb |
|
MD5 | 8550bae3b2fcc793df67fe55c3f45b8c |
|
BLAKE2b-256 | ee0717beaad7628f0f1f116a53273ec298efff4527d2f97804489ac54be4b8b9 |
Hashes for pragzip-0.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c1c85d5ad01810b825f8a2ffd47614b0210e07ea4da9dadad3c82025d2b6144 |
|
MD5 | 6ce328008dd62d17bda4d990d1d47a97 |
|
BLAKE2b-256 | 0ca77e68ce82057d11a841bd2d1383334f58518c6390bcd011730e4f7537fe2f |
Hashes for pragzip-0.3.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9203f9a9cc2a990b231ca24d5d1316d42a1b5a3c8c171832cdcc0c1163e56ee |
|
MD5 | 69c7ae58a3895ed3d25f7e9b982a8db6 |
|
BLAKE2b-256 | eb124222a7e6eee56e88379b9928387c6626691948c12329850e8a44e7089e72 |
Hashes for pragzip-0.3.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ff8ceb3545169af3ebb754bb62e0b3b3cea4f3004f3d256186e3e99202143ce5 |
|
MD5 | 9ee4f129a9086fab25d0268e9b213277 |
|
BLAKE2b-256 | 46f660ff9692f9c09d05b097d01ac692b62494014a1806b2da1bb0c2f0793fb1 |
Hashes for pragzip-0.3.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f07f7557655fa789b04b6cbabfc963b0868ddaaafa14a4e593f7a2d45bbd8796 |
|
MD5 | 4a87504dacb50f6c6e730ab806ab9804 |
|
BLAKE2b-256 | 56c5e4b743f3a7e06a59bea3de20f0508f237cd0cf5d413ae66912d17e115dfe |
Hashes for pragzip-0.3.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7607aa2fb5c5bfe7a99666d2ea3690e1e7165732c36f85a9e9c8efb811151c99 |
|
MD5 | 43c8d5118924c7478a11b7dc52f515be |
|
BLAKE2b-256 | 70c76334bd22b99076a8755c83812c7bbc23909724ad7ec6f29a4392f92321ff |
Hashes for pragzip-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fa440880d219610f4d75992fad1c55902af20ce1c34f033b86fdbdbf97234b6 |
|
MD5 | 348964d2786feefc408f41c77c98625a |
|
BLAKE2b-256 | 5655db1c58a83e68553c62794eb45e80320a0f9ef83d238c970265e94eae4911 |
Hashes for pragzip-0.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 03f7068b96639bc1027fe72d47d96832e7e62d1ab97ba978b77ae81a8ca7da2c |
|
MD5 | a7934eb791ba2749ecd008fbbeb458f3 |
|
BLAKE2b-256 | d32f6ebe4dc7aa4cfa75b984bdbb104ff5a4072ad22734225f4ba03bcd7bfba6 |
Hashes for pragzip-0.3.0-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 88e28cc0db16d95b16f215fe202194356d0e654a2ae59494ba11b39f3d4fbc4b |
|
MD5 | de6a677a40fb9d55b0d2a5dc5c1588b5 |
|
BLAKE2b-256 | 780064f78ccfe562a2c5d0614af380f0bc1e37ccd71cedfe6a2b3441fa97114c |
Hashes for pragzip-0.3.0-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0129a0f116dd2a1fd9e6270089f464c3c84c374c69d08ece3a1832727df849fc |
|
MD5 | aa5913dbac556eb776f187bcdc115143 |
|
BLAKE2b-256 | 96186da05846e907c049332fe0e5d7ad38a5e09fa90994035f8890d53d96b32d |
Hashes for pragzip-0.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a668f76b3828a2cb73296961ef571db15a8bc5cfdc3313edf8a31ec28d24c1c |
|
MD5 | c18f8f087a013bf7a7622bcfc1e76da7 |
|
BLAKE2b-256 | b71d34888e8e30540c5c6750525208f522ac5490455583be356401fd720f10ed |
Hashes for pragzip-0.3.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27d1bbf2c25d342bdb8abfa391f4dab74f99b2691e3a1117b42b2489312e81a5 |
|
MD5 | ee44ef4d735a7bf64b673b527b1368cf |
|
BLAKE2b-256 | b79b31fe4a4e1c3ebaf7994c7012141db053b8e12991558828a9cdf2879a3675 |
Hashes for pragzip-0.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb2bf6778c17ebe1258121cc9c7df29961989a19e5524bae6a078be9f6a07bac |
|
MD5 | a5d6dfe6ef5f2c2f0db829db8f36e409 |
|
BLAKE2b-256 | 42fdd6161041ec85d1ef95db35d1221905ca6b0fbcce88fa93e88852ad34e70c |
Hashes for pragzip-0.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e60449186dd8c68867f7a8fcc1fc91d1e7508fbb5d34d914728ac8456d0dd750 |
|
MD5 | 4853c0d16878a69165845b0a8d22cdaf |
|
BLAKE2b-256 | ca97fd133536fb83bb473a2b28bfc507d78002073fc93767a7e1305e582f327f |
Hashes for pragzip-0.3.0-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0f188711041d86b4e12ba703f535fb15546110b1eb5813b7d88b0defbb22c44 |
|
MD5 | d20bdc25f0903afc84176bdc64c3c883 |
|
BLAKE2b-256 | 53e7a4642c53bd474b8447cdd7f845c1e5c3681caaee9f40d2efb21a46304854 |
Hashes for pragzip-0.3.0-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f1ee4908a86db622a78e6b59aef4f0be533ce2eacc8f4eeaef19c8a1a6f6a45 |
|
MD5 | ecb9c4e8676086c4752f33c8e85bfecd |
|
BLAKE2b-256 | 0a054a4f3f62f2a39fb2ca7b4c89e916595842725672b3c7f054e562ae747767 |
Hashes for pragzip-0.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bcd61223ed36c12d1b0aaf909c152d55122aaa5b0d3ec8aac14e29f78a6c6514 |
|
MD5 | a8f7bec4fea021a123a1d89f268eef2e |
|
BLAKE2b-256 | f6dc1b5bb70d7590d87d8f196edae0761b7b8e3485f38880a73d99616e80e882 |
Hashes for pragzip-0.3.0-cp36-cp36m-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19d6113b8f079c4223a84d2b460236ffc00dcde1b6a6ab6dccc3b55b10315f9b |
|
MD5 | 721fa125af220f46aa9096bd6a391aa3 |
|
BLAKE2b-256 | e78707d491f461367fc7c751f63d0e81355447449727f10ecea53c58d680c2cc |
Hashes for pragzip-0.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2aafdd3fe76eb312f6ff2f910c189425d90fbafb0fe04dec2a4623f7324fca8 |
|
MD5 | b8f776795239550721ca917ddf8daf88 |
|
BLAKE2b-256 | 3ea0c5509afcea9ce2e5b64c965d657b3067d611d79d09b8179f35a0c3d629f8 |
Hashes for pragzip-0.3.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7d674510e336d6f5c6f8e08966732fe1215e0f2ece3aa3088c1d154d4776d2b |
|
MD5 | 168687df115b5766cd73dc6b96460f0b |
|
BLAKE2b-256 | afdbe2cc4f8761dd200c10532f8a528c50d187b320c5514ecc7adafb89db3485 |