Skip to main content

Zstandard bindings for Python

Project description

This project provides Python bindings for interfacing with the Zstandard compression library. A C extension and CFFI interface are provided.

The primary goal of the project is to provide a rich interface to the underlying C API through a Pythonic interface while not sacrificing performance. This means exposing most of the features and flexibility of the C API while not sacrificing usability or safety that Python provides.

The canonical home for this project lives in a Mercurial repository run by the author. For convenience, that repository is frequently synchronized to https://github.com/indygreg/python-zstandard.

ci-status

Requirements

This extension is designed to run with Python 2.7, 3.5, 3.6, 3.7, and 3.8 on common platforms (Linux, Windows, and OS X). On PyPy (both PyPy2 and PyPy3) we support version 6.0.0 and above. x86 and x86_64 are well-tested on Windows. Only x86_64 is well-tested on Linux and macOS.

Installing

This package is uploaded to PyPI at https://pypi.python.org/pypi/zstandard. So, to install this package:

$ pip install zstandard

Binary wheels are made available for some platforms. If you need to install from a source distribution, all you should need is a working C compiler and the Python development headers/libraries. On many Linux distributions, you can install a python-dev or python-devel package to provide these dependencies.

Packages are also uploaded to Anaconda Cloud at https://anaconda.org/indygreg/zstandard. See that URL for how to install this package with conda.

Legacy Format Support

To enable legacy zstd format support which is needed to handle files compressed with zstd < 1.0 you need to provide an installation option:

$ pip install zstandard --install-option="--legacy"

and since pip 7.0 it is possible to have the following line in your requirements.txt:

zstandard --install-option="--legacy"

Performance

zstandard is a highly tunable compression algorithm. In its default settings (compression level 3), it will be faster at compression and decompression and will have better compression ratios than zlib on most data sets. When tuned for speed, it approaches lz4’s speed and ratios. When tuned for compression ratio, it approaches lzma ratios and compression speed, but decompression speed is much faster. See the official zstandard documentation for more.

zstandard and this library support multi-threaded compression. There is a mechanism to compress large inputs using multiple threads.

The performance of this library is usually very similar to what the zstandard C API can deliver. Overhead in this library is due to general Python overhead and can’t easily be avoided by any zstandard Python binding. This library exposes multiple APIs for performing compression and decompression so callers can pick an API suitable for their need. Contrast with the compression modules in Python’s standard library (like zlib), which only offer limited mechanisms for performing operations. The API flexibility means consumers can choose to use APIs that facilitate zero copying or minimize Python object creation and garbage collection overhead.

This library is capable of single-threaded throughputs well over 1 GB/s. For exact numbers, measure yourself. The source code repository has a bench.py script that can be used to measure things.

API

To interface with Zstandard, simply import the zstandard module:

import zstandard

It is a popular convention to alias the module as a different name for brevity:

import zstandard as zstd

This module attempts to import and use either the C extension or CFFI implementation. On Python platforms known to support C extensions (like CPython), it raises an ImportError if the C extension cannot be imported. On Python platforms known to not support C extensions (like PyPy), it only attempts to import the CFFI implementation and raises ImportError if that can’t be done. On other platforms, it first tries to import the C extension then falls back to CFFI if that fails and raises ImportError if CFFI fails.

To change the module import behavior, a PYTHON_ZSTANDARD_IMPORT_POLICY environment variable can be set. The following values are accepted:

default

The behavior described above.

cffi_fallback

Always try to import the C extension then fall back to CFFI if that fails.

cext

Only attempt to import the C extension.

cffi

Only attempt to import the CFFI implementation.

In addition, the zstandard module exports a backend attribute containing the string name of the backend being used. It will be one of cext or cffi (for C extension and cffi, respectively).

The types, functions, and attributes exposed by the zstandard module are documented in the sections below.

ZstdCompressor

The ZstdCompressor class provides an interface for performing compression operations. Each instance is essentially a wrapper around a ZSTD_CCtx from the C API.

Each instance is associated with parameters that control compression behavior. These come from the following named arguments (all optional):

level

Integer compression level. Valid values are between 1 and 22.

dict_data

Compression dictionary to use.

Note: When using dictionary data and compress() is called multiple times, the ZstdCompressionParameters derived from an integer compression level and the first compressed data’s size will be reused for all subsequent operations. This may not be desirable if source data size varies significantly.

compression_params

A ZstdCompressionParameters instance defining compression settings.

write_checksum

Whether a 4 byte checksum should be written with the compressed data. Defaults to False. If True, the decompressor can verify that decompressed data matches the original input data.

write_content_size

Whether the size of the uncompressed data will be written into the header of compressed data. Defaults to True. The data will only be written if the compressor knows the size of the input data. This is often not true for streaming compression.

write_dict_id

Whether to write the dictionary ID into the compressed data. Defaults to True. The dictionary ID is only written if a dictionary is being used.

threads

Enables and sets the number of threads to use for multi-threaded compression operations. Defaults to 0, which means to use single-threaded compression. Negative values will resolve to the number of logical CPUs in the system. Read below for more info on multi-threaded compression. This argument only controls thread count for operations that operate on individual pieces of data. APIs that spawn multiple threads for working on multiple pieces of data have their own threads argument.

compression_params is mutually exclusive with level, write_checksum, write_content_size, write_dict_id, and threads.

Unless specified otherwise, assume that no two methods of ZstdCompressor instances can be called from multiple Python threads simultaneously. In other words, assume instances are not thread safe unless stated otherwise.

Utility Methods

frame_progression() returns a 3-tuple containing the number of bytes ingested, consumed, and produced by the current compression operation.

memory_size() obtains the memory utilization of the underlying zstd compression context, in bytes.:

cctx = zstd.ZstdCompressor()
memory = cctx.memory_size()

Simple API

compress(data) compresses and returns data as a one-shot operation.:

cctx = zstd.ZstdCompressor()
compressed = cctx.compress(b'data to compress')

The data argument can be any object that implements the buffer protocol.

Stream Reader API

stream_reader(source) can be used to obtain an object conforming to the io.RawIOBase interface for reading compressed output as a stream:

with open(path, 'rb') as fh:
    cctx = zstd.ZstdCompressor()
    reader = cctx.stream_reader(fh)
    while True:
        chunk = reader.read(16384)
        if not chunk:
            break

        # Do something with compressed chunk.

Instances can also be used as context managers:

with open(path, 'rb') as fh:
    with cctx.stream_reader(fh) as reader:
        while True:
            chunk = reader.read(16384)
            if not chunk:
                break

            # Do something with compressed chunk.

When the context manager exits or close() is called, the stream is closed, underlying resources are released, and future operations against the compression stream will fail.

The source argument to stream_reader() can be any object with a read(size) method or any object implementing the buffer protocol.

stream_reader() accepts a size argument specifying how large the input stream is. This is used to adjust compression parameters so they are tailored to the source size.:

with open(path, 'rb') as fh:
    cctx = zstd.ZstdCompressor()
    with cctx.stream_reader(fh, size=os.stat(path).st_size) as reader:
        ...

If the source is a stream, you can specify how large read() requests to that stream should be via the read_size argument. It defaults to zstandard.COMPRESSION_RECOMMENDED_INPUT_SIZE.:

with open(path, 'rb') as fh:
    cctx = zstd.ZstdCompressor()
    # Will perform fh.read(8192) when obtaining data to feed into the
    # compressor.
    with cctx.stream_reader(fh, read_size=8192) as reader:
        ...

The stream returned by stream_reader() is neither writable nor seekable (even if the underlying source is seekable). readline() and readlines() are not implemented because they don’t make sense for compressed data. tell() returns the number of compressed bytes emitted so far.

Streaming Input API

stream_writer(fh) allows you to stream data into a compressor.

Returned instances implement the io.RawIOBase interface. Only methods that involve writing will do useful things.

The argument to stream_writer() must have a write(data) method. As compressed data is available, write() will be called with the compressed data as its argument. Many common Python types implement write(), including open file handles and io.BytesIO.

The write(data) method is used to feed data into the compressor.

The flush([flush_mode=FLUSH_BLOCK]) method can be called to evict whatever data remains within the compressor’s internal state into the output object. This may result in 0 or more write() calls to the output object. This method accepts an optional flush_mode argument to control the flushing behavior. Its value can be any of the FLUSH_* constants.

Both write() and flush() return the number of bytes written to the object’s write(). In many cases, small inputs do not accumulate enough data to cause a write and write() will return 0.

Calling close() will mark the stream as closed and subsequent I/O operations will raise ValueError (per the documented behavior of io.RawIOBase). close() will also call close() on the underlying stream if such a method exists.

Typically usage is as follows:

cctx = zstd.ZstdCompressor(level=10)
compressor = cctx.stream_writer(fh)

compressor.write(b'chunk 0\n')
compressor.write(b'chunk 1\n')
compressor.flush()
# Receiver will be able to decode ``chunk 0\nchunk 1\n`` at this point.
# Receiver is also expecting more data in the zstd *frame*.

