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

使用Tabula-py时触发Java致命错误的技术求助

解决ARM64 Mac上Tabula-py触发Java SIGBUS错误的方案

问题根源分析

你遇到的CodeHeap::allocate触发的SIGBUS错误,大概率是JDK版本兼容性、JVM内存配置不足,或是Tabula-py与ARM64架构的适配问题导致的。以下是针对性的解决步骤:


1. 降级JDK到LTS版本

JDK22属于非LTS版本,Tabula-py依赖的Java后端(Tabula-java)对新非LTS版本的兼容性可能存在问题。建议切换到ARM64架构的JDK17或JDK21(LTS版本):

  • 卸载JDK22:删除/Library/Java/JavaVirtualMachines/jdk-22.jdk文件夹
  • 下载ARM64版本的JDK17/21 DMG安装包并完成安装
  • 重新配置JAVA_HOME环境变量,确保指向新安装的JDK路径
  • 验证:终端运行java -version,确认输出显示aarch64架构

2. 调整JVM CodeHeap内存参数

SIGBUS错误出现在CodeHeap分配阶段,可能是默认的CodeCache内存不足。可以通过设置JAVA_OPTS增大CodeCache容量:
修改你的代码,在导入tabula前添加环境变量配置:

import os
# 预留256MB的CodeCache内存,可根据情况调整为512m
os.environ["JAVA_OPTS"] = "-XX:ReservedCodeCacheSize=256m"
import tabula

pdfpath= "Testpdfs/HSA certCut.pdf"
sbc = tabula.read_pdf(pdfpath, stream=True, pages=4, format="CSV")[0]
print(sbc)

3. 验证Tabula-py的Java环境适配性

运行以下代码检查Tabula使用的Java环境,确保是ARM64架构的JDK:

import tabula
tabula.environment_info()

如果输出中显示的Java架构是x86_64,说明系统PATH中存在x86版本的Java,需要调整PATH优先级,让ARM64 JDK的路径排在最前面。

4. 更新Tabula-py到最新版本

旧版本的Tabula-py可能存在ARM64架构的适配bug,执行以下命令更新:

pip install --upgrade tabula-py

5. 排除PDF文件损坏问题

尝试用其他PDF阅读器打开目标文件,确认文件未损坏;或者换一个已知正常的PDF文件运行代码,排查是否是文件本身导致的崩溃。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:23:08