The `bytesparse` library provides utilities for managing sparse bytes within a virtual memory space. It offers an interface similar to Python's built-in `bytearray`, allowing for non-contiguous data allocation across a potentially infinite addressing space. Data chunks are stored internally using mutable `bytearray` objects. The library is currently at version 1.1.0 and exhibits an active release cadence, with several updates in the past year.
Install & Compatibility
Where this runs
tested against v1.1.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.920 runs
installs and imports cleanly · install 0.0s · import 0.022s · 18.4MB
glibcpy 3.10–3.920 runs
installs and imports cleanly · install 1.6s · import 0.020s · 19MB
16MB installed
● package 16MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
A generic virtual memory class with an infinite address range.
from bytesparse import Memory
A subclass of Memory that behaves more like a bytearray.
from bytesparse import bytesparse
This quickstart demonstrates how to initialize `bytesparse` and `Memory` objects, perform basic read/write operations, and store data sparsely at arbitrary addresses. It shows how `bytesparse` can be initialized from bytes and how `poke` can be used for non-contiguous writes.
from bytesparse import bytesparse, Memory
# Create a bytesparse object from existing bytes
m = bytesparse(b'Hello, World!')
print(f"Initial bytesparse: {m}")
print(f"Length: {len(m)}")
print(f"As bytes: {bytes(m)}")
# Modify the content
m[0:5] = b'Ciao '
print(f"After modification: {bytes(m)}")
# Store data at a sparse, non-contiguous address
m.poke(1000, b'remote data')
print(f"After poking remote data: {m}")
print(f"Virtual length increased: {len(m)}")
# Accessing a generic Memory object
mem = Memory()
mem[0x100:0x105] = b'DATA_A'
mem[0x200:0x205] = b'DATA_B'
print(f"Memory object blocks: {mem.to_blocks()}")
print(f"Memory at 0x100: {mem.peek(0x100, 5)}")
Upgrade
Version history
Breaking-change detection hasn't run for this library yet.
Audit
Security & dependencies
CVE tracking and dependency tree are planned for a later release.