[BUG] autobahn/__init__.py eagerly imports flatbuffers → numpy is loaded in every process (regression after 24.4.2)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 58/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- numpy, python
- Área
- backend, performance
Línea de trabajo
Start by reading autobahn/__init__.py and trace its import of flatbuffers to flatbuffers/number_types.py, where NumPy is loaded at module scope. Compare that import path with the 24.4.2 behavior described in the issue, then check the existing tests around package imports and NumPy compatibility. Done means importing Autobahn without using FlatBuffers does not load NumPy, and a broken NumPy installation does not prevent importing Autobahn.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Since some release after 24.4.2, import autobahn imports the vendored flatbuffers
package at module-import time, and flatbuffers imports numpy whenever numpy
happens to be installed. Users who never touch WAMP or FlatBuffers now pay for numpy
in every process.
This reaches well beyond autobahn itself: daphne imports autobahn.twisted.websocket
from its Django AppConfig, so every Django + Channels project that has numpy
anywhere in its environment now loads numpy at django.setup() — web workers,
Celery workers, beat, management commands.
Import chain
daphne/apps.py:6 import daphne.server
daphne/server.py:42
daphne/ws_protocol.py:6 from autobahn.twisted.websocket import ...
autobahn/__init__.py:35 from autobahn import flatbuffers
autobahn/flatbuffers/__init__.py:15 from . import util
autobahn/flatbuffers/util.py:15 from . import encode
autobahn/flatbuffers/encode.py:15 from . import number_types as N
autobahn/flatbuffers/number_types.py:21 np = import_numpy()
autobahn/flatbuffers/compat.py:75 import numpy as np
Two independent things combine here:
autobahn/__init__.pygained an unconditionalfrom autobahn import flatbuffers
(it appears to servecheck_zlmdb_flatbuffers_version_in_sync()). In 24.4.2 that
module imported only_version,osandtxaio.flatbuffers/number_types.pycallsimport_numpy()at module level, and
compat.import_numpy()imports numpy wheneverPathFinder.find_spec("numpy")
succeeds — i.e. "numpy is installed" is treated as "numpy should be loaded".
Impact 1 — memory, for users who never use FlatBuffers
Measured with resource.getrusage(...).ru_maxrss on Python 3.13.13 / numpy 2.4.6
(macOS arm64):
| process | RSS |
|---|---|
| bare interpreter | 16.4 MB |
import txaio (what 24.4.2 pulled in) |
16.3 MB |
import numpy |
29.4 MB |
That is roughly +13 MB per process, multiplied by however many workers a
deployment runs. For a Django deployment with web + Celery + beat + a few
background workers this is a noticeable, invisible regression: nothing in the
application asks for numpy.
Impact 2 — a broken numpy now prevents importing autobahn at all
import_numpy() imports numpy deliberately outside try/except, with the comment
"We do this outside of try/except block in case numpy exists but is not installed
correctly". Combined with the eager import in __init__.py, a numpy whose import
fails — for example an ABI mismatch of the kind described in #1890 — makes
autobahn itself unimportable, and with it daphne and the whole Django app.
Reproducer for that failure mode:
import sys
class Block:
def find_spec(self, name, path=None, target=None):
if name == "numpy":
raise ImportError("simulating a broken numpy install")
return None
sys.meta_path.insert(0, Block())
import autobahn.twisted.websocket # ImportError, raised from autobahn/__init__.py:35
Reproducer showing the import chain itself:
import sys, traceback
class Hook:
def find_spec(self, name, path=None, target=None):
if name == "numpy":
traceback.print_stack()
sys.meta_path.remove(self)
return None
sys.meta_path.insert(0, Hook())
import autobahn.twisted.websocket
print("numpy" in sys.modules) # True
Suggested fixes
Any one of these removes the cost for users who do not use FlatBuffers:
- Move
from autobahn import flatbuffersinside
check_zlmdb_flatbuffers_version_in_sync()(or behind a lazy accessor), so that
importing autobahn does not import the serializer. - Resolve numpy lazily in
number_types.pyinstead of at module-import time. - At minimum, wrap the numpy import in
try/except ImportError, so a broken numpy
degrades to "FlatBuffers numpy features unavailable" instead of
"autobahn cannot be imported".
Options 1 and 2 are independent and either alone fixes the memory issue; 3 addresses
the robustness issue.
Environment
autobahn 26.7.1, daphne 4.2.2, numpy 2.4.6, Python 3.13.13, macOS arm64.
Noticed while upgrading autobahn to 26.7.1 for CVE-2026-77528: a guard test asserting
that numpy is absent from the Django setup import graph started failing.
- Lenguaje dominante
- Python
- Estrellas
- 2.5k
- Forks
- 769
- Merge medio
- 1 d 12 h
- PR fusionados (30 d)
- 15
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de crossbario/autobahn-python
-
CI-CD enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
crossbario/autobahn-python#1945 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug CI-CD
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
crossbario/autobahn-python#1932 ·
Los mantenedores suelen responder en 1 día
-
CI-CD enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
crossbario/autobahn-python#1829 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
crossbario/autobahn-python#1963 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
crossbario/autobahn-python#1962 ·
Los mantenedores suelen responder en 1 día
Todos los issues de crossbario/autobahn-python
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
huggingface/smolagents#2976 ·
Los mantenedores suelen responder en 1 día
-
pulp-cli 0.41 break username password auth in older configs (cert and key present but empty)Abiertobug Triage-Needed
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
FuRongJun-1999/dsh-memory#170 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
pgvector/pgvector-python#163 ·
-
[开源推荐] 打拼音就出篆书的输入法,附古文字创作小工具Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
521xueweihan/HelloGitHub#3940 ·