pyinstaller 打包基于PyQt5和PaddleOCR的项目为.exe

简介: 

最近做了一个小项目,是基于PyQt5和PaddleOCR的。需要将其打包为.exe,然后打包过程中遇到了很多问题,也看了很多教程,方法千奇百怪的,最后也是一步一步给试出来了。记录一下,防止以后忘记了。

项目版本:

python: 3.8

PyQt5 :5.15.10

paddleocr :2.8.0
paddlepaddle :2.6.1
opencv-python :4.10.0.84

项目组成:

c6e30da78d6e49debe6b7248fdd64399.png

其中:

1、ppocr、ppstructure、tools为ocr的依赖文件夹

2、ui 为主要是系统ui的文件,组成如下图:

6e8ec8c60d0c4af9a9d20a16235569f7.png

3、mainPage.py是项目的启动文件

4、paddleocr.py是ocr的依赖文件

5、mainPage.spec是生成出来用于打包的文件

具体步骤:

1、安装pyinstaller

进入虚拟环境然后安装打包库

pip install pyinstaller

2、生成spec文件

spec的名字和项目启动文件的名字一样即可

pyinstaller your_spec.spec

3、编辑spec文件

spec文件长这样:

# -*- mode: python ; coding: utf-8 -*-a = Analysis(['mainPage.py'],pathex=[],binaries=[],datas=[],hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,optimize=0,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,[],exclude_binaries=True,name='mainPage',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)
coll = COLLECT(exe,a.binaries,a.datas,strip=False,upx=True,upx_exclude=[],name='mainPage',
)

1、将项目虚拟环境的第三方库路径填写到pathex里

我的路径是这个:D:\Anaconda\envs\myenv\Lib\site-packages

b43dfa981f8e4829ac0283f6d397acba.png

2、将paddle的依赖包路径写入pathex里

我的路径是这样的:D:\Anaconda\envs\myenv\Lib\site-packages\paddle\libs

5e8c85f7d0074d5dbe9569af8f27c8fd.png

3、将paddle的依赖包路径写入binaries中

写好的spec是这样的:

# -*- mode: python ; coding: utf-8 -*-
a = Analysis(['mainPage.py'],pathex=['ui\\main_page.py','D:\Anaconda\envs\myenv\Lib\site-packages','D:\Anaconda\envs\myenv\Lib\site-packages\paddle\libs'],binaries=[('D:\Anaconda\envs\myenv\Lib\site-packages\paddle\libs','.')],datas=[],hiddenimports=[],hookspath=[],hooksconfig={},runtime_hooks=[],excludes=[],noarchive=False,optimize=0,
)
pyz = PYZ(a.pure)exe = EXE(pyz,a.scripts,[],exclude_binaries=True,name='mainPage',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,console=True,disable_windowed_traceback=False,argv_emulation=False,target_arch=None,codesign_identity=None,entitlements_file=None,
)
coll = COLLECT(exe,a.binaries,a.datas,strip=False,upx=True,upx_exclude=[],name='mainPage',
)

然后我们就可以进行打包了

4、打包项目

输入命令进行打包:

pyinstaller mainPage.spec

不出意外打包就欧克了。

当然我打包的时候遇到了一个问题:

A RecursionError (maximum recursion depth exceeded) occurred. For working around please follow these instructions1. In your program's .spec file add this line near the top::       import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)  2. Build your program by running PyInstaller with the .spec file as    argument::       pyinstaller myprog.spec  3. If this fails, you most probably hit an endless recursion in    PyInstaller. Please try to track this down has far as possible,    create a minimal example so we can reproduce and open an issue at    https://github.com/pyinstaller/pyinstaller/issues following the    instructions in the issue template. Many thanks.  Explanation: Python's stack-limit is a safety-belt against endless recursion, eating up memory. PyInstaller imports modules recursively. If the structure how modules are imported within your program is awkward, this leads to the nesting being too deep and hitting Python's stack-limit.  With the default recursion limit (1000), the recursion error occurs at about 115 nested imported, with limit 2000 at about 240, with limit 5000 at about 660.

具体的解决办法就是:

在spec文件的最上面加上: 

import sys
sys.setrecursionlimit(100000)

 打包完成是这样的:

b2c9f53614ba4185894c601bdd649382.png

你会发现项目目录中多了两个文件夹

4af26f4858564c32b81793b234d02ebc.png