compressor.write(b'chunk 2\n')
compressor.flush(zstd.FLUSH_FRAME)
# Receiver will be able to decode ``chunk 0\nchunk 1\nchunk 2``.
# Receiver is expecting no more data, as the zstd frame is closed.
# Any future calls to ``write()`` at this point will construct a new
# zstd frame.

Instances can be used as context managers. Exiting the context manager is the equivalent of calling close(), which is equivalent to calling flush(zstd.FLUSH_FRAME):

cctx = zstd.ZstdCompressor(level=10)
with cctx.stream_writer(fh) as compressor:
    compressor.write(b'chunk 0')
    compressor.write(b'chunk 1')
    ...

If the size of the data being fed to this streaming compressor is known, you can declare it before compression begins:

cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh, size=data_len) as compressor:
    compressor.write(chunk0)
    compressor.write(chunk1)
    ...

Declaring the size of the source data allows compression parameters to be tuned. And if write_content_size is used, it also results in the content size being written into the frame header of the output data.

The size of chunks being write() to the destination can be specified:

cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh, write_size=32768) as compressor:
    ...

To see how much memory is being used by the streaming compressor:

cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh) as compressor:
    ...
    byte_size = compressor.memory_size()

Thte total number of bytes written so far are exposed via tell():

cctx = zstd.ZstdCompressor()
with cctx.stream_writer(fh) as compressor:
    ...
    total_written = compressor.tell()

stream_writer() accepts a write_return_read boolean argument to control the return value of write(). When False (the default), write() returns the number of bytes that were write()``en to the underlying object. When ``True, write() returns the number of bytes read from the input that were subsequently written to the compressor. True is the proper behavior for write() as specified by the io.RawIOBase interface and will become the default value in a future release.

Streaming Output API

read_to_iter(reader) provides a mechanism to stream data out of a compressor as an iterator of data chunks.:

cctx = zstd.ZstdCompressor()
for chunk in cctx.read_to_iter(fh):
     # Do something with emitted data.

read_to_iter() accepts an object that has a read(size) method or conforms to the buffer protocol.

Uncompressed data is fetched from the source either by calling read(size) or by fetching a slice of data from the object directly (in the case where the buffer protocol is being used). The returned iterator consists of chunks of compressed data.

If reading from the source via read(), read() will be called until it raises or returns an empty bytes (b''). It is perfectly valid for the source to deliver fewer bytes than were what requested by read(size).

Like stream_writer(), read_to_iter() also accepts a size argument declaring the size of the input stream:

cctx = zstd.ZstdCompressor()
for chunk in cctx.read_to_iter(fh, size=some_int):
    pass

You can also control the size that data is read() from the source and the ideal size of output chunks:

cctx = zstd.ZstdCompressor()
for chunk in cctx.read_to_iter(fh, read_size=16384, write_size=8192):
    pass

Unlike stream_writer(), read_to_iter() does not give direct control over the sizes of chunks fed into the compressor. Instead, chunk sizes will be whatever the object being read from delivers. These will often be of a uniform size.

Stream Copying API

copy_stream(ifh, ofh) can be used to copy data between 2 streams while compressing it.:

cctx = zstd.ZstdCompressor()
cctx.copy_stream(ifh, ofh)

For example, say you wish to compress a file:

cctx = zstd.ZstdCompressor()
with open(input_path, 'rb') as ifh, open(output_path, 'wb') as ofh:
    cctx.copy_stream(ifh, ofh)

It is also possible to declare the size of the source stream:

cctx = zstd.ZstdCompressor()
cctx.copy_stream(ifh, ofh, size=len_of_input)

You can also specify how large the chunks that are read() and write() from and to the streams:

cctx = zstd.ZstdCompressor()
cctx.copy_stream(ifh, ofh, read_size=32768, write_size=16384)

The stream copier returns a 2-tuple of bytes read and written:

cctx = zstd.ZstdCompressor()
read_count, write_count = cctx.copy_stream(ifh, ofh)

Compressor API

compressobj() returns an object that exposes compress(data) and flush() methods. Each returns compressed data or an empty bytes.

The purpose of compressobj() is to provide an API-compatible interface with zlib.compressobj, bz2.BZ2Compressor, etc. This allows callers to swap in different compressor objects while using the same API.

flush() accepts an optional argument indicating how to end the stream. zstd.COMPRESSOBJ_FLUSH_FINISH (the default) ends the compression stream. Once this type of flush is performed, compress() and flush() can no longer be called. This type of flush must be called to end the compression context. If not called, returned data may be incomplete.

A zstd.COMPRESSOBJ_FLUSH_BLOCK argument to flush() will flush a zstd block. Flushes of this type can be performed multiple times. The next call to compress() will begin a new zstd block.

Here is how this API should be used:

cctx = zstd.ZstdCompressor()
cobj = cctx.compressobj()
data = cobj.compress(b'raw input 0')
data = cobj.compress(b'raw input 1')
data = cobj.flush()

Or to flush blocks:

cctx.zstd.ZstdCompressor()
cobj = cctx.compressobj()
data = cobj.compress(b'chunk in first block')
data = cobj.flush(zstd.COMPRESSOBJ_FLUSH_BLOCK)
data = cobj.compress(b'chunk in second block')
data = cobj.flush()

For best performance results, keep input chunks under 256KB. This avoids extra allocations for a large output object.

It is possible to declare the input size of the data that will be fed into the compressor:

cctx = zstd.ZstdCompressor()
cobj = cctx.compressobj(size=6)
data = cobj.compress(b'foobar')
data = cobj.flush()

Chunker API

chunker(size=None, chunk_size=COMPRESSION_RECOMMENDED_OUTPUT_SIZE) returns an object that can be used to iteratively feed chunks of data into a compressor and produce output chunks of a uniform size.

The object returned by chunker() exposes the following methods:

compress(data)

Feeds new input data into the compressor.

flush()

Flushes all data currently in the compressor.

finish()

Signals the end of input data. No new data can be compressed after this method is called.

compress(), flush(), and finish() all return an iterator of bytes instances holding compressed data. The iterator may be empty. Callers MUST iterate through all elements of the returned iterator before performing another operation on the object.

All chunks emitted by compress() will have a length of chunk_size.

flush() and finish() may return a final chunk smaller than chunk_size.

Here is how the API should be used:

cctx = zstd.ZstdCompressor()
chunker = cctx.chunker(chunk_size=32768)

with open(path, 'rb') as fh:
    while True:
        in_chunk = fh.read(32768)
        if not in_chunk:
            break

        for out_chunk in chunker.compress(in_chunk):
            # Do something with output chunk of size 32768.

    for out_chunk in chunker.finish():
        # Do something with output chunks that finalize the zstd frame.

The chunker() API is often a better alternative to compressobj().

compressobj() will emit output data as it is available. This results in a stream of output chunks of varying sizes. The consistency of the output chunk size with chunker() is more appropriate for many usages, such as sending compressed data to a socket.

compressobj() may also perform extra memory reallocations in order to dynamically adjust the sizes of the output chunks. Since chunker() output chunks are all the same size (except for flushed or final chunks), there is less memory allocation overhead.

Batch Compression API

(Experimental. Not yet supported in CFFI bindings.)

multi_compress_to_buffer(data, [threads=0]) performs compression of multiple inputs as a single operation.

Data to be compressed can be passed as a BufferWithSegmentsCollection, a BufferWithSegments, or a list containing byte like objects. Each element of the container will be compressed individually using the configured parameters on the ZstdCompressor instance.

The threads argument controls how many threads to use for compression. The default is 0 which means to use a single thread. Negative values use the number of logical CPUs in the machine.

The function returns a BufferWithSegmentsCollection. This type represents N discrete memory allocations, eaching holding 1 or more compressed frames.

Output data is written to shared memory buffers. This means that unlike regular Python objects, a reference to any object within the collection keeps the shared buffer and therefore memory backing it alive. This can have undesirable effects on process memory usage.

The API and behavior of this function is experimental and will likely change. Known deficiencies include:

  • If asked to use multiple threads, it will always spawn that many threads, even if the input is too small to use them. It should automatically lower the thread count when the extra threads would just add overhead.

  • The buffer allocation strategy is fixed. There is room to make it dynamic, perhaps even to allow one output buffer per input, facilitating a variation of the API to return a list without the adverse effects of shared memory buffers.

ZstdDecompressor

The ZstdDecompressor class provides an interface for performing decompression. It is effectively a wrapper around the ZSTD_DCtx type from the C API.

Each instance is associated with parameters that control decompression. These come from the following named arguments (all optional):

dict_data

Compression dictionary to use.

max_window_size

Sets an uppet limit on the window size for decompression operations in kibibytes. This setting can be used to prevent large memory allocations for inputs using large compression windows.

format

Set the format of data for the decoder. By default, this is zstd.FORMAT_ZSTD1. It can be set to zstd.FORMAT_ZSTD1_MAGICLESS to allow decoding frames without the 4 byte magic header. Not all decompression APIs support this mode.

The interface of this class is very similar to ZstdCompressor (by design).

