Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
Back to tool/Back to issues
#297·ddddocr

[BUG] 1.6.0 版本存在导入错误:无法从 core/__init__.py 导入 DdddOcr

Author: hbjohnsanCreated Feb 4, 2026Updated Mar 25, 2026

问题描述

在 ddddocr 1.6.0 版本中存在导入错误,导致无法正常使用 DdddOcr 类。

环境信息

  • 操作系统:Ubuntu 22.04(其他操作系统同样受影响)
  • Python 版本:3.12.3(其他 Python 3.12 版本同样受影响)
  • ddddocr 版本:1.6.0
  • onnxruntime 版本:1.18.1

重现步骤

  1. 安装 ddddocr:

    bash
    pip install ddddocr==1.6.0
  2. 运行以下 Python 代码:

    python
    import ddddocr
    
    try:
        ocr = ddddocr.DdddOcr()
        print("初始化成功")
    except Exception as e:
        print(f"初始化失败: {e}")

预期行为

应该成功创建 ddddocr.DdddOcr() 实例。

实际行为

抛出以下错误:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import ddddocr
  File ".../site-packages/ddddocr/__init__.py", line 17, in <module>
    from .core import DdddOcr
  File ".../site-packages/ddddocr/core/__init__.py", line 10, in <module>
    __all__ = [
NameError: name 'DdddOcr' is not defined

问题分析

经过分析,发现以下问题:

问题 1:core/__init__.py 缺少 DdddOcr 导出

文件路径: ddddocr/core/__init__.py

当前内容:

python
from .base import BaseEngine
from .ocr_engine import OCREngine
from .detection_engine import DetectionEngine
from .slide_engine import SlideEngine

__all__ = [
    'BaseEngine',
    'OCREngine', 
    'DetectionEngine',
    'SlideEngine',
    'DdddOcr'  # ❌ 这里引用了未导入的名称
]

问题: DdddOcr 类实际位于 ddddocr.compat.legacy 模块中,但 core/__init__.py 试图将其包含在 __all__ 中而没有导入。

问题 2:__init__.py 导入了不存在的符号

文件路径: ddddocr/__init__.py

当前内容:

python
from .utils import (
    ALLOWED_IMAGE_FORMATS,    # ❌ 不存在
    MAX_IMAGE_BYTES,          # ❌ 不存在
    MAX_IMAGE_SIDE,           # ❌ 不存在
    base64_to_image,
    get_img_base64,
    png_rgba_black_preprocess,
)

问题: ALLOWED_IMAGE_FORMATS、MAX_IMAGE_BYTES、MAX_IMAGE_SIDE 等符号在 utils 模块中不存在。

问题 3:向后兼容性断裂

DdddOcr 类已经从主要模块移动到 compat.legacy 模块,但导入路径没有相应更新。

建议的修复方案

修复方案 1:修复 core/__init__.py

python
# coding=utf-8
"""
核心功能模块
提供OCR识别、目标检测、滑块匹配等核心功能
"""

from .base import BaseEngine
from .ocr_engine import OCREngine
from .detection_engine import DetectionEngine
from .slide_engine import SlideEngine

# 从 compat.legacy 导入 DdddOcr 以提供向后兼容
from ..compat.legacy import DdddOcr

__all__ = [
    'BaseEngine',
    'OCREngine',
    'DetectionEngine', 
    'SlideEngine',
    'DdddOcr'  # ✅ 现在被正确导入
]

修复方案 2:修复 __init__.py

python
# coding=utf-8
from .core import DdddOcr
from .utils import (
    base64_to_image,
    get_img_base64,
    png_rgba_black_preprocess,
    DDDDOCRError,
    ModelLoadError,
    ImageProcessError,
)

# 添加向后兼容的别名(如果需要)
DdddOcrInputError = DDDDOCRError
InvalidImageError = ImageProcessError

__all__ = [
    "DdddOcr",
    "base64_to_image", 
    "get_img_base64",
    "png_rgba_black_preprocess",
    "DDDDOCRError",
    "ModelLoadError", 
    "ImageProcessError",
    "DdddOcrInputError",  # 向后兼容别名
    "InvalidImageError",   # 向后兼容别名
]

修复方案 3:替代方案(如果需要保持原结构)

如果不想修改 core/__init__.py,可以修改 __init__.py 直接导入:

python
# 替代方案:直接从 compat.legacy 导入
from .compat.legacy import DdddOcr

测试验证

测试脚本

python
import ddddocr

def test_imports():
    """测试所有必要的导入"""
    print("测试 ddddocr 导入...")
  
    # 测试主类导入
    ocr = ddddocr.DdddOcr(show_ad=False)
    print(f"✓ DdddOcr 类导入成功: {type(ocr).__name__}")
  
    # 测试工具函数
    from ddddocr.utils import base64_to_image, get_img_base64
    print("✓ 工具函数导入成功")
  
    # 测试错误类
    from ddddocr.utils import DDDDOCRError, ModelLoadError, ImageProcessError
    print("✓ 错误类导入成功")
  
    print("\n✅ 所有测试通过!")
  
if __name__ == "__main__":
    test_imports()

测试结果

应用修复后预期输出:

✓ DdddOcr 类导入成功: DdddOcr
✓ 工具函数导入成功
✓ 错误类导入成功

✅ 所有测试通过!

已创建的修复工具

我已经创建了一个自动修复工具,可以临时解决这个问题:

python
# 文件:tools/fix_ddddocr.py
"""
ddddocr 包自动修复工具
用于修复 1.6.0 版本的导入错误
"""

# 完整代码见附件

使用方法:

bash
python tools/fix_ddddocr.py

这个工具会:

  1. 自动检测虚拟环境
  2. 找到 ddddocr 包路径
  3. 备份原文件
  4. 应用上述修复
  5. 验证修复结果

影响评估

影响范围

  • 所有使用 ddddocr==1.6.0 的用户
  • 所有 Python 3.12 环境(可能也影响其他 Python 版本)

严重程度

  • 严重性: 高(包完全无法使用)
  • 影响: 100% 的用户会遇到此问题

向后兼容性

修复方案保持了向后兼容性:

  1. 现有的 ddddocr.DdddOcr() 调用继续有效
  2. 现有的工具函数继续可用
  3. 错误类提供兼容性别名

愿意提供的帮助

我愿意:

  1. 提供完整的修复代码
  2. 提交 Pull Request
  3. 编写相关测试用例
  4. 帮助验证修复

附加信息

相关文件

  • ddddocr/__init__.py: 主模块文件
  • ddddocr/core/__init__.py: 核心模块文件
  • ddddocr/compat/legacy.py: DdddOcr 类的实际位置
  • ddddocr/utils.py: 工具函数模块

系统日志

bash
$ python --version
Python 3.12.3

$ pip show ddddocr
Name: ddddocr
Version: 1.6.0
Summary: 带带弟弟ocr通用验证码识别SDK
Home-page: https://github.com/sml2h3/ddddocr
Author: sml2h3
Author-email: [email protected]
License: MIT
Location: /path/to/venv/lib/python3.12/site-packages
Requires: onnxruntime, Pillow, numpy

摘要

问题: ddddocr 1.6.0 版本存在导入错误,导致无法使用 DdddOcr 类。

原因:

  1. core/__init__.py 在 __all__ 中引用了未导入的 DdddOcr
  2. __init__.py 导入了 utils 模块中不存在的符号

解决方案:

  1. 在 core/__init__.py 中正确导入 DdddOcr 类
  2. 从 __init__.py 中移除不存在的导入
  3. 保持向后兼容性

优先级: 高(阻止所有用户使用)


可选添加的信息

如果你愿意,还可以添加以下信息:

我遇到的特定使用场景

在我的项目中,我需要使用 ddddocr 来处理验证码识别。这个错误阻止了我的整个项目运行。

我已尝试的解决方案

  1. 清理缓存并重新安装
  2. 尝试不同版本的 Python
  3. 查看源代码并手动修复(如上所述)
  4. 创建临时修复工具

建议的发布计划

  1. 发布紧急修复版本 1.6.1
  2. 或者发布 1.6.0.post1 作为补丁版本
  3. 更新 PyPI 上的版本说明

fix_ddddocr.py

``

Source: sml2h3/ddddocr

View original on GitHubView discussion on GitHub