5、启动项目 

大概率,直接启动exe是会报错的。所以为了看清报错的具体内容,我们cd到exe所在的目录小启动它。(exe在dist目录里面)

4e61febb1ad846ffbdfb343aec5aed6e.png

cd到exe目录下以后,输入mainPage.exe 启动项目。

发现抱错:

537e9b094b5e4590be1238faa2b233d6.png 

百度一下,发现解决办法:

a6b14ef3e347494a9fc483f643ec6200.png

就是这个文件夹

d2349398bce042fab5234a9253de3fab.png

d027d12183e8426da6d35cbdb7e4fb76.png

在运行,又报错:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\86195\\Desktop\\20\\dist\\mainPage\\_internal\\tools/__init__.py' 

3beed5c71b844587843b729a10710226.png 想起我们项目目录中又一个tools目录未导入,那么我们同样将其复制到dist目录下

6aab377ad9f34007bf131ed96e22795e.png

38aeaeb0de7f417892ec85683d9f5daa.png 

运行exe,ok运行成功!!!

0c397ddde6eb417a8026e9c841996d87.png 

 总结

如果打包没问题,运行exe报错,大概率就是有项目需要的库没有打包进来。所以我们百度百度,是什么包没有导入,我们手动复制进去就好了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为路由器SSH登录实验

概念 SSH全称安全外壳(Secure Shell)协议,这个协议的目的就是为了取代缺乏机密性保障的远程管理协议,SSH基于TCP协议的加密通道,让客户端使用服务器的RSA公钥来验证SSHv2服务器的身份。 创建密钥对 在充当SSH服务器的…

C语言随机数的生成相关案例

随机数的方式&#xff1a; 1、设置种子&#xff1a;srand(初始值) 2、获取随机数&#xff1a;rand(); 引导案例&#xff1a; 通过for循环简单生成10个随机数 #include<stdio.h> #include<stdlib.h> //添加包含随机数的库函数 int main() {srand(1); …

嵌入式人工智能(15-基于树莓派4B的电机控制-直流电机TB6612)

电机是传动以及控制系统的重要组成部分&#xff0c;现在的电机已从过去简单的传动向复杂的控制转移&#xff0c;尤其是对电机的速度、位置、转矩的精确控制&#xff0c;本系列将介绍如何使用树莓派驱动并控制3种最为常见的控制电机&#xff1a;直流电机&#xff08;风扇&#x…

大语言模型推理优化--键值缓存--Key-value Cache

文章目录 一、生成式预训练语言模型 GPT 模型结构二、FastServe 框架三、Key-value Cache1.大模型推理的冗余计算2.Self Attention3.KV Cache 一、生成式预训练语言模型 GPT 模型结构 目前&#xff0c;深度神经网络推理服务系统已经有一些工作针对生成式预训练语言模型 GPT 的独…

安全防御---防火墙综合实验3

安全防御—防火墙综合实验3 一、实验拓扑图 二、实验要求 12&#xff0c;对现有网络进行改造升级&#xff0c;将当个防火墙组网改成双机热备的组网形式&#xff0c;做负载分担模式&#xff0c;游客区和DMZ区走FW3&#xff0c;生产区和办公区的流量走FW1 13&#xff0c;办公区…

Ubuntu22.04安装OMNeT++

一、官网地址及安装指南 官网地址&#xff1a;OMNeT Discrete Event Simulator 官网安装指南&#xff08;V6.0.3&#xff09;&#xff1a;https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址&#xff1a;OMNeT Downloads 旧版本下载地址&#xff1a;OMNeT Old…

【动态规划】整数拆分

整数拆分&#xff08;难度&#xff1a;中等&#xff09; 该题对应力扣网址 AC代码 class Solution { public:int integerBreak(int n) {//动态规划//感觉这个题和零钱兑换有点像&#xff0c;只是零钱兑换提供了coin列表vector <int> dp(n1,0);//1、定义子问题//将原问题…

PolarisMesh源码系列--Polaris-Go注册发现流程

导语 北极星是腾讯开源的一款服务治理平台&#xff0c;用来解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题。在分布式和微服务架构的治理领域&#xff0c;目前国内比较流行的还包括 Spring Cloud&#xff0c;Apache Dubbo 等。在 Kubernete…

错误:PHP:Deprecated: Required parameter $xxx follows optional parameter $yyy

