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

Imageio在Heroku部署时只读文件系统错误求助(pytesseract场景)

解决Heroku上imageio创建临时BMP文件的只读文件系统错误

你遇到的问题核心是Heroku的文件系统限制:Heroku仅允许/tmp目录作为可写的临时存储区域,而imageio默认的临时文件路径没指向这个目录,甚至出现了路径拼接错误(比如日志里的/tmptess_105rvap2.bmp少了/tmp/后的斜杠,导致尝试写入只读的根目录)。下面是几个可行的解决方案:

方案1:手动指定临时文件到/tmp目录

在代码里显式创建放在/tmp的临时文件,避免imageio使用错误路径:

import tempfile
import imageio
import pytesseract
import os

# 创建一个位于/tmp目录下的临时BMP文件
with tempfile.NamedTemporaryFile(suffix='.bmp', dir='/tmp/', delete=False) as tmp_file:
    temp_bmp_path = tmp_file.name

# 读取源图片并写入指定的临时文件
source_image = imageio.imread(your_scanned_image_source)  # 替换为你的源图片读取逻辑
imageio.imwrite(temp_bmp_path, source_image)

# 用pytesseract处理临时BMP文件
ocr_text = pytesseract.image_to_string(temp_bmp_path)

# 可选:用完后手动删除临时文件(Heroku会定期自动清理/tmp,也可以省略此步骤)
os.unlink(temp_bmp_path)

方案2:设置imageio全局临时目录

通过环境变量让imageio默认将临时文件放在/tmp,无需修改每一处临时文件创建逻辑:

方式A:通过Heroku后台设置环境变量

在Heroku应用的「设置」页面添加环境变量:
IMAGEIO_TEMP_DIR=/tmp/

方式B:在代码开头设置

import os
os.environ['IMAGEIO_TEMP_DIR'] = '/tmp/'

# 之后正常使用imageio和pytesseract即可
import imageio
import pytesseract

额外优化:确保pytesseract也使用/tmp

pytesseract自身也会生成临时文件,建议一并指定它的临时目录:

# 配置pytesseract使用/tmp作为临时存储目录
custom_tess_config = r'--tmpdir "/tmp"'
ocr_text = pytesseract.image_to_string(your_image, config=custom_tess_config)

方案原理说明

Heroku的文件系统除/tmp外均为只读,所有需要写入的临时文件必须放在这个目录。你的错误日志显示imageio尝试写入/tmptess_105rvap2.bmp——这是典型的路径拼接错误(缺少/tmp与文件名之间的斜杠),导致它试图写入只读的根目录,指定正确的/tmp路径即可解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:32:50