tfds.features.Audio eagerly imports TensorFlow in _AudioDecoder.__init__, breaking TensorFlow-less usage
Los mantenedores suelen responder en 1 día
@raashish1601 ya está trabajando en esto.
Desde el 6/10/2026.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- data, machine-learning
Línea de trabajo
Comienza en tensorflow_datasets/core/features/audio_feature.py, en _AudioDecoder.init, y sigue cómo _LazyDecoder.decode_audio utiliza _dtype. Verifica que construir tfds.features.Audio y tfds.builder("librispeech") funcione sin TensorFlow, mientras que la decodificación de audio siga gestionando el dtype cuando TensorFlow esté disponible.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
TFDS supports TensorFlow-less dataset reading (e.g. via tfds.data_source with JAX, PyTorch, or Grain). However, constructing any dataset containing an audio feature (such as librispeech) or directly instantiating tfds.features.Audio fails with ModuleNotFoundError: No module named 'tensorflow' in an environment without TensorFlow.
Root Cause
In tensorflow_datasets/core/features/audio_feature.py, _AudioDecoder.__init__ eagerly evaluates tf.dtypes.as_dtype:
class _AudioDecoder(abc.ABC):
def __init__(self, file_format: Optional[str], np_dtype: np.dtype, shape: utils.Shape):
self._file_format = file_format
self._np_dtype = np_dtype
self._dtype = tf.dtypes.as_dtype(self._np_dtype) # <--- Forces import of lazy tf module
self._shape = shape
self._channels = shape[1] if len(shape) > 1 else 1
Because tf is lazily imported via etils.epy.lazy_imports, accessing tf.dtypes triggers import tensorflow immediately during feature specification construction in _info(), even when only reading NumPy arrays.
Minimal Reproduction
In a virtual environment with only tensorflow-datasets installed (no tensorflow):
import tensorflow_datasets as tfds
# Fails with ModuleNotFoundError: No module named 'tensorflow'
tfds.features.Audio(sample_rate=16000)
# Or:
tfds.builder("librispeech")
Minimal Workaround
Monkeypatch _AudioDecoder.__init__ before importing tfds:
import tensorflow_datasets.core.features.audio_feature as af
def _patched_init(self, file_format, np_dtype, shape):
self._file_format = file_format
self._np_dtype = np_dtype
self._dtype = None
self._shape = shape
self._channels = shape[1] if len(shape) > 1 else 1
af._AudioDecoder.__init__ = _patched_init
import tensorflow_datasets as tfds
# Now succeeds without TensorFlow installed:
ds = tfds.data_source("librispeech", split="train_clean100")
Suggested Fix
Make _dtype a lazy property or defer tf.dtypes.as_dtype to _LazyDecoder.decode_audio, where TensorFlow tensors are actually consumed:
@property
def _dtype(self):
return tf.dtypes.as_dtype(self._np_dtype)
- Lenguaje dominante
- Python
- Estrellas
- 4.6k
- Forks
- 1.6k
- Merge medio
- 9 h
- PR fusionados (30 d)
- 8
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 tensorflow/datasets
-
DatasetInfo.read_from_directory reads the deprecated FieldDescriptor.label eagerly, warning on every openPosiblemente ocupada @jabrailkhalil la tomó hace 7 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tensorflow/datasets#11245 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
required dependency on importlib_resources missingPosiblemente ocupada @ArS377 la tomó hace 87 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
tensorflow/datasets#11212 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
dataset request
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
tensorflow/datasets#11228 ·
Los mantenedores suelen responder en 1 día
-
QM9 download links are brokenPosiblemente ocupada @mylonasc la tomó hace 126 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 55/100
tensorflow/datasets#11210 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 1/100
tensorflow/datasets#11196 ·
Los mantenedores suelen responder en 1 día
Todos los issues de tensorflow/datasets
Issues similares
-
wr.dynamodb.read_items returns [{}] for a single partition value that does not existPosiblemente ocupada @auraseb la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
aws/aws-sdk-pandas#3520 ·
Los mantenedores suelen responder en 2 días
-
requires triage typing
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
sqlalchemy/sqlalchemy#13704 ·
Los mantenedores suelen responder en 1 día
-
Edit tool converts CRLF files to LFPosiblemente ocupada @RaphaelFakhri la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
huggingface/tau#774 ·
Los mantenedores suelen responder en 1 día
-
show ignores the row limit when a column or table name contains "limit"Posiblemente ocupada @RaphaelFakhri la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
What happened to `check.py`?Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
linebender/resvg#1179 · 1 comentario ·
Los mantenedores suelen responder en 2 días