前言 略 错误 Deprecated: Required parameter $xxx follows optional parameter $yyy 解决办法 设置 error_reporting E_ALL & ~E_DEPRECATED & ~E_STRICT 参考 https://blog.csdn.net/lxw1844912514/article/details/100028023

创建自己的 app: html网页直接打包成app;在线网页打包app工具fusionapp、pake

1、html网页直接打包成app 主要通过hbuilderx框架工具来进行打包 https://www.dcloud.io/hbuilderx.html 参考&#xff1a; https://www.bilibili.com/video/BV1XG411r7QZ/ https://www.bilibili.com/video/BV1ZJ411W7Na 1&#xff09;网页制作 这里做的工具是TodoList 页面&a…

【数据结构--查找】

目录 一、查找&#xff08;Searching&#xff09;的概念1.1、基本概念1.2、算法的评价指标 二、顺序查找2.1、算法思想2.2、算法实现2.2.1、常规顺序查找2.2.2、带哨兵的顺序查找 2.3、效率分析2.4、优化2.4.1、针对有序表2.4.2、被查效率不相等 三、折半查找3.1、算法思想3.2、…

C语言项目篇:二、课程管理系统

为加强对于C语言的巩固和复习&#xff0c;以实战项目为导向&#xff0c;串起所有C语言的语法&#xff0c;达到活学活用的目的&#xff0c;本篇博客&#xff0c;详细总结利用C语言编码简单编码实现生活中的课程管理系统后台开发的整个过程&#xff0c;学习多文件编程和调试&…

Internet 控制报文协议 —— ICMPv4 和 ICMPv6 详解

ICMP 是一种面向无连接的协议&#xff0c;负责传递可能需要注意的差错和控制报文&#xff0c;差错指示通信网络是否存在错误 (如目的主机无法到达、IP 路由器无法正常传输数据包等。注意&#xff0c;路由器缓冲区溢出导致的丢包不包括在 ICMP 响应范围内&#xff0c;在 TCP 负责…

Docker、containerd、CRI-O 和 runc 之间的区别

容器与 Docker 这个名称并不紧密相关。你可以使用其他工具来运行容器 您可以使用 Docker 或一堆非Docker 的其他工具来运行容器。docker只是众多选项之一&#xff0c;Docker&#xff08;公司&#xff09;在生态系统中创建了一些很棒的工具&#xff0c;但不是全部。 容器方面有…

利用【MATLAB】和【Python】进行【图与网络模型】的高级应用与分析】

目录 一、图与网络的基本概念 1. 无向图与有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与连通性 5. 图的矩阵表示 MATLAB代码实例 Python代码实例 二、最短路径问题 1. 最短路径问题的定义 2. Dijkstra算法 MATLAB代码实例 Python代码实例 三、最小生…

无法启动此程序,因为计算机丢失api-ms-win-core-path-l1-1-0.dll的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Microsoft Visual C++ 2010 Express 使用

Microsoft Visual C 2010 Express 使用 Microsoft Visual C 2010 Express&#xff08;简称VC 2010 Express&#xff09;是一款免费的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为C和C语言的开发者设计。 安装 下载|本站链接【VC2010简体中文版】的安装包并解压…

C#学习-刘铁猛

文章目录 1.委托委托的具体使用-魔板方法回调方法【好莱坞方法】&#xff1a;通过委托类型的参数&#xff0c;传入主调方法的被调用方法&#xff0c;主调方法可以根据自己的逻辑决定调用这个方法还是不调用这个方法。【演员只用接听电话&#xff0c;如果通过&#xff0c;导演会…

mysql oracle postgreSQL区别

MySQL、Oracle Database和PostgreSQL是三种流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们各有特点&#xff0c;适用于不同的应用场景。以下是它们之间的一些主要区别&#xff1a; 1.许可证和成本&#xff1a; 1.MySQL是一个开源数据库&#xff0c;…

一个集Swagger2 和 OpenAPI3为一体的增强接口文档工具,一把为您的API文档需求量身定制的“利刃”(附源码)

前言 在微服务和分布式系统架构日益普及的今天&#xff0c;API文档的管理与维护成为了开发过程中的一个关键环节。开发者们常常面临着API文档更新不及时、格式不统一、难以维护和阅读的问题。此外&#xff0c;随着API数量的增加&#xff0c;管理和维护这些文档变得越来越复杂。…