You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python ocrmypdf脚本打包为单exe后报languages属性错误求助

问题根因

报错核心原因是打包exe时未将ocrmypdf依赖的tesseract语言包、内置校验插件、Ghostscript运行资源打包进单文件。ocrmypdf启动时会自动探测运行环境的语言配置,PyCharm中运行时可以直接读取系统Python环境的全局依赖,探测正常;打包为单文件exe后运行在临时隔离环境,探测不到对应配置返回None,访问languages属性时直接抛出异常。

修复步骤

1. 前置依赖校验

先确认本地环境所有依赖安装完整,避免后续打包缺文件:

  • 安装Tesseract OCR引擎,安装时勾选需要识别的语言包(英文默认必选,识别中文需额外勾选简体中文语言包),记录安装目录
  • 安装Ghostscript,ocrmypdf和camelot处理PDF流都依赖该组件
  • 安装Python侧依赖包,执行命令:pip install ocrmypdf camelot-py[cv] openpyxl pyinstaller

2. 调整业务代码

补全路径适配逻辑、显式指定OCR参数避免自动探测失败,同时增加文件选择判空,修改后完整代码如下:

import os
import sys
import ocrmypdf
import camelot
from tkinter import Tk
from tkinter.filedialog import askopenfilename

# PyInstaller单文件打包路径适配
def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

if __name__ == '__main__':
    Tk().withdraw()
    filename = askopenfilename(filetypes=[("PDF文件", "*.pdf")])
    if not filename:
        sys.exit(0)
    print(f"选中处理文件:{filename}")

    # 把Tesseract、Ghostscript路径加入环境变量,避免运行时找不到命令
    tesseract_path = resource_path('tesseract')
    gs_path = resource_path('ghostscript')
    os.environ['PATH'] = f"{tesseract_path};{gs_path};{os.environ['PATH']}"

    # 显式传入OCR参数,禁止自动探测
    ocrmypdf.ocr(
        input_file=filename,
        output_file='output.pdf',
        deskew=True,
        language='eng+chi_sim',  # 按需调整语言,英文填eng,简体中文填chi_sim
        use_threads=True,
        progress_bar=False
    )

    # OCR完成后提取表格
    tables = camelot.read_pdf('output.pdf', pages="1-end", flavor='stream')
    print(f"识别到表格总数:{tables.n}")
    tables.export(f"{filename}_表格导出结果.xlsx", f='excel')

3. 执行打包命令

禁止直接使用默认pyinstaller -F xxx.py命令打包,需手动指定要收集的依赖和附加的二进制文件,Windows环境打包命令参考:

pyinstaller -F -w OCR_Menu.py ^
--add-data "C:\Program Files\Tesseract-OCR;tesseract" ^
--add-data "C:\Program Files\gs\gs10.03.0\bin;ghostscript" ^
--collect-all ocrmypdf ^
--collect-all camelot ^
--collect-all pdfminer ^
--hidden-import PIL._tkinter_finder

注意:替换命令里的Tesseract、Ghostscript路径为你本地的实际安装目录;如果是macOS/Linux环境打包,把路径分隔符;换成:,命令换行符^换成\即可。

常见问题排查
  • 打包后exe体积过大是正常现象,因为内置了Tesseract和Ghostscript组件,仅识别英文的话可以删除Tesseract目录下tessdata文件夹里不需要的语言包(保留eng.traineddata即可),能减少30%左右体积
  • 如果启动后提示权限错误,把exe放到非系统盘的用户目录下运行即可,不要放在Program Files等需要管理员权限的目录
  • 表格识别错位可以调整camelot的flavor参数为lattice(适合有明确边框线的表格),或者调整edge_tol、row_tol等精度参数

内容的提问来源于stack exchange,提问作者battledj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:57:26