Linux Mint使用tabula-py报Java not found问题咨询
报错根因
触发的完整报错追踪如下:
Traceback (most recent call last): File "/home/dawit/IaaAgDataNER/venv/lib/python3.9/site-packages/tabula/io.py", line 80, in _run result = subprocess.run( File "/usr/lib/python3.9/subprocess.py", line 505, in run with Popen(*popenargs, **kwargs) as process: File "/usr/lib/python3.9/subprocess.py", line 951, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/usr/lib/python3.9/subprocess.py", line 1821, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory: 'java'
该报错与Java环境类型、版本无直接关联,本质是当前运行Python的进程无法在环境变量PATH包含的目录下找到java可执行文件,你已安装的OpenJDK本身完全满足tabula-py的运行要求。
1. tabula-py 所需Java环境说明
tabula-py是对tabula-java命令行工具的Python封装,对Java环境无特殊定制要求:
- 版本要求:Java 8及以上版本即可
- 发行版要求:OpenJDK、Oracle JDK、Eclipse Temurin、Amazon Corretto等所有标准合规的JRE/JDK发行版全兼容,无特定厂商绑定要求
- 组件要求:无需安装完整JDK,仅安装JRE(Java运行时环境)即可支撑tabula-py全功能运行
2. 无root权限场景下的Java路径配置方案
以下方案均不需要root权限,按使用场景选择即可:
方案1:代码内指定Java路径(最稳妥)
直接在代码中指定java可执行文件的绝对路径,配置优先级最高,不受全局环境变量、IDE配置干扰,适合脚本固定运行、PyCharm本地调试等场景:
import tabula # 替换为自身环境中java可执行文件的绝对路径 tabula.io.JAVA_PATH = "/home/dawit/你的OpenJDK安装目录/bin/java" # 后续正常调用tabula接口即可 df = tabula.read_pdf("target.pdf", pages="all")
如果不确定java的绝对路径,在能正常执行java -version的终端中运行readlink -f $(which java),输出结果即为可直接填入的真实路径,可避免软链接导致的路径识别问题。
方案2:用户级永久环境变量配置
配置后当前用户启动的所有程序(包括终端进程、PyCharm等GUI程序)都能自动识别Java路径:
- 先执行
echo $SHELL确认当前使用的shell,bash对应编辑~/.bashrc文件,zsh对应编辑~/.zshrc文件 - 在文件末尾追加两行配置,路径替换为自身OpenJDK的安装目录:
export JAVA_HOME="/home/dawit/你的OpenJDK安装目录" export PATH="$JAVA_HOME/bin:$PATH"
- 执行
source ~/.bashrc(zsh对应执行source ~/.zshrc)让配置立即生效,重启PyCharm后即可正常运行tabula相关代码。
方案3:PyCharm内单独配置运行环境
如果不想修改全局用户配置,仅需要让PyCharm内运行的Python脚本能识别Java,可直接在IDE内配置:
- 点击PyCharm右上角运行配置下拉框,选择「Edit Configurations」
- 选中运行tabula脚本对应的Python配置项,找到「Environment variables」栏点击编辑
- 新增一条环境变量:
- 变量名:
PATH - 变量值:
/home/dawit/你的OpenJDK安装目录/bin:$PATH
- 保存配置后重新运行脚本即可。
注意:无需尝试往
/usr/bin等系统目录创建软链接,这类操作需要root权限,上述三种方案完全可以覆盖所有使用场景。
内容的提问来源于stack exchange,提问作者David Esubalew
相关产品推荐
相关产品推荐

