| Crates.io | python_marshal |
| lib.rs | python_marshal |
| version | 0.4.7 |
| created_at | 2025-01-11 21:42:31.905468+00 |
| updated_at | 2025-08-21 15:18:40.013619+00 |
| description | A Rust library for reading and writing Python marshal files. |
| homepage | |
| repository | https://github.com/Svenskithesource/python-marshal |
| max_upload_size | |
| id | 1512771 |
| size | 248,783 |
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.10, 3.11, 3.12 and 3.13.
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"
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.
This library is very thoroughly tested. To ensure it can output the exact same bytes as the input data, we rewrite the whole standard library and compare the output with the input. It produces a 1:1 copy of the input data.
You can run the tests with cargo test (integration tests only work on Windows).
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
This project is licensed under the GNU GPL v3.0 license. See LICENSE for more information.