Skip to main content

GZIP compressed pickle serialization.

Project description

Logo Squash Pickle

License PyPI - Python Version PyPI pre-commit.ci status GitHub Workflow Status

Like a pickle, only smaller*.

Tiny python package that compresses your pickles using gzip. Quacks like a pickle.

* For small objects (< 100 bytes) gzip overhead can end up increasing in size. Only squash your pickles when you are working with big objects.


Getting Started

First install the package, this has no additional dependencies:

pip install squashpickle

Then replace your pickle calls with squashpickle ones. squashpickle implements, dump, dumps, load, and loads functions.

To avoid confusion, it is recommended to dump and load to file with .gz extension eg: pkl.gz, but there is nothing enforcing this.


Performance

The GZIP compression can have a HUGE impact on large objects. Say you are pickling something like a polars / pandas dataframe; these pickles may end up being hundreds of MBs. With squashpickle can get compression ratios exceeding 10x.

For example, if we load a large dataframe of Australian weather data. Using pickle, this object serializes to 37794198 bytes (~37.8MB). Dumping the same dataframe with squashpickle results in 3370363 bytes (~3.4MB), around 9% of the overall file.

import polars as pl
import pickle
import squashpickle

df = pl.read_csv(r"C:\temp\weatherAUS.csv", null_values=["NA"])
print(len(pickle.dumps(df)), len(squashpickle.dumps(df)))

As with any compression, there is a performance cost to achieving the smaller files. For objects <1MB this is hardly noticeable, but for objects hundreds of MBs the delay can be significant. It'll depend on your use case if this is a worthwhile tradeoff.


Security

squashpickle uses Python's pickle and gzip modules internally. As with pickle and gzip, never load data from untrusted sources. Deserializing malicious pickle data can execute arbitrary code.

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

squashpickle-0.2.0.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

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

squashpickle-0.2.0-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file squashpickle-0.2.0.tar.gz.

File metadata

  • Download URL: squashpickle-0.2.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for squashpickle-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d05c2116bc9acbf5583c58c18460a5af9d61a811cdc9821408a544d3b0086011
MD5 5c61fb9aa4f086554d364338bcc077a0
BLAKE2b-256 e903450ab4ea850229ab5ff9a728f70b24de467095f8bbe1bb331d74481eb601

See more details on using hashes here.

File details

Details for the file squashpickle-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: squashpickle-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.20 {"installer":{"name":"uv","version":"0.11.20","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for squashpickle-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d6fd9f7830b0f0449bc3d4466bea373d8384838f16202560bd9694b016d44584
MD5 c13e615e20c969b7f350a9678ce6a5e2
BLAKE2b-256 7f65a710b03932d1e576e1b7974d57180cf291a1d3f4c74d57c689c42132cbf7

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