[python]使用pyinstaller打包带界面的Pytorch程序的多个问题

2023-05-16

1 opencv兼容性问题

1.1 现象

打包为一个exe完成后,在执行exe时,报错:
ImportError: ERROR: recursion is detected during loading of “cv2” binary extensions. Check OpenCV installation.
如下图所示:
在这里插入图片描述

1.2 原因及解决方式

pyinstaller和cv2版本存在兼容问题,卸载已有的opencv-python,安装opencv-python=4.5.3.56

本人安装的为python3.7,pyinstaller5.1,opencv版本高了.

可参见这里:https://blog.csdn.net/weixin_50850903/article/details/125231985

2 缺乏yolov5下的两个文件general.pyc和coco128.yaml

2.1 现象

打包为一个exe完成后,在执行exe时,报错:缺少general.pyc和coco128.yaml。如下图所示。
在这里插入图片描述
在这里插入图片描述

2.2 原因及解决方式

yolov5中应该是用到这两个,但是没包含。
(1)general.pyc为二进制文件,为general.py编译后的格式,在VSCode中,运行工程文件,python中运行general.py时,自动生成了这个pyc文件,这个文件位于文件夹下面。
在这里插入图片描述
在这里插入图片描述
但这里生成的是general.cpython-37.pyc,不是general.pyc,这也可能是找不到的原因。
将其进行重命名为general.pyc即可。
然后把他放在了utils下面。
(2)coco128.yaml为文本格式文件。工程中就有,在data\下面。直接用即可。

解决方法,在spec中包含这两个文件即可。
spec定义如下:

