手把手教你pyqt程序打包成exe


如果是打包萌新,建议您先看:

上一篇提到打包的环境和打包示例一(没有外部资源依赖的打包):
手把手教你pyqt打包成exe(1)

文章目录

  • 手把手教你pyqt程序打包成exe
    • 0x00 示例二
      • 项目文件结构
      • 资源文件说明
    • 预处理
    • 单文件夹打包
    • 单文件打包
      • pyqt打包exe的icon“没有显示”的原因:
    • .spec文件
    • 总结
    • 说明

这篇将讲解示例二(带有多个外部资源依赖程序的打包),同时进一步讲解.spec文件。

0x00 示例二

项目文件结构


需要打包的项目复制出一份,然后适当调整项目文件结构。

为什么我一直强调项目文件结构?

我个人觉得,项目文件结构调整好,才不容易出现因为在某个py文件引用了其他py的内容,由于自己import操作不当而出现打包后找不到某个引用的模块等问题。。

再说,如果只是自己
为了打包一个比较实用的exe(可以发exe文件别人,然后在其他电脑上正常运行),那么我完全可以将项目文件结构调整的更利于打包的形式。比如:将多个py文件合并到一个py文件,这样就可以避免因为自己import不当而出现的打包后运行出错的问题。

ps:用pyinstaller打包exe,我研究了将近两天时间,不断找资料,不断尝试。最后作个总结,也希望能够帮到某些人。如果有不太对的地方,希望大家积极指出~

资源文件说明

示例二项目文件:
引用了多个外部资源文件,如图中红色矩形所示。

MainDemo.py集成了其他的py里的类。

我们的目标是把外部资源文件一起打包”进“exe文件,并且要正常运行。

本来这些外部资源文件不是在src下的,我是为了避免各种出错才把它放在了src文件夹下。

这次我们先来单个文件夹打包~

预处理

我们引用的文件资源,路径全部用的是我们本机上的(相对)路径。如果移动到其他计算机上,那么很可能因为依赖的外部资源文件路径不同而无法运行。
直接上解决措施吧。
需要新建一个py文件来”冻结”资源文件路径:
frozen_dir.py

import sys
import os
def app_path():"""Returns the base application path."""if hasattr(sys, 'frozen'):# Handles PyInstallerreturn os.path.dirname(sys.executable)return os.path.dirname(__file__)if __name__=='__main__':print(app_path())

这个py文件是为了获得’冻结了’的基路径
其他文件路径,可由基路径+字符串 拼接获得。
要注意这个py文件放的位置,要在src下。

要引用外部资源文件的地方,那个py文件要import frozen_dir,
资源路径 = app_path() + xxx/xx
比如要引用imgs里面的图片,

base = frozen_dir.app_path()
图片路径 = '{}\imgs\分析.png'.format(base)

引用其他资源文件同理,因为冻结路径的py文件和它们一样都在src下。
这样不管,在哪台计算机中运行,都会相对’冻结路径‘的基路径来精确获得资源路径。

基于冻结的基路径将引用的外部资源文件的路径设置好后,我们开始来打包。

单文件夹打包

pyinstaller -D -w -i .\halo.ico .\MainDemo.py


此时去dist中的文件夹下找到exe双击运行:

cmd运行:

发现并没有提示错误。
为什么?
因为我能程序里引用的外部资源并没有打包进去
我们来修改.spec:

add_files是一个列表,列表里元素是元组,
元组第一项是要引用的外部资源的路径(可以是文件/文件夹),第二项是打包进exe,在exe中的路径(所在文件夹)

然后输入:

pyinstaller .\MainDemo.spec

重新构建exe

再去dist里面找exe并运行:

完美~

PS:
细心的崽崽一定会发现,其实只是把外部资源文件拷贝了一份在exe所在的文件夹下,并不是压缩到exe里面去~
(图片资源可以压缩进exe,通过
编写qrc文件转换为py文件,导入py文件,修改引用----》
手把手教你pyqt中.qrc图片文件的编写和使用)

所以,刚才也可以不修改.spec文件,可以直接把外部资源文件拷贝进exe所在文件夹,这样也可以运行exe。

再次Tip:只要dist文件夹里的有用,发给别人的时候只需要发这里面的东西即可(本来pyqt打包的exe就比较庞大,更没必要发一下没用的文件给别人)

下面来演示单文件打包。

单文件打包

pyinstaller -F -w -i .\halo.ico .\MainDemo.py

一开始我以为exe图标没有成功加上去。
害的我还不断尝试,尝试的要崩溃的感觉。挺扎心的,不过还好没放弃~

pyqt打包exe的icon“没有显示”的原因:

这里icon没显示的原因:
其实是因为icon不够大,而图标又放的太大显示不出来。

真的显示不了的原因可能是图标不符合icon标准

只需要按住ctrl+鼠标滚轮缩小即可看的icon…

此时双击能运行吗?
我为啥要先做单文件夹的演示?哈哈~


解决方案和上面一样。
简单的肯定不是改.spec文件在重构。
而是把依赖的资源文件/文件夹拷贝到exe所在目录下。
也正好验证一下上面提到的!


