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

Java Maven项目调用含pytesseract的Python脚本提示Tesseract不存在怎么解决

问题排查与解决方案

问题根因

报错核心为pytesseract无法找到底层tesseract可执行文件,触发原因是Java启动的Python子进程PATH环境变量与终端运行环境不一致:终端运行时PATH已配置tesseract安装目录,Maven启动的Java进程继承的系统PATH未包含该路径,因此调用时触发文件不存在错误。

修复方案

  • 方案1:Python脚本直接指定tesseract路径(最稳定,不受运行环境影响)
    首先在终端执行命令which tesseract获取tesseract可执行文件的绝对路径,示例输出为/usr/local/bin/tesseract。
    然后在Python脚本中导入pytesseract后添加一行配置:

    import pytesseract
    # 替换为你实际查询到的tesseract绝对路径
    pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'
    
  • 方案2:Java代码中手动补充子进程的PATH变量
    先通过which tesseract拿到tesseract所在的父目录(比如路径/usr/local/bin/tesseract对应的父目录为/usr/local/bin),在调用pb.start()前添加环境变量配置:

    String path = "/Users/team/Desktop/my.py";
    ProcessBuilder pb = new ProcessBuilder("python3","/Users/team/Desktop/my.py");
    // 新增环境变量配置
    Map<String, String> env = pb.environment();
    String originalPath = env.get("PATH");
    // 把tesseract的父目录加到PATH最前面,替换为你实际查询到的目录
    env.put("PATH", "/usr/local/bin:" + originalPath);
    
    Process p = pb.start();
    p.waitFor();
    
    BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = "";
    
    while ((line = bfr.readLine()) != null) {
        System.out.println(line);
    }
    

    注:原代码中的inheritIO()方法会把子进程的输出直接重定向到父进程控制台,和后续手动读取输入流的逻辑冲突,二选一即可,不影响当前报错的修复。

  • 方案3:本地开发临时适配
    如果是在IDE中运行Maven项目,可以直接在IDE的运行配置界面找到环境变量设置项,把tesseract的安装目录追加到PATH变量中即可。该方案仅适用于本地调试,打包部署时建议选择前两种方案。

验证方法

可在Python脚本开头添加以下代码,分别在终端和Java调用时运行,对比两次输出的PATH差异,即可确认缺失的路径:

import os
print("当前PATH:", os.environ.get("PATH"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:11