a = Analysis(['D:XXX\\detect.py'],
             pathex=[],
             binaries=[(r'D:\XXX\XX\utils\general.pyc', r'.\utils' ) #进行拷贝,注意拷贝的目的文件夹需要与上面缺少的路径一致。
				],
             datas=[(r'D:\XXX\data\coco128.yaml', r'.\data' )],		#进行拷贝,注意拷贝的目的文件夹需要与上面缺少的路径一致。
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

3 缺乏yolov5下的两个文件general.pyc和coco128.yaml

3.1 现象

运行exe时,可以运行,但是有报警:
WARNING: file already exists but should not: C:\Users\workAI\AppData\Local\Temp_MEI132522\torch_C.cp37-win_amd64.pyd。
这个在命令行运行时,提示倒没什么。因为我做了一个界面程序,每次启动时,有弹窗提示,如下图所示,让人很不爽。

在这里插入图片描述

3.2 原因及解决方法

不知道是不是pytorch本身的问题。这是说,在文本文件中多了一个文件,本来不应该有的,但是有了。
解决方法:在spec文件中,加一个搜索,从二进制引用的文件中,去掉这个。如下:

a = Analysis(['D:\XXX\detect.py'],
             pathex=[],
             binaries=[(r'D:XXX\utils\general.pyc', r'.\utils' )
				],
             datas=[(r'D:\XXX\data\coco128.yaml', r'.\data' )],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
for d in a.datas:					#这样遍历一遍,删除本不应该包含的即可。spec文件其实就是可以执行的python代码
	if '_C.cp37-win_amd64.pyd' in d[0]:
		a.datas.remove(d)
		break

补充说明:spec文件其实就是可以执行的python代码!!!

4 带界面的python程序如何去掉命令行界面

4.1 现象

点击打包的exe时,先出现命令行界面,且一直有,然后再有界面。此时有个这很让人感觉不爽。

4.2 解决方法

在spec文件中,配置如下,即可不弹出命令行界面了:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='XXX',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=".",
          console=False,					#此定义为False,则不弹出命令窗口了
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

5 带界面的python程序启动界面

5.1 现象

打包exe程序,这个pytorch的框架中,把其相关的包都打包进去了,有3.9个G大小,启动exe,解压缩到界面弹出来,时间非常长,又没有了命令行提示,用户都不知道情况。
为此,pyinstaller有闪屏功能,就是先加载一个提示窗口,可以显示进度。
ps:这个界面也是用tinker库实现的。
方法,在spec文件中增加splash对象,进行定义即可:

a = Analysis(['D:\CNG_Work\LostDistrictIdentify\\detect.py'],
             pathex=[],
             binaries=[(r'D:\CNG_Work\LostDistrictIdentify\utils\general.pyc', r'.\utils' )
				],
             datas=[(r'D:\CNG_Work\LostDistrictIdentify\data\coco128.yaml', r'.\data' )],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
for d in a.datas:
	if '_C.cp37-win_amd64.pyd' in d[0]:
		a.datas.remove(d)
		break

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

splash = Splash(r'D:XXXX\Assets\CompanyLogo.gif',	#只支持PNG格式。其他格式的话,如果装了PIL则会自动转换
									#如果设置了最大尺寸max_img_size,且装了PIL,则尺寸大时,则自动进行转换缩放
                binaries=a.binaries,	#这里的a就是前面定义的,这里指向了他的二进制文件,
                datas=a.datas 
                text_pos= (1240,405) 			#文本提示,提示上面的加载的二进制文件名称	#None不显示,或者显示的位置(10, 50),
	      		text_default = 'Initializing'			#默认提示
                text_size=12,					#字体大小
                text_color='black'

exe = EXE(pyz,
          a.scripts,
		  splash,                   # <-- both, splash target,引用splash对象
          splash.binaries,          # <-- and splash binaries,显示加载的文件内容
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='XXX',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=".",
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

更多关于splash介绍,可参见pyinstaller官方介绍。https://pyinstaller.org/en/stable/usage.html?highlight=Splash#splash-screen-experimental
里面有多个章节,可以搜索下,都看看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[python]使用pyinstaller打包带界面的Pytorch程序的多个问题 的相关文章

  • 【python】利用unrar解压缩加密的压缩包

    1 概述 压缩解压的方法有多种 xff0c 包括python有自带的库 zipfile库等 但都有些不足 xff0c 自带库不能解压加密的压缩文件等 包括他们的解压时不能解压所有格式的压缩文件等 例如 xff1a zipfile解压带密码时
  • [opencv,python] imread不支持中文路径问题

    opencv库中imread用于读取图片文件 但这个是不支持中文路径的 xff0c 为此 xff0c 需要imdecode方法来读取 span class token keyword import span numpy span class
  • [python]pyinstaller的bootloader不支持中文路径问题

    1 问题描述 在windows10下 xff0c 使用pyinstaller制作了一个exe文件 xff0c 其中使用了 runtime tmpdir 61 xff0c 以便让该exe解压的 MEIxxxxxx 文件与exe文件在同一个目录
  • SpringBoot应用项目插件开发☞Jar包热更新

    一 应用场景 你参与开发的项目已经部署到Tomcat中对外发布了 xff0c 项目中有一个支付功能 xff0c 你默认走的是微信支付 xff0c 假如你有好好地进行系统软件设计的话 xff0c 那这个支付功能必然不是面向某个具体应用而实现的
  • [python]pyinstaller的bootloader重新编译

    1 背景 pyinstaller是python程序exe的打包工具 pyinstaller本身使用python编写 xff0c 但是其bootloader是用c 43 43 编写的 xff0c 二者都是开源的 在发布时 xff0c pyin
  • Sqlite链接的共享

    https www jb51 net article 87976 htm
  • 关于C#串口的异常

    1 SerialPort Close report exception VS 2017 issue https social msdn microsoft com Forums vstudio en US 21996fbb e4e8 4ca
  • [python]Entry point not found, pythoncom37.dll

    安装的python xff0c 不知怎么搞得 xff0c 完成后运行其中的程序 xff0c 比如spyder xff0c pyinstaller时 xff0c 总是弹出窗口 xff0c 提示 xff1a Entry point not fo
  • 测试方法

    转载一个 xff1a https www cnblogs com zhuminghui p 10788968 html
  • 【C#】后台线程IsBackground

    简单点来说 xff1a C 中的线程分前台线程和后台线程 1 前台线程的问题及与后台线程的区别 对于前台线程来说 xff0c 如果这些线程不退出 xff0c 则主线程无法退出 xff0c 则整个进程也无法退出 会造成即使界面窗口关掉了 xf
  • 【C#】程序以单例形式运行

    在一台电脑上只能打开一个实例 方法 xff1a 这里有参考 xff1a 1 https blog csdn net weixin 33896726 article details 89587575 2 WPF的单实例 这里有设置显示和前端显
  • 【WPF】图片等可视化元素缩放变换及中心点设置

    可视化元素 xff08 包括图片 线等 xff0c 继承自UIElement xff09 可以实现2D变换 xff0c 包括平移 旋转 缩放等 xff0c 通过设置其两个属性来实现 xff0c 可以设置的属性包括变换类型及变换的原点坐标设置
  • 【wpf】Line缩放变换后线宽变化

    https docs microsoft com en us answers questions 276944 wpf line stokethickness seems grow as line is scal html
  • 【wpf】如何让超出父控件边界的子控件部分不显示

    问题 在做wpf界面时 xff0c 在一个grid中加入了一条线 之后对线做了一些变换 xff0c 使得线的长度超出了grid的范围 结果显示到grid外面了 xff0c 覆盖到其他的上面了 span class token operato
  • Hadoop权威指南(第3版) 修订版(带目录书签) 中文PDF--高清晰

    一 下载地址 xff08 永久有效 xff09 百度云盘下载 xff08 公开永久 xff09 xff1a Hadoop权威指南 第3版 修订版 带目录书签 中文PDF高清晰 CSDN积分下载 xff1a Hadoop权威指南 第3版 43
  • [python]scikit-image图像处理

    opencv实际上是一个c 43 43 库 xff0c 只是提供了python接口 xff0c scikit image是基于scipy的一款图像处理包 xff0c 它将图片作为numpy数组进行处理 xff0c 正好与matlab一样 x
  • 进程短暂的不被Windows 10 操作系统调用

    进程短暂的不被Windows 10 操作系统调用 https docs microsoft com en us answers idea 343482 my process can39t be scheduled for a while h
  • 持续集成与版本号管理

    1 语义化版本号 是一个标准 xff0c 为了便于比较不同版本号的大小定的 官网 xff1a https semver org 介绍的 https blog csdn net weixin 40514095 article details
  • 使用Gitblit创建Git服务器

    1 Gitblit概述 创建Git服务器有很多方法 xff0c 为了提供服务还需要按照apach等服务器 xff0c 需要的东西较多 这里有一个Gitblit xff0c 已经做好了很多东西 xff0c 非常方便 不需要这些都能用 xff0
  • OpenGL概况

    1 基本情况 opengl xff1a https baike baidu com item OpenGL opengl es xff1a https baike baidu com item OpenGL 20ES 介绍opengl的比较

随机推荐

  • SQlite数据库操作

    数据库 SQLite官网 xff1a http www sqlite org 判断数据库表和列是否存在 参见 xff1a 1 数据库增加一列 参见2
  • 禅道的服务器部署

    禅道介绍 一款比较轻量级的软件项目管理的工具 xff0c 包括了软件需求 计划 bug管理 xff0c 软件版本管理等 基础功能部分已经开源 xff0c 可以免费试用 此外还有企业级之类的不免费 官网 xff1a https www zen
  • 禅道软件的使用

    1引言 禅道的使用在其手册中有比较详细的介绍 xff0c 大家可以参考 xff1a https www zentao net book zentaopmshelp 40 html fullScreen 61 zentao amp theme
  • 【python】数据类型转换

    1 int 与 string转换 1 1 string gt int 10进制string转化为int int 12 16进制string转化为int int 12 16 1 2 int gt string int转化为10进制string
  • 【自动化测试-Katalon】Katalon的安装和对Windows程序的测试

    文章目录 1 概述2 下载与安装3 界面介绍4 测试windows应用程序4 1 安装驱动与设置4 2 设置与启动程序4 3 识别被测试程序的元素对象4 3 1 打开识别程序窗口4 3 2 Spy windows objects窗口设置 4
  • Java 23种设计模式Demo案例大全 ☞ 【已完结】

    注 xff1a 2022年10月22日 xff0c 已更完全部案例 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • 算术左移,逻辑左移,算术右移,逻辑右移之间的区别

    1 算术左移 xff0c 逻辑左移 xff1a 都是在右边补0 xff1a 比如 00101011 算术左移一位 01010110 逻辑左移一位 01010110 对于二进制的数值来说左移n位等于原来的数值乘以2的n次方 比如0001101
  • ftp服务器的搭建

    Windows中自带了ftp的服务 xff0c 只需要配置即可搭建 xff0c 同时支持用户创建及访问控制 此外 xff0c 还有专门的工具可以简便操作 xff0c 也更丰富的手段 目前用的比较多的两款工具是FileZilla和Serv U
  • Git客户端的安装

    1 概述 Git有自带的命名行客户端 xff0c 也有自己的图形化客户端 xff0c 这个就是git exe 此外还有TortoiseGit 在这之上又封装了一层 xff0c 使我们用起来更加的方便 xff0c 这个跟TortoiseSVN
  • Git的使用

    正在学习中 xff0c 搜集了好几个比较好的 暂时记录下 xff0c 后续整理 1 Git使用 官方文档 xff1a https git scm com doc 其中包含了帮助 书籍和视频教程 网上传的比较多的就是廖雪峰的介绍 xff0c
  • 【禅道】如何登陆后直接跳到用户登入界面

    1 问题描述 本人用的开源的禅道xampp xff0c 在windows下部署了服务器 xff0c 部署方法参见我的另一个介绍 xff1a https blog csdn net kevinshift article details 120
  • Windows11右键菜单改回经典模式

    window11的右键菜单设计感觉有点反人类 xff0c 网友也想了破解之道 xff1a 改注册表或者使用网友的小工具 其中小工具这里下载 https www sordum org 14479 windows 11 classic cont
  • [python]启动两个spyder工程

    spyder中一次只能开一个工程 xff0c 为了能够开两个 xff0c 进行同时的编辑和运行 xff0c 则默认是不行的 xff0c 是无法同时打开两个spyder的进程的 方法是启动spyder时加上运行参数 xff1a new ins
  • Git按照目录分权限问题

    1 xff09 Git不能像SVN那样 xff0c 在一个库中 xff0c 按照目录为单位进行权限的设置 也不允许对整个库设置为读权限 xff0c 只对某个目录设置为写权限 哎 xff0c 有些失望 xff01 但人家说这是与Git分布式控
  • python

    问题1 xff1a TypeError module takes at most 2 arguments 3 given https www cnblogs com kevin hou1991 p 14806598 html
  • PID控制

    目录 1 基本情况1 1 位置式PID1 2 增量式PID1 3 PID控制适用系统 2 PID三个量的含义解析2 1 P xff1a 比例2 2 I xff1a 积分2 3 D xff1a 微分2 4 PID xff1a 三者的关系 3
  • VSCode Python运行环境配置

    背景 创建了一个python的虚拟运行环境 xff0c 比如说tensoflow xff0c 想在VS Code下运行调试 步骤 参考说明 xff1a https blog 51cto com u 15127658 2783413 xff0
  • Tomcat中文乱码解决方案【亲测有效】

    场景一 xff1a SpringBoot项目 xff0c 在IDEA中启动 xff0c 访问接口 xff0c 无乱码 场景二 xff1a SpringBoot项目 xff0c 打成war包 xff0c 发到本地tomcat下 xff0c 启
  • 【Python】How to center an image in canvas Python Tkinter

    https www tutorialspoint com how to center an image in canvas python tkinter https www tutorialspoint com how to insert
  • [python]使用pyinstaller打包带界面的Pytorch程序的多个问题

    1 opencv兼容性问题 1 1 现象 打包为一个exe完成后 xff0c 在执行exe时 xff0c 报错 xff1a ImportError ERROR recursion is detected during loading of