Paddle使用pyinstaller打包出错的解决方法

使用PyQt5开发了一个基于paddle ocr的文字识别程序,打包的时候报错了。给大家分享一下解决方法

  • 为了测试paddle模块的打包问题,所以当前demo.py只引用了paddleOCR模块
  • demo.py
python 复制代码
from paddleocr import PaddleOCR
def ocr_text(path):
    try:
        ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)
        text = ocr.ocr(path, cls=True)
        result = []
        for t in text[0]:
            txt = t[1][0]
            result.append(txt)
        return result
    except:
        pass


if __name__ == '__main__':
    ocr_text("./screen.png")

步骤一:显式导入依赖项

  • 显式导入依赖项:在你的demo.py文件中,尝试显式导入项目的依赖项,例如paddle和framework_pb2,有助于帮助pyinstaller正确识别这些依赖项。在demo.py文件的顶部添加以导入语句:
python 复制代码
import paddle
from paddle.fluid.proto import framework_pb2

步骤二:pyinstaller的.spec文件中加入--add-data选项

  • 将paddle所需的文件包含进去。通常包括ocr的模型文件和其他依赖项。
  • --add-data选项将本地paddle路径path/to/paddle目录文件添加到生成的可执行文件中,使用;分割,./paddle代表的是生成文件的同级目录下的paddle文件中。
shell 复制代码
pyinstaller --add-data "path/to/paddle;./paddle" --add-data "path/to/paddleocr;./paddleocr" 

完成程序和打包脚本

demo.py

python 复制代码
from paddleocr import PaddleOCR
import paddle  # 新增
from paddle.fluid.proto import framework_pb2  # 新增


def ocr_text(path):
    try:
        ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)
        text = ocr.ocr(path, cls=True)
        result = []
        for t in text[0]:
            txt = t[1][0]
            result.append(txt)
        return result
    except:
        pass


if __name__ == '__main__':
    ocr_text("./screen.png")
  • 打包处理
    • --add-data添加选项包到程序目录中,-F将生成一个单一的可执行文件,这里导入了项目中用到的paddle和paddleocr两个包。
shell 复制代码
pyinstaller -F demo.py --add-data "path/to/paddle;./paddle" --add-data "path/to/paddleocr;./paddleocr"
  • 最后打包成功
相关推荐
Irene19913 分钟前
Python 中的 round() 函数不是严格的“四舍五入“,而是采用银行家舍入法(Bankers‘ Rounding)
python
ZC跨境爬虫4 分钟前
3D 地球卫星轨道可视化平台开发 Day9(AI阈值调控+小众卫星识别+低Token测试模式实战)
人工智能·python·3d·信息可视化·json
2301_813599556 分钟前
CSS中relative与absolute的区别_详解相对与绝对定位应用场景
jvm·数据库·python
qq_3721542315 分钟前
c++怎么在写入文件流时通过peek预读功能实现复杂的逻辑判断【实战】
jvm·数据库·python
m0_5145205724 分钟前
CSS如何给按钮添加按下缩小的动画_利用-active配合transform
jvm·数据库·python
yejqvow1225 分钟前
CSS如何制作加载时的点点点跳动效果_使用animation循环延迟
jvm·数据库·python
2401_8359568125 分钟前
CSS如何解决CSS引入后的样式覆盖_理解优先级原则避免重写
jvm·数据库·python
小猪皮蛋粥29 分钟前
python画图
开发语言·python
m0_5887584830 分钟前
CSS如何创建三角箭头图标_通过border透明技巧实现
jvm·数据库·python
小白学大数据35 分钟前
解决 Python 爬虫被限制:延迟抓取指令深度解析
开发语言·c++·爬虫·python