Unless specified otherwise, assume that no two methods of ZstdDecompressor instances can be called from multiple Python threads simultaneously. In other words, assume instances are not thread safe unless stated otherwise.

Utility Methods

memory_size() obtains the size of the underlying zstd decompression context, in bytes.:

dctx = zstd.ZstdDecompressor()
size = dctx.memory_size()

Simple API

decompress(data) can be used to decompress an entire compressed zstd frame in a single operation.:

dctx = zstd.ZstdDecompressor()
decompressed = dctx.decompress(data)

By default, decompress(data) will only work on data written with the content size encoded in its header (this is the default behavior of ZstdCompressor().compress() but may not be true for streaming compression). If compressed data without an embedded content size is seen, zstd.ZstdError will be raised.

If the compressed data doesn’t have its content size embedded within it, decompression can be attempted by specifying the max_output_size argument.:

dctx = zstd.ZstdDecompressor()
uncompressed = dctx.decompress(data, max_output_size=1048576)

Ideally, max_output_size will be identical to the decompressed output size.

If max_output_size is too small to hold the decompressed data, zstd.ZstdError will be raised.

If max_output_size is larger than the decompressed data, the allocated output buffer will be resized to only use the space required.

Please note that an allocation of the requested max_output_size will be performed every time the method is called. Setting to a very large value could result in a lot of work for the memory allocator and may result in MemoryError being raised if the allocation fails.

Stream Reader API

stream_reader(source) can be used to obtain an object conforming to the io.RawIOBase interface for reading decompressed output as a stream:

with open(path, 'rb') as fh:
    dctx = zstd.ZstdDecompressor()
    reader = dctx.stream_reader(fh)
    while True:
        chunk = reader.read(16384)
         if not chunk:
             break

         # Do something with decompressed chunk.

The stream can also be used as a context manager:

with open(path, 'rb') as fh:
    dctx = zstd.ZstdDecompressor()
    with dctx.stream_reader(fh) as reader:
        ...

When used as a context manager, the stream is closed and the underlying resources are released when the context manager exits. Future operations against the stream will fail.

The source argument to stream_reader() can be any object with a read(size) method or any object implementing the buffer protocol.

If the source is a stream, you can specify how large read() requests to that stream should be via the read_size argument. It defaults to zstandard.DECOMPRESSION_RECOMMENDED_INPUT_SIZE.:

with open(path, 'rb') as fh:
    dctx = zstd.ZstdDecompressor()
    # Will perform fh.read(8192) when obtaining data for the decompressor.
    with dctx.stream_reader(fh, read_size=8192) as reader:
        ...

The stream returned by stream_reader() is not writable.

The stream returned by stream_reader() is partially seekable. Absolute and relative positions (SEEK_SET and SEEK_CUR) forward of the current position are allowed. Offsets behind the current read position and offsets relative to the end of stream are not allowed and will raise ValueError if attempted.

tell() returns the number of decompressed bytes read so far.

Not all I/O methods are implemented. Notably missing is support for readline(), readlines(), and linewise iteration support. This is because streams operate on binary data - not text data. If you want to convert decompressed output to text, you can chain an io.TextIOWrapper to the stream:

with open(path, 'rb') as fh:
    dctx = zstd.ZstdDecompressor()
    stream_reader = dctx.stream_reader(fh)
    text_stream = io.TextIOWrapper(stream_reader, encoding='utf-8')

    for line in text_stream:
        ...

The read_across_frames argument to stream_reader() controls the behavior of read operations when the end of a zstd frame is encountered. When False (the default), a read will complete when the end of a zstd frame is encountered. When True, a read can potentially return data spanning multiple zstd frames.

Streaming Input API

stream_writer(fh) allows you to stream data into a decompressor.

Returned instances implement the io.RawIOBase interface. Only methods that involve writing will do useful things.

The argument to stream_writer() is typically an object that also implements io.RawIOBase. But any object with a write(data) method will work. Many common Python types conform to this interface, including open file handles and io.BytesIO.

Behavior is similar to ZstdCompressor.stream_writer(): compressed data is sent to the decompressor by calling write(data) and decompressed output is written to the underlying stream by calling its write(data) method.:

dctx = zstd.ZstdDecompressor()
decompressor = dctx.stream_writer(fh)

decompressor.write(compressed_data)
...

Calls to write() will return the number of bytes written to the output object. Not all inputs will result in bytes being written, so return values of 0 are possible.

Like the stream_writer() compressor, instances can be used as context managers. However, context managers add no extra special behavior and offer little to no benefit to being used.

Calling close() will mark the stream as closed and subsequent I/O operations will raise ValueError (per the documented behavior of io.RawIOBase). close() will also call close() on the underlying stream if such a method exists.

The size of chunks being write() to the destination can be specified:

dctx = zstd.ZstdDecompressor()
with dctx.stream_writer(fh, write_size=16384) as decompressor:
    pass

You can see how much memory is being used by the decompressor:

dctx = zstd.ZstdDecompressor()
with dctx.stream_writer(fh) as decompressor:
    byte_size = decompressor.memory_size()

stream_writer() accepts a write_return_read boolean argument to control the return value of write(). When False (the default)``, write() returns the number of bytes that were write()``en to the underlying stream. When ``True, write() returns the number of bytes read from the input. True is the proper behavior for write() as specified by the io.RawIOBase interface and will become the default in a future release.

Streaming Output API

read_to_iter(fh) provides a mechanism to stream decompressed data out of a compressed source as an iterator of data chunks.:

dctx = zstd.ZstdDecompressor()
for chunk in dctx.read_to_iter(fh):
    # Do something with original data.

read_to_iter() accepts an object with a read(size) method that will return compressed bytes or an object conforming to the buffer protocol that can expose its data as a contiguous range of bytes.

read_to_iter() returns an iterator whose elements are chunks of the decompressed data.

The size of requested read() from the source can be specified:

dctx = zstd.ZstdDecompressor()
for chunk in dctx.read_to_iter(fh, read_size=16384):
    pass

It is also possible to skip leading bytes in the input data:

dctx = zstd.ZstdDecompressor()
for chunk in dctx.read_to_iter(fh, skip_bytes=1):
    pass

Similarly to ZstdCompressor.read_to_iter(), the consumer of the iterator controls when data is decompressed. If the iterator isn’t consumed, decompression is put on hold.

When read_to_iter() is passed an object conforming to the buffer protocol, the behavior may seem similar to what occurs when the simple decompression API is used. However, this API works when the decompressed size is unknown. Furthermore, if feeding large inputs, the decompressor will work in chunks instead of performing a single operation.

Stream Copying API

copy_stream(ifh, ofh) can be used to copy data across 2 streams while performing decompression.:

dctx = zstd.ZstdDecompressor()
dctx.copy_stream(ifh, ofh)

e.g. to decompress a file to another file:

dctx = zstd.ZstdDecompressor()
with open(input_path, 'rb') as ifh, open(output_path, 'wb') as ofh:
    dctx.copy_stream(ifh, ofh)

The size of chunks being read() and write() from and to the streams can be specified:

dctx = zstd.ZstdDecompressor()
dctx.copy_stream(ifh, ofh, read_size=8192, write_size=16384)

Decompressor API

decompressobj() returns an object that exposes a decompress(data) method. Compressed data chunks are fed into decompress(data) and uncompressed output (or an empty bytes) is returned. Output from subsequent calls needs to be concatenated to reassemble the full decompressed byte sequence.

The purpose of decompressobj() is to provide an API-compatible interface with zlib.decompressobj and bz2.BZ2Decompressor. This allows callers to swap in different decompressor objects while using the same API.

Each object is single use: once an input frame is decoded, decompress() can no longer be called.

Here is how this API should be used:

dctx = zstd.ZstdDecompressor()
dobj = dctx.decompressobj()
data = dobj.decompress(compressed_chunk_0)
data = dobj.decompress(compressed_chunk_1)

By default, calls to decompress() write output data in chunks of size DECOMPRESSION_RECOMMENDED_OUTPUT_SIZE. These chunks are concatenated before being returned to the caller. It is possible to define the size of these temporary chunks by passing write_size to decompressobj():

dctx = zstd.ZstdDecompressor()
dobj = dctx.decompressobj(write_size=1048576)

For compatibility with the standard library APIs, instances expose a flush([length=None]) method. This method no-ops and has no meaningful side-effects, making it safe to call any time.

Batch Decompression API

(Experimental. Not yet supported in CFFI bindings.)

multi_decompress_to_buffer() performs decompression of multiple frames as a single operation and returns a BufferWithSegmentsCollection containing decompressed data for all inputs.

Compressed frames can be passed to the function as a BufferWithSegments, a BufferWithSegmentsCollection, or as a list containing objects that conform to the buffer protocol. For best performance, pass a BufferWithSegmentsCollection or a BufferWithSegments, as minimal input validation will be done for that type. If calling from Python (as opposed to C), constructing one of these instances may add overhead cancelling out the performance overhead of validation for list inputs.:

