bytespec

Опишите данные Python-классом, сохраните их в байты и прочитайте обратно. bytespec сам определяет, где заканчивается одно поле и начинается следующее.

from bytespec import ProtoModel

class User(ProtoModel):
    name: str
    active: bool

user = User(name="Anna", active=True)
encoded = user.encode()
decoded = User.decode(encoded)

print(decoded.name, decoded.active)
assert decoded == user
Anna True

Это новый User с теми же значениями. В байты можно записывать и списки, и вложенные модели. Для существующего бинарного формата вы явно задаёте размеры и порядок полей — без отдельного языка схем и генерации кода.

pip install bytespec

или

uv add bytespec

Python 3.10+. Начните с первой модели или выберите нужную задачу:

Первая модель

От Python-класса до разбора полученных байтов. Знание протоколов не нужно.

Первая модель
Зачем bytespec?

Один пакет в bytespec, struct и Construct. Когда подходит каждый инструмент.

Зачем bytespec?
Практические задачи

Прочитать TCP-пакет, разобрать несколько сообщений, настроить порядок байтов.

Практические задачи
Справочник API

Сигнатуры, параметры и точные правила чтения и записи.

API Reference