zodbpickle
Fork of Python 3 pickle module
Decision gist · record as of 2026-08-14
Yes, if you work with ZODB or need to deserialize Python 2 pickles in Python 3. The package is actively maintained, has no security vulnerabilities, and solves a real compatibility problem. Install friction is moderate due to C compilation, but wheels are available for common platforms. Verify ZPL-2.1 license compatibility with your project first.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later; compiled C extensions must build for your platform.
- Pickle module security warning: never unpickle untrusted data.
- Medium install friction due to compiled C extensions across multiple platforms (macOS x86/ARM, Linux i686/aarch64/x86_64, Windows).
License · maintenance · safety
ZPL-2.1 (unclear) — Licensed under ZPL-2.1 (Zope Public License 2.1), but license treatment is marked unclear in the fact sheet—verify compatibility with your project's licensing requirements before use.
last release 2026-05-04 (102 days) · last repo commit 2026-08-14 · 18 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 220,204 downloads/mo, #9,309 on PyPI
Alternatives
Verify before relying
from zodbpickle import pickle
# Load Python 2 pickle on Python 3
data = pickle.loads(b"S'\\xff'\np0\n.", encoding='bytes')
# Or use explicit implementation choice
from zodbpickle import fastpickle # always C
from zodbpickle import slowpickle # always Python- Exact scope of ZPL-2.1 license compatibility with common project licenses
- Performance characteristics of fastpickle vs slowpickle for typical workloads
- Whether noload() operation is actively used by ZODB or legacy-only
What it is and what it does
zodbpickle is a fork of Python's pickle module designed to bridge serialization between Python 2 and 3 codebases, particularly for ZODB (Zope Object Database) applications. It adds support for protocol 3 opcodes under Python 2 and restores the noload() operation removed in Python 3, which ZODB uses to retrieve persistent references without loading objects into memory.
The package handles the tricky cross-version problem where Python 2 strings and Python 3 bytes have different semantics: it provides encoding options (like errors='bytes') to let you control whether legacy pickles deserialize as bytes or strings. It also offers a choice between fast C-based and slow pure-Python implementations, useful for debugging or when C extensions aren't available. No runtime dependencies means it integrates cleanly into existing projects.
Use it for
- Migrating ZODB databases from Python 2 to Python 3 while preserving pickled object compatibility
- Loading legacy Python 2 pickles in Python 3 applications with correct string/bytes handling
- Optimizing ZODB cache behavior by using noload() to inspect persistent references without object instantiation
- Comparing pickle behavior between C and pure-Python implementations during debugging
- Building cross-version serialization layers where standard pickle doesn't handle protocol 3 or legacy opcodes
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you work with ZODB or need to deserialize Python 2 pickles in Python 3.
The package is actively maintained, has no security vulnerabilities, and solves a real compatibility problem. Install friction is moderate due to C compilation, but wheels are available for common platforms. Verify ZPL-2.1 license compatibility with your project first.
Install
zodbpickle on PyPI
Before you install
Medium install friction due to compiled C extensions across multiple platforms (macOS x86/ARM, Linux i686/aarch64/x86_64, Windows). Active maintenance with recent release (102 days ago) and support for current Python versions including 3.14.
Requires Python 3.10 or later; compiled C extensions must build for your platform. Pickle module security warning: never unpickle untrusted data.
License in practice
Licensed under ZPL-2.1 (Zope Public License 2.1), but license treatment is marked unclear in the fact sheet—verify compatibility with your project's licensing requirements before use.
Quickstart
from zodbpickle import pickle
# Load Python 2 pickle on Python 3
data = pickle.loads(b"S'\\xff'\np0\n.", encoding='bytes')
# Or use explicit implementation choice
from zodbpickle import fastpickle # always C
from zodbpickle import slowpickle # always Python
Verify before relying
- Exact scope of ZPL-2.1 license compatibility with common project licenses
- Performance characteristics of fastpickle vs slowpickle for typical workloads
- Whether noload() operation is actively used by ZODB or legacy-only
Package facts
| License | ZPL-2.1 unclear |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Medium. Platform-specific wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 102 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 220,204 / month, #9,309 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableFramework :: ZODBIntended Audience :: DevelopersOperating System :: OS IndependentProgramming Language :: PythonProgramming Language :: Python :: 3Programming Language :: Python :: 3 :: OnlyProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyTopic :: DatabaseTopic :: Software Development :: Libraries :: Python Modules |
Evidence: zodbpickle-4.4-cp310-cp310-macosx_10_9_x86_64.whl; zodbpickle-4.4-cp310-cp310-macosx_11_0_arm64.whl; zodbpickle-4.4-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl; zodbpickle-4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl; zodbpickle-4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl; zodbpickle-4.4-cp310-cp310-win_amd64.whl; zodbpickle-4.4-cp311-cp311-macosx_10_9_x86_64.whl; zodbpickle-4.4-cp311-cp311-macosx_11_0_arm64.whl; zodbpickle-4.4-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl; zodbpickle-4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl; zodbpickle-4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl; zodbpickle-4.4-cp311-cp311-win_amd64.whl; zodbpickle-4.4-cp311-cp311-win_arm64.whl; zodbpickle-4.4-cp312-cp312-macosx_10_9_x86_64.whl; zodbpickle-4.4-cp312-cp312-macosx_11_0_arm64.whl; zodbpickle-4.4-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl; zodbpickle-4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl; zodbpickle-4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl; zodbpickle-4.4-cp312-cp312-win_amd64.whl; zodbpickle-4.4-cp312-cp312-win_arm64.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “zodb pickle compatibility”
- zodbpickleProvides a ZODB-compatible pickle interface that handles…
- pickle5Backports the pickle 5 protocol (PEP 574) and related pickle module…
- BTreesBTrees provides persistent, scalable B-tree data structures optimized…
Give your agent the search over MCP, or paste the wish link into any chat.
More Python Modules packages
Converts domain names between Unicode and ASCII-compatible encoding (Punycode) according to IDNA 2008 and Unicode Technical Standard 46, with security validation and broader script coverage than the standard library.
Install it if you work with internationalized domain names, need to validate domains, or use HTTP clients that depend on it transitively.
Setuptools is a Python build backend and package management tool that handles building, distributing, and installing Python packages, including support for C/C++ extension modules.
PyYAML parses and emits YAML 1.1 data format, enabling serialization and deserialization of configuration files and Python objects to and from human-readable YAML text.
Pydantic validates Python data structures against type hints, coercing and checking input at runtime to ensure it matches a declared schema.
Provides reusable metadata objects for use with PEP-593 `typing.Annotated` to express common constraints like bounds, collection sizes, and predicates on types.
Install it if you use or build libraries that need to express type constraints in a standardized, inspectable way—or if you want to annotate your own types with…
Provides runtime tools to inspect and introspect Python type annotations, enabling programmatic examination of type hints at execution time.
See also pickle5 · tblib · ZODB · cloudpickle · persistent · compress-pickle · BTrees · dill · traceback2 · jsonpickle