dctx = zstd.ZstdDecompressor()
results = dctx.multi_decompress_to_buffer([b'...', b'...'])

The decompressed size of each frame MUST be discoverable. It can either be embedded within the zstd frame (write_content_size=True argument to ZstdCompressor) or passed in via the decompressed_sizes argument.

The decompressed_sizes argument is an object conforming to the buffer protocol which holds an array of 64-bit unsigned integers in the machine’s native format defining the decompressed sizes of each frame. If this argument is passed, it avoids having to scan each frame for its decompressed size. This frame scanning can add noticeable overhead in some scenarios.:

frames = [...]
sizes = struct.pack('=QQQQ', len0, len1, len2, len3)

dctx = zstd.ZstdDecompressor()
results = dctx.multi_decompress_to_buffer(frames, decompressed_sizes=sizes)

The threads argument controls the number of threads to use to perform decompression operations. The default (0) or the value 1 means to use a single thread. Negative values use the number of logical CPUs in the machine.

This function is logically equivalent to performing dctx.decompress() on each input frame and returning the result.

This function exists to perform decompression on multiple frames as fast as possible by having as little overhead as possible. Since decompression is performed as a single operation and since the decompressed output is stored in a single buffer, extra memory allocations, Python objects, and Python function calls are avoided. This is ideal for scenarios where callers know up front that they need to access data for multiple frames, such as when delta chains are being used.

Currently, the implementation always spawns multiple threads when requested, even if the amount of work to do is small. In the future, it will be smarter about avoiding threads and their associated overhead when the amount of work to do is small.

Prefix Dictionary Chain Decompression

decompress_content_dict_chain(frames) performs decompression of a list of zstd frames produced using chained prefix dictionary compression. Such a list of frames is produced by compressing discrete inputs where each non-initial input is compressed with a prefix dictionary consisting of the content of the previous input.

For example, say you have the following inputs:

inputs = [b'input 1', b'input 2', b'input 3']

The zstd frame chain consists of:

  1. b'input 1' compressed in standalone/discrete mode

  2. b'input 2' compressed using b'input 1' as a prefix dictionary

  3. b'input 3' compressed using b'input 2' as a prefix dictionary

Each zstd frame must have the content size written.

The following Python code can be used to produce a prefix dictionary chain:

def make_chain(inputs):
    frames = []

    # First frame is compressed in standalone/discrete mode.
    zctx = zstd.ZstdCompressor()
    frames.append(zctx.compress(inputs[0]))

    # Subsequent frames use the previous fulltext as a prefix dictionary
    for i, raw in enumerate(inputs[1:]):
        dict_data = zstd.ZstdCompressionDict(
            inputs[i], dict_type=zstd.DICT_TYPE_RAWCONTENT)
        zctx = zstd.ZstdCompressor(dict_data=dict_data)
        frames.append(zctx.compress(raw))

    return frames

decompress_content_dict_chain() returns the uncompressed data of the last element in the input chain.

Multi-Threaded Compression

ZstdCompressor accepts a threads argument that controls the number of threads to use for compression. The way this works is that input is split into segments and each segment is fed into a worker pool for compression. Once a segment is compressed, it is flushed/appended to the output.

The segment size for multi-threaded compression is chosen from the window size of the compressor. This is derived from the window_log attribute of a ZstdCompressionParameters instance. By default, segment sizes are in the 1+MB range.

If multi-threaded compression is requested and the input is smaller than the configured segment size, only a single compression thread will be used. If the input is smaller than the segment size multiplied by the thread pool size or if data cannot be delivered to the compressor fast enough, not all requested compressor threads may be active simultaneously.

Compared to non-multi-threaded compression, multi-threaded compression has higher per-operation overhead. This includes extra memory operations, thread creation, lock acquisition, etc.

Due to the nature of multi-threaded compression using N compression states, the output from multi-threaded compression will likely be larger than non-multi-threaded compression. The difference is usually small. But there is a CPU/wall time versus size trade off that may warrant investigation.

Output from multi-threaded compression does not require any special handling on the decompression side. To the decompressor, data generated with single threaded compressor looks the same as data generated by a multi-threaded compressor and does not require any special handling or additional resource requirements.

Dictionary Creation and Management

Compression dictionaries are represented with the ZstdCompressionDict type.

Instances can be constructed from bytes:

dict_data = zstd.ZstdCompressionDict(data)

It is possible to construct a dictionary from any data. If the data doesn’t begin with a magic header, it will be treated as a prefix dictionary. Prefix dictionaries allow compression operations to reference raw data within the dictionary.

It is possible to force the use of prefix dictionaries or to require a dictionary header:

dict_data = zstd.ZstdCompressionDict(data,

dict_type=zstd.DICT_TYPE_RAWCONTENT)

dict_data = zstd.ZstdCompressionDict(data,

dict_type=zstd.DICT_TYPE_FULLDICT)

You can see how many bytes are in the dictionary by calling len():

dict_data = zstd.train_dictionary(size, samples)
dict_size = len(dict_data)  # will not be larger than ``size``

Once you have a dictionary, you can pass it to the objects performing compression and decompression:

dict_data = zstd.train_dictionary(131072, samples)

cctx = zstd.ZstdCompressor(dict_data=dict_data)
for source_data in input_data:
    compressed = cctx.compress(source_data)
    # Do something with compressed data.

dctx = zstd.ZstdDecompressor(dict_data=dict_data)
for compressed_data in input_data:
    buffer = io.BytesIO()
    with dctx.stream_writer(buffer) as decompressor:
        decompressor.write(compressed_data)
    # Do something with raw data in ``buffer``.

Dictionaries have unique integer IDs. You can retrieve this ID via:

dict_id = zstd.dictionary_id(dict_data)

You can obtain the raw data in the dict (useful for persisting and constructing a ZstdCompressionDict later) via as_bytes():

dict_data = zstd.train_dictionary(size, samples)
raw_data = dict_data.as_bytes()

By default, when a ZstdCompressionDict is attached to a ZstdCompressor, each ZstdCompressor performs work to prepare the dictionary for use. This is fine if only 1 compression operation is being performed or if the ZstdCompressor is being reused for multiple operations. But if multiple ZstdCompressor instances are being used with the dictionary, this can add overhead.

It is possible to precompute the dictionary so it can readily be consumed by multiple ZstdCompressor instances:

d = zstd.ZstdCompressionDict(data)

# Precompute for compression level 3.
d.precompute_compress(level=3)

# Precompute with specific compression parameters.
params = zstd.ZstdCompressionParameters(...)
d.precompute_compress(compression_params=params)

Training Dictionaries

Unless using prefix dictionaries, dictionary data is produced by training on existing data:

dict_data = zstd.train_dictionary(size, samples)

This takes a target dictionary size and list of bytes instances and creates and returns a ZstdCompressionDict.

The dictionary training mechanism is known as cover. More details about it are available in the paper Effective Construction of Relative Lempel-Ziv Dictionaries (authors: Liao, Petri, Moffat, Wirth).

