Buf lanza protobuf-py, una librería Protocol Buffers escrita desde cero para Python

Fuentes: protobuf-py: a Protocol Buffers library for Python, built from scratch

Buf ha presentado protobuf-py, una biblioteca de Protocol Buffers para Python desarrollada íntegramente desde cero. Pasa todos los casos binarios y JSON del conjunto de conformidad de Protobuf en proto2, proto3 y editions, y ofrece compatibilidad con extensiones, opciones personalizadas, campos desconocidos, mensajes dinámicos y well-known types. El código generado es legible y tipado, no tiene dependencias en tiempo de ejecución y funciona sobre Python 3.10+ en modo puro. Si se instala un acelerador en Rust opcional, su rendimiento en cargas de producción iguala al de upb, el motor en C que utiliza el paquete oficial de Google.

La motivación de Buf parte de una crítica al estado actual de Protobuf en Python. El paquete de Google es completo, pero arrastra una API moldeada por C++ y Java: los _pb2.py generados son difíciles de leer, los accesos a campos cruzan constantemente al motor en C, y métodos como HasField o WhichOneof responden a ergonomías ajenas a Python. betterproto, la alternativa más agradable, sacrifica buena parte de la especificación. Buf buscó un equilibrio: una implementación completa que se sintiera idiomática en Python.

protobuf-py mantiene los datos del mensaje en objetos Python con slots, mientras el acelerador en Rust se encarga de parsear y serializar directamente sobre ellos. Esto permite lecturas sin coste extra de traducción, oneofs pattern-matchable, enums reales (IntEnum), compatibilidad con pyright, mypy y ty, imports relativos y registro de tipos explícito en lugar de un pool global.

En un banco de pruebas con cargas realistas (respuesta de página de inicio con textos densos, similar a tráfico de redes sociales o agentes LLM), protobuf-py alcanza 1,06 veces el rendimiento de upb de extremo a extremo, pese a ser más lento en parseo y serialización aislados. El acelerador Rust es opcional y automático, y la biblioteca funciona en el build free-threaded de Python 3.14.