EasyOCR配合PyInstaller打包后生成无限进程占用内存问题
修复方案
1. 代码结构调整
Windows下打包包含多进程逻辑的Python程序,必须将主逻辑放入if __name__ == '__main__'代码块,且在入口最开头调用multiprocessing.freeze_support(),修改后的完整代码如下:
import pyscreenshot as ImageGrab import easyocr, io import multiprocessing def image_to_byte_array(image) -> bytearray: image_byte_array = io.BytesIO() # 截图默认没有format属性,手动指定为PNG避免报错 image.save(image_byte_array, format="PNG") image_byte_array = image_byte_array.getvalue() return image_byte_array if __name__ == '__main__': # 必须放在主逻辑最开头 multiprocessing.freeze_support() bbox_size = [498, 448, 771, 497] image = ImageGrab.grab(bbox=bbox_size) # 显式关闭GPU、禁用多进程推理 reader = easyocr.Reader(lang_list=["en"], gpu=False, num_workers=0) text = reader.readtext(image_to_byte_array(image), detail=0) print(text)
本次代码补充两个关键修复点:
- 截图生成的Image对象没有默认format属性,手动指定保存格式为PNG避免字节转换报错
- 初始化EasyOCR Reader时显式设置
num_workers=0禁用多进程推理,gpu=False明确使用CPU运算,规避底层PyTorch的多进程分叉问题
2. 调整PyInstaller打包命令
需要补充EasyOCR和PyTorch的隐藏导入,避免打包时遗漏依赖:
pyinstaller.exe --onedir --icon="blue-white.ico" --name="MyProgram_TEST" --hidden-import=easyocr --hidden-import=torch --hidden-import=torchvision --add-data="你的venv路径/Lib/site-packages/easyocr;easyocr" app.py
注意把命令里的你的venv路径替换为你本地虚拟环境的实际路径。
3. 可选优化
如果还是存在启动慢的问题,可以提前把EasyOCR的英文预训练模型下载到本地,打包时一起放入程序目录,避免运行时自动下载模型的异常。
内容的提问来源于stack exchange,提问作者Spectra
相关产品推荐
相关产品推荐