The cover algorithm takes parameters k` and ``d. These are the segment size and dmer size, respectively. The returned dictionary instance created by this function has k and d attributes containing the values for these parameters. If a ZstdCompressionDict is constructed from raw bytes data (a content-only dictionary), the k and d attributes will be 0.

The segment and dmer size parameters to the cover algorithm can either be specified manually or train_dictionary() can try multiple values and pick the best one, where best means the smallest compressed data size. This later mode is called optimization mode.

If none of k, d, steps, threads, level, notifications, or dict_id (basically anything from the underlying ZDICT_cover_params_t struct) are defined, optimization mode is used with default parameter values.

If steps or threads are defined, then optimization mode is engaged with explicit control over those parameters. Specifying threads=0 or threads=1 can be used to engage optimization mode if other parameters are not defined.

Otherwise, non-optimization mode is used with the parameters specified.

This function takes the following arguments:

dict_size

Target size in bytes of the dictionary to generate.

samples

A list of bytes holding samples the dictionary will be trained from.

k

Parameter to cover algorithm defining the segment size. A reasonable range is [16, 2048+].

d

Parameter to cover algorithm defining the dmer size. A reasonable range is [6, 16]. d must be less than or equal to k.

dict_id

Integer dictionary ID for the produced dictionary. Default is 0, which uses a random value.

steps

Number of steps through k values to perform when trying parameter variations.

threads

Number of threads to use when trying parameter variations. Default is 0, which means to use a single thread. A negative value can be specified to use as many threads as there are detected logical CPUs.

level

Integer target compression level when trying parameter variations.

notifications

Controls writing of informational messages to stderr. 0 (the default) means to write nothing. 1 writes errors. 2 writes progression info. 3 writes more details. And 4 writes all info.

Explicit Compression Parameters

Zstandard offers a high-level compression level that maps to lower-level compression parameters. For many consumers, this numeric level is the only compression setting you’ll need to touch.

But for advanced use cases, it might be desirable to tweak these lower-level settings.

The ZstdCompressionParameters type represents these low-level compression settings.

Instances of this type can be constructed from a myriad of keyword arguments (defined below) for complete low-level control over each adjustable compression setting.

From a higher level, one can construct a ZstdCompressionParameters instance given a desired compression level and target input and dictionary size using ZstdCompressionParameters.from_level(). e.g.:

# Derive compression settings for compression level 7.
params = zstd.ZstdCompressionParameters.from_level(7)

# With an input size of 1MB
params = zstd.ZstdCompressionParameters.from_level(7, source_size=1048576)

Using from_level(), it is also possible to override individual compression parameters or to define additional settings that aren’t automatically derived. e.g.:

params = zstd.ZstdCompressionParameters.from_level(4, window_log=10)
params = zstd.ZstdCompressionParameters.from_level(5, threads=4)

Or you can define low-level compression settings directly:

params = zstd.ZstdCompressionParameters(window_log=12, enable_ldm=True)

Once a ZstdCompressionParameters instance is obtained, it can be used to configure a compressor:

cctx = zstd.ZstdCompressor(compression_params=params)

The named arguments and attributes of ZstdCompressionParameters are as follows:

  • format

  • compression_level

  • window_log

  • hash_log

  • chain_log

  • search_log

  • min_match

  • target_length

  • strategy

  • compression_strategy (deprecated: same as strategy)

  • write_content_size

  • write_checksum

  • write_dict_id

  • job_size

  • overlap_log

  • overlap_size_log (deprecated: same as overlap_log)

  • force_max_window

  • enable_ldm

  • ldm_hash_log

  • ldm_min_match

  • ldm_bucket_size_log

  • ldm_hash_rate_log

  • ldm_hash_every_log (deprecated: same as ldm_hash_rate_log)

  • threads

Some of these are very low-level settings. It may help to consult the official zstandard documentation for their behavior. Look for the ZSTD_p_* constants in zstd.h (https://github.com/facebook/zstd/blob/dev/lib/zstd.h).

Frame Inspection

Data emitted from zstd compression is encapsulated in a frame. This frame begins with a 4 byte magic number header followed by 2 to 14 bytes describing the frame in more detail. For more info, see https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md.

zstd.get_frame_parameters(data) parses a zstd frame header from a bytes instance and return a FrameParameters object describing the frame.

Depending on which fields are present in the frame and their values, the length of the frame parameters varies. If insufficient bytes are passed in to fully parse the frame parameters, ZstdError is raised. To ensure frame parameters can be parsed, pass in at least 18 bytes.

FrameParameters instances have the following attributes:

content_size

Integer size of original, uncompressed content. This will be 0 if the original content size isn’t written to the frame (controlled with the write_content_size argument to ZstdCompressor) or if the input content size was 0.

window_size

Integer size of maximum back-reference distance in compressed data.

dict_id

Integer of dictionary ID used for compression. 0 if no dictionary ID was used or if the dictionary ID was 0.

has_checksum

Bool indicating whether a 4 byte content checksum is stored at the end of the frame.

zstd.frame_header_size(data) returns the size of the zstandard frame header.

zstd.frame_content_size(data) returns the content size as parsed from the frame header. -1 means the content size is unknown. 0 means an empty frame. The content size is usually correct. However, it may not be accurate.

Misc Functionality

estimate_decompression_context_size()

Estimate the memory size requirements for a decompressor instance.

Constants

The following module constants/attributes are exposed:

ZSTD_VERSION

This module attribute exposes a 3-tuple of the Zstandard version. e.g. (1, 0, 0)

MAX_COMPRESSION_LEVEL

Integer max compression level accepted by compression functions

COMPRESSION_RECOMMENDED_INPUT_SIZE

Recommended chunk size to feed to compressor functions

COMPRESSION_RECOMMENDED_OUTPUT_SIZE

Recommended chunk size for compression output

DECOMPRESSION_RECOMMENDED_INPUT_SIZE

Recommended chunk size to feed into decompresor functions

DECOMPRESSION_RECOMMENDED_OUTPUT_SIZE

Recommended chunk size for decompression output

FRAME_HEADER

bytes containing header of the Zstandard frame

MAGIC_NUMBER

Frame header as an integer

FLUSH_BLOCK

Flushing behavior that denotes to flush a zstd block. A decompressor will be able to decode all data fed into the compressor so far.

FLUSH_FRAME

Flushing behavior that denotes to end a zstd frame. Any new data fed to the compressor will start a new frame.

CONTENTSIZE_UNKNOWN

Value for content size when the content size is unknown.

CONTENTSIZE_ERROR

Value for content size when content size couldn’t be determined.

WINDOWLOG_MIN

Minimum value for compression parameter

WINDOWLOG_MAX

Maximum value for compression parameter

CHAINLOG_MIN

Minimum value for compression parameter

CHAINLOG_MAX

Maximum value for compression parameter

HASHLOG_MIN

Minimum value for compression parameter

HASHLOG_MAX

Maximum value for compression parameter

SEARCHLOG_MIN

Minimum value for compression parameter

SEARCHLOG_MAX

Maximum value for compression parameter

MINMATCH_MIN

Minimum value for compression parameter

MINMATCH_MAX

Maximum value for compression parameter

SEARCHLENGTH_MIN

Minimum value for compression parameter

Deprecated: use MINMATCH_MIN

SEARCHLENGTH_MAX

Maximum value for compression parameter

Deprecated: use MINMATCH_MAX

TARGETLENGTH_MIN

Minimum value for compression parameter

STRATEGY_FAST

Compression strategy

STRATEGY_DFAST

Compression strategy

STRATEGY_GREEDY

Compression strategy

STRATEGY_LAZY

Compression strategy

STRATEGY_LAZY2

Compression strategy

STRATEGY_BTLAZY2

Compression strategy

STRATEGY_BTOPT

Compression strategy

STRATEGY_BTULTRA

Compression strategy

STRATEGY_BTULTRA2

Compression strategy

FORMAT_ZSTD1

Zstandard frame format

FORMAT_ZSTD1_MAGICLESS

Zstandard frame format without magic header

Performance Considerations

The ZstdCompressor and ZstdDecompressor types maintain state to a persistent compression or decompression context. Reusing a ZstdCompressor or ZstdDecompressor instance for multiple operations is faster than instantiating a new ZstdCompressor or ZstdDecompressor for each operation. The differences are magnified as the size of data decreases. For example, the difference between context reuse and non-reuse for 100,000 100 byte inputs will be significant (possiby over 10x faster to reuse contexts) whereas 10 100,000,000 byte inputs will be more similar in speed (because the time spent doing compression dwarfs time spent creating new contexts).

Buffer Types

The API exposes a handful of custom types for interfacing with memory buffers. The primary goal of these types is to facilitate efficient multi-object operations.

The essential idea is to have a single memory allocation provide backing storage for multiple logical objects. This has 2 main advantages: fewer allocations and optimal memory access patterns. This avoids having to allocate a Python object for each logical object and furthermore ensures that access of data for objects can be sequential (read: fast) in memory.

BufferWithSegments

The BufferWithSegments type represents a memory buffer containing N discrete items of known lengths (segments). It is essentially a fixed size memory address and an array of 2-tuples of (offset, length) 64-bit unsigned native endian integers defining the byte offset and length of each segment within the buffer.

Instances behave like containers.

len() returns the number of segments within the instance.

o[index] or __getitem__ obtains a BufferSegment representing an individual segment within the backing buffer. That returned object references (not copies) memory. This means that iterating all objects doesn’t copy data within the buffer.

The .size attribute contains the total size in bytes of the backing buffer.

Instances conform to the buffer protocol. So a reference to the backing bytes can be obtained via memoryview(o). A copy of the backing bytes can also be obtained via .tobytes().

The .segments attribute exposes the array of (offset, length) for segments within the buffer. It is a BufferSegments type.

BufferSegment

The BufferSegment type represents a segment within a BufferWithSegments. It is essentially a reference to N bytes within a BufferWithSegments.

len() returns the length of the segment in bytes.

.offset contains the byte offset of this segment within its parent BufferWithSegments instance.

The object conforms to the buffer protocol. .tobytes() can be called to obtain a bytes instance with a copy of the backing bytes.

BufferSegments

This type represents an array of (offset, length) integers defining segments within a BufferWithSegments.

The array members are 64-bit unsigned integers using host/native bit order.

Instances conform to the buffer protocol.

BufferWithSegmentsCollection

The BufferWithSegmentsCollection type represents a virtual spanning view of multiple BufferWithSegments instances.

Instances are constructed from 1 or more BufferWithSegments instances. The resulting object behaves like an ordered sequence whose members are the segments within each BufferWithSegments.

len() returns the number of segments within all BufferWithSegments instances.

o[index] and __getitem__(index) return the BufferSegment at that offset as if all BufferWithSegments instances were a single entity.

If the object is composed of 2 BufferWithSegments instances with the first having 2 segments and the second have 3 segments, then b[0] and b[1] access segments in the first object and b[2], b[3], and b[4] access segments from the second.

Choosing an API

There are multiple APIs for performing compression and decompression. This is because different applications have different needs and the library wants to facilitate optimal use in as many use cases as possible.

From a high-level, APIs are divided into one-shot and streaming: either you are operating on all data at once or you operate on it piecemeal.

The one-shot APIs are useful for small data, where the input or output size is known. (The size can come from a buffer length, file size, or stored in the zstd frame header.) A limitation of the one-shot APIs is that input and output must fit in memory simultaneously. For say a 4 GB input, this is often not feasible.

The one-shot APIs also perform all work as a single operation. So, if you feed it large input, it could take a long time for the function to return.

The streaming APIs do not have the limitations of the simple API. But the price you pay for this flexibility is that they are more complex than a single function call.

The streaming APIs put the caller in control of compression and decompression behavior by allowing them to directly control either the input or output side of the operation.

With the streaming input, compressor, and decompressor APIs, the caller has full control over the input to the compression or decompression stream. They can directly choose when new data is operated on.

With the streaming ouput APIs, the caller has full control over the output of the compression or decompression stream. It can choose when to receive new data.

When using the streaming APIs that operate on file-like or stream objects, it is important to consider what happens in that object when I/O is requested. There is potential for long pauses as data is read or written from the underlying stream (say from interacting with a filesystem or network). This could add considerable overhead.

Thread Safety

ZstdCompressor and ZstdDecompressor instances have no guarantees about thread safety. Do not operate on the same ZstdCompressor and ZstdDecompressor instance simultaneously from different threads. It is fine to have different threads call into a single instance, just not at the same time.

Some operations require multiple function calls to complete. e.g. streaming operations. A single ZstdCompressor or ZstdDecompressor cannot be used for simultaneously active operations. e.g. you must not start a streaming operation when another streaming operation is already active.

The C extension releases the GIL during non-trivial calls into the zstd C API. Non-trivial calls are notably compression and decompression. Trivial calls are things like parsing frame parameters. Where the GIL is released is considered an implementation detail and can change in any release.

APIs that accept bytes-like objects don’t enforce that the underlying object is read-only. However, it is assumed that the passed object is read-only for the duration of the function call. It is possible to pass a mutable object (like a bytearray) to e.g. ZstdCompressor.compress(), have the GIL released, and mutate the object from another thread. Such a race condition is a bug in the consumer of python-zstandard. Most Python data types are immutable, so unless you are doing something fancy, you don’t need to worry about this.

Note on Zstandard’s Experimental API

Many of the Zstandard APIs used by this module are marked as experimental within the Zstandard project.

It is unclear how Zstandard’s C API will evolve over time, especially with regards to this experimental functionality. We will try to maintain backwards compatibility at the Python API level. However, we cannot guarantee this for things not under our control.

Since a copy of the Zstandard source code is distributed with this module and since we compile against it, the behavior of a specific version of this module should be constant for all of time. So if you pin the version of this module used in your projects (which is a Python best practice), you should be shielded from unwanted future changes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zstandard-0.14.1.tar.gz (676.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zstandard-0.14.1-cp39-cp39-win_amd64.whl (552.4 kB view details)

Uploaded CPython 3.9Windows x86-64

zstandard-0.14.1-cp39-cp39-win32.whl (473.0 kB view details)

Uploaded CPython 3.9Windows x86

zstandard-0.14.1-cp39-cp39-manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.9

zstandard-0.14.1-cp39-cp39-manylinux2014_i686.whl (2.1 MB view details)

Uploaded CPython 3.9

zstandard-0.14.1-cp39-cp39-manylinux2010_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp39-cp39-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686

zstandard-0.14.1-cp39-cp39-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9

zstandard-0.14.1-cp39-cp39-manylinux1_i686.whl (2.1 MB view details)

Uploaded CPython 3.9

zstandard-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl (447.7 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

zstandard-0.14.1-cp38-cp38-win_amd64.whl (551.1 kB view details)

Uploaded CPython 3.8Windows x86-64

zstandard-0.14.1-cp38-cp38-win32.whl (471.6 kB view details)

Uploaded CPython 3.8Windows x86

zstandard-0.14.1-cp38-cp38-manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.8

zstandard-0.14.1-cp38-cp38-manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.8

zstandard-0.14.1-cp38-cp38-manylinux2010_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp38-cp38-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686

zstandard-0.14.1-cp38-cp38-manylinux1_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8

zstandard-0.14.1-cp38-cp38-manylinux1_i686.whl (2.2 MB view details)

Uploaded CPython 3.8

zstandard-0.14.1-cp38-cp38-macosx_10_9_x86_64.whl (450.7 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

zstandard-0.14.1-cp37-cp37m-win_amd64.whl (556.5 kB view details)

Uploaded CPython 3.7mWindows x86-64

zstandard-0.14.1-cp37-cp37m-win32.whl (473.5 kB view details)

Uploaded CPython 3.7mWindows x86

zstandard-0.14.1-cp37-cp37m-manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.7m

zstandard-0.14.1-cp37-cp37m-manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.7m

zstandard-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp37-cp37m-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686

zstandard-0.14.1-cp37-cp37m-manylinux1_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7m

zstandard-0.14.1-cp37-cp37m-manylinux1_i686.whl (2.2 MB view details)

Uploaded CPython 3.7m

zstandard-0.14.1-cp37-cp37m-macosx_10_9_x86_64.whl (450.8 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

zstandard-0.14.1-cp36-cp36m-win_amd64.whl (556.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

zstandard-0.14.1-cp36-cp36m-win32.whl (476.0 kB view details)

Uploaded CPython 3.6mWindows x86

zstandard-0.14.1-cp36-cp36m-manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.6m

zstandard-0.14.1-cp36-cp36m-manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.6m

zstandard-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp36-cp36m-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ i686

zstandard-0.14.1-cp36-cp36m-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m

zstandard-0.14.1-cp36-cp36m-manylinux1_i686.whl (2.2 MB view details)

Uploaded CPython 3.6m

zstandard-0.14.1-cp36-cp36m-macosx_10_9_x86_64.whl (451.4 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

zstandard-0.14.1-cp35-cp35m-win_amd64.whl (543.2 kB view details)

Uploaded CPython 3.5mWindows x86-64

zstandard-0.14.1-cp35-cp35m-win32.whl (482.8 kB view details)

Uploaded CPython 3.5mWindows x86

zstandard-0.14.1-cp35-cp35m-manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.5m

zstandard-0.14.1-cp35-cp35m-manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.5m

zstandard-0.14.1-cp35-cp35m-manylinux2010_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp35-cp35m-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ i686

zstandard-0.14.1-cp35-cp35m-manylinux1_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.5m

zstandard-0.14.1-cp35-cp35m-manylinux1_i686.whl (2.2 MB view details)

Uploaded CPython 3.5m

zstandard-0.14.1-cp35-cp35m-macosx_10_9_x86_64.whl (454.4 kB view details)

Uploaded CPython 3.5mmacOS 10.9+ x86-64

zstandard-0.14.1-cp27-cp27mu-manylinux2010_x86_64.whl (2.1 MB view details)

Uploaded CPython 2.7mumanylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp27-cp27mu-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 2.7mumanylinux: glibc 2.12+ i686

zstandard-0.14.1-cp27-cp27mu-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 2.7mu

zstandard-0.14.1-cp27-cp27mu-manylinux1_i686.whl (2.0 MB view details)

Uploaded CPython 2.7mu

zstandard-0.14.1-cp27-cp27m-win_amd64.whl (554.4 kB view details)

Uploaded CPython 2.7mWindows x86-64

zstandard-0.14.1-cp27-cp27m-win32.whl (473.0 kB view details)

Uploaded CPython 2.7mWindows x86

zstandard-0.14.1-cp27-cp27m-manylinux2010_x86_64.whl (2.1 MB view details)

Uploaded CPython 2.7mmanylinux: glibc 2.12+ x86-64

zstandard-0.14.1-cp27-cp27m-manylinux2010_i686.whl (2.0 MB view details)

Uploaded CPython 2.7mmanylinux: glibc 2.12+ i686

zstandard-0.14.1-cp27-cp27m-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 2.7m

zstandard-0.14.1-cp27-cp27m-manylinux1_i686.whl (2.0 MB view details)

Uploaded CPython 2.7m

zstandard-0.14.1-cp27-cp27m-macosx_10_9_x86_64.whl (453.9 kB view details)

Uploaded CPython 2.7mmacOS 10.9+ x86-64

File details

Details for the file zstandard-0.14.1.tar.gz.

File metadata

  • Download URL: zstandard-0.14.1.tar.gz
  • Upload date:
  • Size: 676.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1.tar.gz
Algorithm Hash digest
SHA256 5dd700e52ec28c64d43f681ccde76b6436c8f89a332d6c9e22a6b629f28daeb5
MD5 a094af0baa4a3600f1795feec6a20760
BLAKE2b-256 30bb551cd25042138bdd2c36168b837c4ed6196da58fa1cfe3d9de8e70ac23dc

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 552.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d2ec8309309fc7254d21286d6b3e5c28e4019cd8e266d1a860456a69ea7c2400
MD5 c77fb931b5754eefe8fd6365f6ea5cf5
BLAKE2b-256 22309df625a689fcf4730d03c32e0731c693315d0c34eae0b10f17c23d9df570

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 473.0 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 7161d71debb94c456cbddd8a239e89219f37f0b1a4c0620a2c1400801aeeec7d
MD5 2388d9856bffedd4956a232c0b500ca9
BLAKE2b-256 37a9f9685bea0e931c89eb9781fb05668d8f7efa2f9353401c864f83855433a7

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3382ce6e44e9e847dce848bc2638403aa9320cb38edcc34b71e13be5793619e0
MD5 4bc37e015600913a053b4fcbe76ac364
BLAKE2b-256 fa4acb9ab9c0bcb4d8335225ef1739c6a7c85b5716bfe3a6095f5f1803cd3df7

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux2014_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 70dfe74b24971476a6a20d42abb964c9ac0fb1af7b89228e5845748377543bd0
MD5 75b7212157664fa30418bb0f7daf984e
BLAKE2b-256 d5aae671c17ffdd98fe08ffe589e044e03069e8e211fdb0696c3f98f05a5a867

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2075be64372206af3df40fef0fee657b44845d3e6d98b4cc8aba220be861de2d
MD5 efc2796ad804a190de9d5896f65a4cd1
BLAKE2b-256 ec4745f490f02a2c138d478ec77f2f75d3b967081f7fe9a2e6093dc145a50c3d

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 bd4da25cc46e972b029f8aa9f103c5977dbe461e1916ff7edec24065071b4a08
MD5 5c5defadd0dcda017576a54ff8e6a92a
BLAKE2b-256 6b9d4fd0fab4093a7919e9bc06ab43c53a89a0558f5c6a0600d32da14a36a89a

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d78db92ac27cdcd55333b7e642cd400719842e692e8836f0b249e459b26d384b
MD5 ab675e9dd389e1954e1297ab53302fcb
BLAKE2b-256 e5017f21a95da4b2b5169b5f8c58dcefa6dac16e4e1a7d528f09cf02e035eb5c

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-manylinux1_i686.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-manylinux1_i686.whl
Algorithm Hash digest
SHA256 cf67443d06b88218eb8915da2d968dcf6fdc384fb245f97155617ff3b8d77e92
MD5 6a385e6528ad539e1fe020290936a999
BLAKE2b-256 4bf526890b0887d30d0c69600dc57e140694a79efd16a21f8a434b694639154d

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 447.7 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 24ab8f1c7c970822bd55dbb091f7eb271b417e777e8b3ae6722e60d67f747c05
MD5 de2cfb8cf6af614e5ee8a2e4dc0769b7
BLAKE2b-256 b17107fe35a44d159ace8dbf13d36daf4cff4b09a8aced6921f02cf6d721dd92

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 551.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3bd044ef32bd6738c3db2cb2d4bc77812e9a3132df942303bbfcd1a484023b60
MD5 38be01c750c6621d708aa1fc2821a8fb
BLAKE2b-256 1d60888086d0239520c087da33ca2a2f1c185b24ce1d882ba68abbd8787c7884

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 471.6 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 fbbe18afb67329577ab6a907f348175d3f6044d179a9b56b02206ff9e67c5b12
MD5 d32d53e3e839ad17e2aa2262712a6ecf
BLAKE2b-256 2606d7f332689c62f1c12adcefb4b90a2a59d7dae34b519711479793a36a83db

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 41eab10e6570e14dd77a346f3dbb1eab3f23a652bce07ba47c8c23116b0cee9c
MD5 d14d7dd61856ea664aeb877adfca529b
BLAKE2b-256 d238f8c5cc48cdec8e8501c2a16272f0bdb2744f20d56b7bd45054034c0146e2

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux2014_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0e5b8fd428d0d00fb7dabc0898de9e87659cb54738d527becff37d3d90df8e88
MD5 f0966b3c2b2f7e3079b86b7faa21653a
BLAKE2b-256 827695b18f12e42577bde90c86a02ff011865381c1afca269f5552e72ff81b10

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e3963c919f65367587cf987a71991e69385f19cec9ad8166249b83e176cdbcd8
MD5 ad3ebc83891b54f92ce29ed1889d63d8
BLAKE2b-256 0fcc6c3bad7a277222c0e92d9aa2cc3cfcc676b027240308f210e2b17bcee345

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 a820ef78f39c29469caacb0bf43ffd024b78f242393c605daa748588b3247306
MD5 85c8198407993344867130354307f187
BLAKE2b-256 d88310bce55e8570e3533b783f32ae2fdc51c71862e52bed54674bc5cac4adc4

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a51a09a3be208e627ebb518a78c639d240584f5d1da8106dcafa31d22103b4df
MD5 b94f91ba50f8b3f451034a59fb8dc7c6
BLAKE2b-256 a1999654209a818aaee9dad684d53123ba043278638daf4ebd7c12898410d14b

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 7309bf511c8b332be2b5a834efbd7ee0cd43db2c811dd916fd0f48acd43e8722
MD5 32c21676f2a9ab0d4a36544614d59a84
BLAKE2b-256 ffa49ffdf457959db96f9d300f947818fcb799af872834d83e960697ff617d8c

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 450.7 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d2fd76d29f4e8d7c4aac42617a0439506144146032b5d7b9b0a42f37f916fdb2
MD5 10fc201c9caff7e798182d27f1e5b613
BLAKE2b-256 1d3d4d9b49854d8389723013337dc485d9159bd0b765b7fe0709105627623b7f

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 556.5 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 d7fecb5172dc885665581437fe96bf8f03ffc0022b723964c272accbb62713b4
MD5 cdb95acd5f439271af76385d284fdd11
BLAKE2b-256 a79906b031b2e108370133f589ecdca05ec40f13113e55c458d0acbfea7956fe

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 473.5 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 17e8f29aae79d870daa3ab48c0dbf83594bf956c2c2125ae45cdfebd2b62d8ed
MD5 1a784d1b95092347d76229decb29f496
BLAKE2b-256 614a1538e8755e11516ba977020955bea78e4888e49604ec5ec930a6a0b812ed

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3948000d753b9110e1eb43a6cba6fdb64c895faebb47628a96550edc5238b78a
MD5 ff25c75e53cb221df934fb8cff49376e
BLAKE2b-256 1eb325f880d612c206746853f0dc660cc63361b0eadb0ecab2b652e88ab5b50f

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux2014_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0b57df1f9530669d61f8708eb15ded6584db4a6733cc5155eb8561d31f292557
MD5 d7f1e829bfcce754a30e9c6507bdb138
BLAKE2b-256 12b16f4b743d915b1234ec3935a2dd5f1ea174feeb5eea6cdff9cd989590960b

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 90f0bb1adcfea326c6548a45cc35474bec56a34d80310b6e78abab313da780fc
MD5 5d035dec640bccb7f100b47bb1f2744a
BLAKE2b-256 8ff52966c2f0b9f17c935a7269b2823f6c664a44ef13c60c11f68a47151fd355

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 fb5f0d29bcbfba6ef9beccba55f567d089747034add5cd7e8dc58842bb745803
MD5 90d99a807441a0b2d7c8604faaa21c28
BLAKE2b-256 e1821cf893d8214871bdfb9d2b999f38f0954360108710c73e6d90d3e8bc08f0

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4b054fd8cf274b958a3d7a201f8b42a30ebf8f76d87770075e1aca6017006e97
MD5 5f96fd64bc5313c877aa1b44637b875f
BLAKE2b-256 59fbd69afe95f265fa7a71e489bf56499abf14eebcec583df1127c1de854d5c6

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 8486a01696e3cdfa47b93caa8f5064c9d277bad1c39eb31947bf2b8f019e3510
MD5 2400717f11838bfe07a59c54c793611f
BLAKE2b-256 2119115ae59d17de39495aa8fc85999980ddae315c4c731e93dfb2a99a02da47

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 450.8 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 db1b3442441577d81bdae85fc7a4bd553e3161ec745e9dd1f2f93889248363fe
MD5 620881006151b68471e848ed814e6442
BLAKE2b-256 7ad8ce78eb4ac48e0767d8e45f849e322dac82a23c6174c9b9e18590042b2715

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 556.9 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 ed14a62f8bf2462f19373c337527ff684deb6d0d6b973fbcaece1f561c30f405
MD5 9e6c6ae6d8e4bbd4462907b09cb0551f
BLAKE2b-256 9769119b2cb8240ea38d57b0dc93bb3e8db2fd661d9da586af05992943f090e1

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 476.0 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 aab21dd5724aa5bdd0aac16f5d175e5df0715fc614910220a918d50f08321982
MD5 24c071e78ba20ff1349642bd39ada969
BLAKE2b-256 a269517226bc8ef0a46fde4e0e8b3085e74499b49f614787042b3d2cae6cbbb0

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3731e0dc1c200e5c2f56ca36bed6c28903f764769f534fbf9ed4178f193e8aa
MD5 cce7beeae84837566e4655497857fbba
BLAKE2b-256 2a8799f351915ac80d72f347f27c0186d3e31a08c784feae37e0e49b7b80d0d0

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux2014_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5be097127be1659bc6cffb5d885c781e61947597e2fcd1ecf48713313e53657d
MD5 ff00f69e42583f3ef66c121ab219295e
BLAKE2b-256 da1f80fbffdae8935ca3bd109a7640f14a12e15aabc3de48d40cca57095f20b6

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 d34848645f3507dc85baa8c67426f0685b08583e930fa3a1ab5048c5f0ba8fc1
MD5 5ef26e84b05891178a034a04902263f4
BLAKE2b-256 d1b98f66b2dcac758fbbab955ebf51d5052b92f8312addac8eed31ee233f129c

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 0b3ae587556a6f45cd982d7684b1318793430d0ae9e376dbc3d877b48ac6d576
MD5 f474161d083d66049cb7d2f4396e4592
BLAKE2b-256 cd71f69a288445cae74618deb1bc2a75605a502eb9e33482e68ef5b2522aaa3e

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e80ade52a06fb433c9ad7d6c8cfb3dafa34f05bedce543e95a670972ba41d65d
MD5 f274cf2bf479c95a93d03ba11dbb38d4
BLAKE2b-256 0a8880da15241aa8ad9b09c044b87ad62988fe72635612aad753feda16bd9d21

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 6f437168752e50ad6a47d054f4a41933693b1675f65663c117067747d95f057c
MD5 abd00f4d5b39864f06e5f77b9cd5a25e
BLAKE2b-256 7285f9ccb1113366f05aea0cd3dd354f10955abf547c7fbd574793d368dcaf57

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 451.4 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d4a7065d7fc991edb93483dbb7bc37dd091a2bac9572d9b9df243e6565d30522
MD5 6ec1eaae343a59d2397094ede61fce77
BLAKE2b-256 5a9deb30174d72cb21486d7b284e70366fa7070597b36fcf5635ed678a68816a

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 543.2 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 36cd223d7fd0fe0e32e82993240e9a24503269c93431e62369088e2299cf4605
MD5 a0bb6a8e96ed4c29ffe0a6b9a4242a56
BLAKE2b-256 d1e49d6c2833b3475dad069d97cbce9c3058efd8e533908eae6be42dd3bb88f5

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 482.8 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 2826d664eb84f9efe0fae47cf20c27f3662aae3556fbcc4cecd5318fbc9239f3
MD5 7a01cf4132913b6ffa4af03c53cd564f
BLAKE2b-256 4a0e7c0f989b2ac99e36ee962f045ea83c2ddffa8578432015a44d0b31a11245

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac9b88a72f2dcfa3facbe6af96d59e82459e5815c15aa59481cc6080937ee02e
MD5 61a1c5195f1f6ae0948202b56398768a
BLAKE2b-256 46affed1023b8535158e2c6d0e67aacfcb96e8e5d85d4329b7937cff3e380105

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux2014_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux2014_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 477db538b596767d036379165a27aa2e19edbae50bec4cea195a986ba50bbad6
MD5 2b79ee93f944fd537906b316acca22c8
BLAKE2b-256 7e04da1258801999b30705a42fe09f6d72acc3598252f56e069cef7b3ed868d3

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1be45b237fea45c705d83215450a9381c2787bbf0720824b1fe23ed72f8db0b7
MD5 abef348ff4d6bad4eb62b192a7f633b0
BLAKE2b-256 0adfea192129370bd1d998e25e1a94eec81a32df198540ccaf2b3fd1c426b60f

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 d2db7bcdc9b3e5a782d71df0163a6587b8b2f759cc4a819859e27e6ad2f778e6
MD5 28f2c3f8be0a7913f9ff66ae77d3e700
BLAKE2b-256 cd9772597a8e2cbc958c01795db2dbb278432a378b774ebf2aaff076abf14b53

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 7c3c9657417bf1eccb94ad64544e12efa8ea3e16612944b32e253314472a54e5
MD5 4ce22ade5c2a0ad36258ca564df33b0d
BLAKE2b-256 74db523a8b35b8e56b9a35507b73304ff3768938940fa0f0a44a2902635b9053

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 657a49b1df5a82985ea6495c6c1497a17e34e41a0bd8ef95a640342a19b8e6a4
MD5 f7208bed9796ca17f6cee50c950334dc
BLAKE2b-256 afbf58ea0812087aa34a4e64f73e6a2bbb98079c09ae871dde662a486d998ba1

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp35-cp35m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp35-cp35m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 454.4 kB
  • Tags: CPython 3.5m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp35-cp35m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 403fa9544ecdedcc5fdc48f5e41e092658ac48222cfe6e75fb5710cb3d14c700
MD5 fc26758e0955fd1251a44d3ca8038b9b
BLAKE2b-256 edcb98b8b60a012ed47c46e53f96df1e867a6daf404bd18e700049cf4e7712c3

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27mu-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27mu-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 2.7mu, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27mu-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 391c30620e3ad6bc53804f32e3f74cbbaa713d95f46ac5f2e54e735d1dfc51c0
MD5 d043d9c5434433d4e19bcba2e8b8179b
BLAKE2b-256 0985ece3c358c53cd34d8304e8f653f1b164c17130b408ec0bb5c819ef5163a1

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27mu-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27mu-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 2.7mu, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27mu-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 1c065de617b7367c4da4de687a071932e48ae200d09c0afbc24415d98aec470d
MD5 9ab5e2e9c17ae2b013dc23023c7b9400
BLAKE2b-256 d4c61d8d283771b889aa81c83306267da394c8b103613e6f405d838026fb087a

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a72cb707cc0a9d06e3912fe5b6c1648d70ac512f3e180018c82fe926926be12c
MD5 d0b25217e4db8dccf67da2d6474f9ce9
BLAKE2b-256 51e1e72e652bfba119b2d79625b79a5e9b7af0c21dbfeafd9362207f1f38f3a9

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27mu-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27mu-manylinux1_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27mu-manylinux1_i686.whl
Algorithm Hash digest
SHA256 b508a826c4b99835e3d8a8d415a6e516cacad4a95ef5ed01f60f9b067f200a51
MD5 e362eb5374904bd5f60b4478a889e59e
BLAKE2b-256 4d5365ab4ca0065e88a3195baf7094b5ca8cc6fa813258bc34c8d4b5780fd403

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 554.4 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 064aac12b8e7813fa3870e7479e9cbd3803e33212b68e555b408711ea8f6cb54
MD5 b7e7aeb39793e14d7de7c40299c226c9
BLAKE2b-256 90c68e32c9e805836e6db45bc034527eb0f23c4334c8698278070909c8bdf35b

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-win32.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 473.0 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 4e6d6b0e541b00d0096a260d5f6eb32f737bfcdb2e5b87a7b7be77ef669c7a6c
MD5 321ad9df55a748cb59f3cc75abb8b8dd
BLAKE2b-256 2efbad92ecd0775bdc872fe9b76c65ca6031e2121121f46a8924d023429b9067

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 2.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 8df3114dfff411aa9827d754bb8fdcdaa15e63c96d7730778fe322f4c85360d8
MD5 7f7abfb70d067c9e7fa062f5d4b176ac
BLAKE2b-256 d4b7ac0dd14167b7f08ca5acca1044435578d210f0f28f76af4593526206f214

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-manylinux2010_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-manylinux2010_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 2.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 d3999f92ab7aab2a99ac7f7730b3bee8d6bd3e52953ed0e87ab881ca4244a315
MD5 c9f72ddadc4e22785516c1086d212c30
BLAKE2b-256 28e86f3ff161552f54ea15bf402e3c7e666b49e880571e9d8274a5ef7b7fcac5

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 95939a7e3972ec20e2e959ee9cd0fd858b25ff3a6f5040c5c78fcab51eeab030
MD5 890ed6dbeb5c549d8a22cbdebc0fc841
BLAKE2b-256 d933c6302fe3981c4af8ab93e5fa49e47d9a8e5f5c6bad6b3ca19cd15e8eb0dd

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-manylinux1_i686.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 85b37acd054f8f778e5c9832e17fb651f321a3daafa0eb94360eeffce141b0cf
MD5 9e1fb39b751661bbee5b20ff521995cb
BLAKE2b-256 3fb610f8dbd5c927ee4a749ba3cdedf9bddcc9acb4acd6996b993deb2e50c499

See more details on using hashes here.

File details

Details for the file zstandard-0.14.1-cp27-cp27m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: zstandard-0.14.1-cp27-cp27m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 453.9 kB
  • Tags: CPython 2.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for zstandard-0.14.1-cp27-cp27m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ec1a20936484f3804fba4f29f7d8ed67c70e44536b0f0191a13eff4dc61c815c
MD5 cab1a07e1dea0e1f68c97ce0bef6d949
BLAKE2b-256 7ed6b828f852416ddc82e0e4535c10e219edae27e48b0dad3816d7718ce05ae9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page