opendatalab/MinerU · error · AttributeError
module {__name__!r} has no attribute {name!r}
Error message
module {__name__!r} has no attribute {name!r} What it means
AttributeError raised by the lazy-import __getattr__ in mineru.data.data_reader_writer: the requested attribute is not one of the lazily exported names (e.g. MultiBucketS3DataWriter, S3DataReader, S3DataWriter). The module defers heavy imports; anything outside the known lazy export set falls through to this error.
Source
Thrown at mineru/data/data_reader_writer/__init__.py:38
"""按需加载 S3 DataReader/DataWriter,避免默认安装场景强制依赖 boto3。"""
if name in {"MultiBucketS3DataReader", "MultiBucketS3DataWriter"}:
from .multi_bucket_s3 import MultiBucketS3DataReader, MultiBucketS3DataWriter
s3_exports = {
"MultiBucketS3DataReader": MultiBucketS3DataReader,
"MultiBucketS3DataWriter": MultiBucketS3DataWriter,
}
globals().update(s3_exports)
return s3_exports[name]
if name in {"S3DataReader", "S3DataWriter"}:
from .s3 import S3DataReader, S3DataWriter
s3_exports = {"S3DataReader": S3DataReader, "S3DataWriter": S3DataWriter}
globals().update(s3_exports)
return s3_exports[name]
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
View on GitHub (pinned to 4fe4bde114)
Solutions
- Check the package __init__ / dir(mineru.data.data_reader_writer) for the actual exported names
- Use the correct current class name (e.g. S3DataReader/S3DataWriter for S3, or import the defining submodule directly)
- Pin or upgrade to the MinerU version whose API your code targets
- For S3 classes, ensure optional S3 dependencies are installed so their imports succeed
Example fix
# before from mineru.data.data_reader_writer import S3Reader # AttributeError # after from mineru.data.data_reader_writer import S3DataReader
Defensive patterns
Strategy: type-guard
Validate before calling
import mineru.data.data_reader_writer as drw
name = 'S3DataReader'
if not hasattr(drw, name):
raise ImportError(f'{name} not available in this MinerU version')
Klass = getattr(drw, name) Type guard
from mineru.data.data_reader_writer import S3DataReader, S3DataWriter
KNOWN = {'S3DataReader', 'S3DataWriter', 'MultiBucketS3DataWriter'}
def reader_class_exists(name: str) -> bool:
import mineru.data.data_reader_writer as drw
return name in KNOWN and hasattr(drw, name) Try / catch
try:
from mineru.data.data_reader_writer import S3DataReader
except ImportError as exc:
raise ImportError('Install MinerU S3 extras (boto3) or fix the class name') from exc Prevention
- Check dir(mineru.data.data_reader_writer) for available classes after upgrading MinerU
- Import from the defining submodule when unsure of the lazy export list
- Pin the MinerU version in requirements to prevent silent API changes
- Run a smoke import of every symbol you use in CI
When it happens
Trigger: from mineru.data.data_reader_writer import SomeName where SomeName is not defined in the package's __init__ lazy export table; also getattr(mineru.data.data_reader_writer, 'typo') style access; common with renamed or removed reader/writer classes across MinerU versions.
Common situations: Upgrading MinerU and using a class name that moved or was removed (e.g. old reader/writer names); IDE autocompleting a stale name; copy-pasted code from older docs.
Related errors
- Please install vllm to use the vllm-async-engine backend.
- Please install transformers to use the transformers backend.
- Please install vllm to use the vllm-engine backend.
- Please install vllm to use the vllm-async-engine backend.
- Please install lmdeploy to use the lmdeploy-engine backend.
AI-assisted analysis of opendatalab/MinerU@4fe4bde114 (2026-08-14).
Data as JSON: /api/errors/9186fb0bf24b59c8.
Report an issue: GitHub.