示例演示就暂时到这里了,希望能带给你点启发,给你点帮助~
如果有帮助或者启发,关注我,或者给我点个赞,留个言,就是对我最大的鼓励了!!
------》现在是2020/04/26/ 0:30

.spec文件

篇幅原因 + 太晚了!!
这里也简单介绍一点.spec里面的配置吧。
研究深入点+有时间 再单独写一篇吧。

总结

pyqt程序打包成exe需要自己多折腾~
还要想办法压缩打包exe的体积。
有时间也可以多去了解一下pyqt生成的exe的编译和反编译…

说明

如果有帮助或者启发,关注我,或者给我点个赞,留个言,就是对我最大的鼓励了!!** ------》现在是2020/04/26/ 0:59

参考:文献1

手把手教你将pyqt程序打包成exe(2)相关推荐

  1. 手把手教你将pyqt程序打包成exe(1)

    手把手教你将pyqt程序打包exe 文章目录 手把手教你将pyqt程序打包exe 0x00 环境说明 0x01示例1(没有其他外部资源文件) 1. 单文件打包 2. 单文件夹打包 0x00 环境说明 ...

  2. python程序打包成exe可执行文件,亲测可行(pyinstaller教程)

    python程序打包成exe可执行文件,亲测可行(pyinstaller教程)(11-20190214) 文章目录: 有些程序你不想让别人看到,由此程序你想做成绿色软件普惠大众,有些..., 然而你只 ...

  3. Java桌面程序打包成exe可执行文件

    前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...

  4. java程序打包成exe安装包总结

    经过很长时间的尝试,终于大致清楚了java程序打包成exe的过程,特做此总结. 首先打包成exe文件有两种方式,一种是通过javafx本地打包的方式,参考文章https://code.makery.c ...

  5. Pyinstaller将Python程序打包成EXE(多种模式的打包)

    Pyinstaller将Python程序打包成EXE 文章目录 Pyinstaller将Python程序打包成EXE 安装 安装 pip install pyinstaller 博文已经迁移到个人主页 ...

  6. 如何把一个java程序打包成exe文件,运行在没有java虚

    如何把一个java程序打包成exe文件,运行在没有java虚 核心提示:首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了:但是exe文件在没有安装jre的电脑上不能运行,如果要 ...

  7. python版本可执行可嵌入_Python程序打包成exe可执行文件的方法探究

    王瑞文+王圣辉+边润根+邓明月 摘 要:Python是一种很流行的开源编程语言,可以在各种领域中用来编写独立的程序和脚本.Python免费.可移植.功能强大,而且使用起来相当容易.来自软件产业各个角落 ...

  8. 将python程序打包成exe

    将python程序打包成exe,这样我们下次想要实用自己写的python时,就不需要打开python或者编辑器了,可以直接点了exe运行,是个比较实用的功能. 参考链接:https://www.cnb ...

  9. 复制粘贴,快速将Python程序打包成exe

    大家好,我是菜鸟哥. 为了将Python程序发送给不懂代码和没有安装Python的同事.朋友使用,最好的方式就是将Python程序打包成exe可执行文件,再发送给他们. 我之前曾经打包过几次,操作并没 ...

最新文章

  1. R语言ggplot2可视化2d密度图:可视化二维密度图并将两个二维密度图重叠起来、Overlay two ggplot2 stat_density2d plots
  2. HTML边框为零,html – 保证金,填充,边框全部为零后仍有空格?
  3. Conversion to Dalvik format failed with error 1解决方法:
  4. Exynos4412 所用外存 —— eMMC
  5. php der格式 证书,php读取der格式证书乱码解决方法_PHP教程
  6. (转)10条名言,让你少走弯路
  7. linux kernel menuconfig【转载】
  8. 安卓的自动启动设置界面的启动代码
  9. cad打开a3样板图形_cad a3图框下载-cada3标准图框模板 dwg版 - 河东下载站
  10. linux加静态路由命令,LINUX添加静态路由
  11. VR虚拟现实AR增强现实编程(1):VR和AR简介
  12. 容器中启动ssh状态总是sshd is not running
  13. Oracle生成data patching脚本
  14. 为什么在校大学生都要考计算机证书?要考几个证?
  15. 微信5秒超时 php异步,微信公众号-5秒内不回复测试并处理方案,顺便复习php 时间执行...
  16. 获取现在的Unix时间戳(Unix timestamp)的方法-在线时间戳转换器
  17. mc是电子计算机的什么键,计算机上的mc是什么键
  18. GSM与N-CDMA网络覆盖能力对比研究(转)
  19. 录屏软件哪个好?试试这6款录屏软件,小编亲测(2023已更新)
  20. 10月11日关于煤炭的期货交易

热门文章

  1. python读excel 包含格式_python里读写excel等数据文件的几种常用方式
  2. elasticsearch6.2.3 冷热架构设计
  3. 重构—改善既有代码的设计
  4. 测试小白入门必知必会的8个测试工具
  5. Pandas实用技能,将列(column)排序的几种方法
  6. 肝!超好懂的 Python 文件读写教程!
  7. 桌面计算机密码应由哪项组成,计算机应用能力考试模拟试题
  8. 2020年最好用的手机是哪一款_2020年好评最多的三款手机,看看你在用哪款?
  9. 深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach
  10. 机器学习:Regression,第一个简单的示例,多项式回归