一、问题背景
软件开发阶段:
python main.py
运行正常。
但是使用打包工具生成exe后:
main.exe
启动时报错。
二、错误现象
运行exe:
main.exe
出现异常:
File "paddlex\\inference\\pipelines\\__init__.py", line 96, in load_pipeline_config
Exception:
The pipeline (OCR) does not exist!
Please use a pipeline name or a config file path!
完整调用链:
main.exe
|
|
AlgorithmEngine
|
|
OCR_detect.py
|
|
PaddleOCR()
|
|
paddleocr._pipelines.ocr
|
|
paddlex.inference.pipelines
|
|
load_pipeline_config()
|
|
OCR pipeline不存在
三、问题表现特点
这个问题有一个明显特点:
源码运行正常
开发环境:
python main.py
可以正常:
ocr = PaddleOCR(
lang="ch"
)
OCR模型可以正常加载。
打包后失败
生成:
dist/
|
└── main.exe
运行:
main.exe
报:
The pipeline (OCR) does not exist!
说明:
Python环境中的PaddleOCR资源存在,但是exe打包后的运行环境缺少相关文件。
四、原因分析
1. PaddleOCR 3.x架构变化
PaddleOCR 3.x 不再只是:
python代码
+
模型文件
而是引入:
PaddleOCR
|
|
PaddleX Pipeline
|
|
pipeline配置
|
|
OCR模型配置
目录结构类似:
site-packages
|
|
paddleocr
|
|
paddlex
|
|
inference
|
|
pipelines
|
|
OCR配置文件
2. 打包工具无法自动识别动态资源
PyInstaller / Nuitka 在分析:
from paddleocr import PaddleOCR
时,只能发现:
.py文件
.pyd文件
.dll文件
但是不能自动发现:
.yaml
.json
.yml
模型配置
pipeline配置
这些动态加载资源。
运行时:
PaddleOCR()
内部执行:
load_pipeline_config()
|
|
寻找 OCR pipeline
|
|
文件不存在
|
|
报错
五、为什么开发环境没有问题?
因为开发环境直接使用:
Python环境
|
|
site-packages
|
|
paddlex
|
|
pipeline配置存在
而exe环境:
main.exe
|
|
打包目录
|
|
缺少paddlex资源文件
所以:
源码:
正常
exe:
失败
六、解决过程
方法一:确认资源是否被打包
查看:
dist目录
搜索:
paddlex
正常应该存在:
paddlex
|
├── inference
|
├── pipelines
|
└── configs
如果没有:
说明打包时遗漏。
七、解决方案
方案1:增加hidden-import
如果使用PyInstaller:
增加:
–hidden-import=paddleocr
–hidden-import=paddlex
例如:
pyinstaller main.py ^
–hidden-import=paddleocr ^
–hidden-import=paddlex
但是:
只解决Python模块问题。
方案2:添加数据文件(重点)
PaddleOCR依赖大量非Python文件。
需要添加:
paddleocr资源目录
paddlex资源目录
例如PyInstaller:
datas=[
(
"xxx/site-packages/paddlex",
"paddlex"
),
(
"xxx/site-packages/paddleocr",
"paddleocr"
)
]
加入:
.spec文件
八、Nuitka解决方案
如果使用Nuitka:
需要添加:
–include-package=paddleocr
–include-package=paddlex
同时加入数据文件:
–include-data-dir=
例如:
python -m nuitka main.py ^
–include-package=paddleocr ^
–include-package=paddlex ^
–include-data-dir=C:\\Users\\admin\\miniconda3\\envs\\pyside6\\Lib\\site-packages\\paddlex=paddlex
九、另一种推荐方案:固定PaddleOCR版本
如果项目用于工业部署:
建议不要直接使用:
PaddleOCR 3.x
因为:
- 引入PaddleX
- 依赖复杂
- 打包困难
工业项目推荐:
paddleocr 2.7.3
paddlepaddle 2.6.1
调用方式:
ocr = PaddleOCR(
use_angle_cls=True,
lang="ch"
)
优点:
- 依赖简单
- 打包稳定
- 部署方便
十、最终部署方案
项目最终环境:
Python 3.10
YOLO:
PyTorch GPU
OCR:
PaddleOCR 2.7.3
PaddlePaddle CPU
PySide6:
GUI
OpenCV:
图像处理
软件结构:
工业视觉软件
|
AlgorithmEngine
|
┌──────┴───────┐
YOLO OCR
GPU CPU
十一、总结
错误:
The pipeline (OCR) does not exist!
原因:
不是:
- OCR模型错误
- PaddleOCR安装错误
- 代码错误
真正原因:
打包工具没有将PaddleOCR/PaddleX依赖的pipeline配置文件、资源文件一起打包。
解决:
开发环境正常:
python main.py
打包失败:
main.exe
本质区别:
开发环境 = 完整Python环境
exe环境 = 打包后的精简运行环境
对于工业视觉软件:
打包不仅需要代码,还需要所有动态加载资源。





