#python #marshal #reference #object #byte #load #pyc

python_marshal

A Rust library for reading and writing Python marshal files

2 releases

new 0.1.1 Jan 14, 2025
0.1.0 Jan 11, 2025

#1334 in Development tools

Download history 217/week @ 2025-01-10

217 downloads per month

GPL-3.0-or-later

64KB
1.5K SLoC

python_marshal

python_marshal is a Rust implementation of Python's marshal module. It provides functionality to read and write Python objects in a binary format. Additionally, it includes extensions for handling .pyc files directly. NOTE: This library only supports Python 3.0 and later.

Installation

Use cargo add python_marshal to add this library to your project. You can also manually add it to your Cargo.toml file:

[dependencies]
python_marshal = "0.1.0"

Usage

Check out the documentation for more information. There are examples available in the examples directory.

Important to note: since Python allows for recursive references we have to store them separately. This means that we represent references to objects using Object::LoadRef(index) and Object::StoreRef(index). This is necessary to avoid infinite recursion when serializing and deserializing objects.

use python_marshal::load_bytes;

let data = b"r\x00\x00\x00\x00"; // Example byte data with a reference
let python_version = (3, 10);
let (object, references) = load_bytes(data, python_version.into()).unwrap();

references is a hashmap that maps the index of the reference to the object it references.

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

License

This project is licensed under the MIT License.

Dependencies

~1.2–2MB
~44K SLoC