python3GUI--PyQt5打包心得(二)nuitka、inno Setup(详细图文演示、附所有软件)


一.前言

上篇文章介绍了如何使用Pyinstaller在虚拟环境下打包PyQt5程序,本篇算是上篇的进阶,本篇将详细演示如何使用nuitka对PyQt5程序打包,使用inno Setup制作安装软件。
通过阅读本篇博文,你能够学会:
1.如何使用nuitka打包PyQt5程序并且提高代码执行效率
2.inno Setup的使用,将打包好的程序缩小体积制作成安装软件

二.准备

1.nuitka

1.1介绍

Nuitka是一个Python的替代编译器。它可以无缝地替代和扩展Python的解释和编译工作。截止2021年8月,支持Python2 (2.6, 2.7) 和 Python3 (3.3 - 3.9)版本 [4] 。它可以执行编译的代码,并能用很兼容的方式将目标代码一起编译。
开发者可以自由的使用所有的Python模块库和其他全部的第三方扩展库。Nuitka可以将Python代码编译成C级别的程序,并像CPython调用libpython一样去使用libpython库去执行编译后的程序。Nuitka的这些的优化工作旨在是为了能够避免Python执行过程中的在某个环节产生的不必要的开销。并旨在能够是消除一些不兼容性,虽然这是一种改进了的模式,但也不是每个标准Python的bug都能模拟,例如,提供更完整的错误信息。
在这里插入图片描述

1.3项目地址

https://github.com/Nuitka/Nuitka
在这里插入图片描述
可以看到star快到1W了

1.3安装

直接使用python的包管理工具安装即可:

pip install nuitka

在这里插入图片描述
输入下面命令可查看nuitak 版本

nuitak --version

在这里插入图片描述

2.mingw64

1.1介绍

MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。
在这里插入图片描述

1.2下载安装

通过下面链接地址可下载
https://www.mingw-w64.org/downloads/
本次采用nuitka连带自动mingw64的,这里对下载、安装不做赘述。

3.Inno Setup

1.1介绍

这是一款老牌免费的 Windows 安装程序制作软件,最早发布于1997年。

Inno Setup用Delphi写成,其官方网站同时也提供源程序免费下载。它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀。Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务。
在这里插入图片描述

1.2安装

大家可去官网下载安装,但是不支持中文
https://jrsoftware.org/isinfo.php
本次笔者直接在网络上找到了汉化版,放在了这里

安装完之后你就得到了和我同款的inno Setup软件
在这里插入图片描述

三.nuitka打包

这里是重点
我们使用以下命令对我们的python代码进行打包

1.打包

从项目根目录打开windows资源管理器,按下shift+ctrl+鼠标右键打开power shell,输入下面命令(请自行将xxx.py替换为自己的程序入口文件)

nuitka --mingw64 --standalone --show-progress --show-memory --output-dir=out   --plugin-enable=pyqt5 --windows-disable-console  --windows-icon-from-ico=favicon.ico xxx.py

–mingw64 #默认为已经安装的vs2017去编译,否则就按指定的比如mingw(官方建议)
–standalone 独立环境,这是必须的(否则拷给别人无法使用)
–windows-disable-console 没有CMD控制窗口
–output-dir=out 生成exe到out文件夹下面去
–show-progress 显示编译的进度,很直观
–show-memory 显示内存的占用
–enable-plugin=pyside6 打包pyside6模块的刚需
–plugin-enable=tk-inter 打包tkinter模块的刚需
–plugin-enable=numpy 打包numpy,pandas,matplotlib模块的刚需
–plugin-enable=torch 打包pytorch的刚需
–plugin-enable=tensorflow 打包tensorflow的刚需
–windows-icon-from-ico=你的.ico 软件的图标
–windows-company-name=Windows下软件公司信息
–windows-product-name=Windows下软件名称
–windows-file-version=Windows下软件的信息
–windows-product-version=Windows下软件的产品信息
–windows-file-description=Windows下软件的作用描述
–windows-uac-admin=Windows下用户可以使用管理员权限来安装
–linux-onefile-icon=Linux下的图标位置
–onefile 像pyinstaller打包成单个exe文件
–include-package=复制比如numpy,PyQt5 这些带文件夹的叫包或者轮子
–include-module=复制比如when.py 这些以.py结尾的叫模块
–-include-package-data=包含给定软件包名称中的数据文件,等号后软件包名称。有的时候Nuitka并不能正确分析出一些Python软件包所需要使用的数据文件,在运行程序时提示FileNotFoundError等错误,此时就需要使用该选项。如:–include-package-data=ultralytics
–-include-data-files= 按文件名包含数据文件,等号后的格式为<SRC=DEST>。SRC指的是文件夹的路径,DEST指的是文件夹相对于打包结果的路径,其中DEST只能使用相对路径。如:–include-data-files=/Users/admin/Downloads/yolov5n.pt=./yolov5n.pt
-–include-data-dir= 包含文件夹中的数据文件,等号后的格式为<SRC=DEST>。使用方法与–include-data-files=相同。
–follow-import-to=MODULE/PACKAGE 如果使用该模块,请遵循该模块;如果是一个包,请遵循整个包。可以多次给定。默认为空。
提示:首次打包建议去掉–windows-disable-console,以保留控制台便于排查问题。

打包过程分三个阶段
打包过程下如图
在这里插入图片描述

2.装mingw64

当控制台询问是否安装gcc时, 输入yes进行安装(这里可能安装很慢,因为是访问github,可能需要魔法加速)
在这里插入图片描述

3.装ccahe

ccache(“compiler cache”的缩写)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息, 比如头文件,这样就节省了通常使用 cpp 解析这些信息所需要的时间。如果某头文件中包含对其他头文件的引用,ccache会用那个文件的 cpp-parsed版本来取代include声明,不是真正去读取、理解并解释其内容,ccache 只是将最终的文本拷贝到文件中,使得它可以立即被编译。ccache是以空间换取速度,ccache非常适合经常make clean(或删除out目录)后重新编译的情况。

在这里插入图片描述

4.打包完成

在这里插入图片描述

四.测试效果

打包完成后会在项目根目录下的out目录下创建两个文件夹,其中,.dist中为打包程序根目录
在这里插入图片描述
我们找到我们的程序
在这里插入图片描述
单个文件大小约26M
双击运行
在这里插入图片描述
OK没问题,可以去制作安装软件了。

五.inno Setup制作安装软件

1.配置新脚本

打开inno Setup 创建一个新的空脚本文件
在这里插入图片描述
ctrl+n创建一个新项目
在这里插入图片描述
下一步
在这里插入图片描述
在这里配置一下软件信息
在这里插入图片描述
下一步
在这里插入图片描述
这里的主执行文件选择我们打包好的程序入口exe
选择添加文件夹,把刚才的.dist文件夹添加进来
在这里插入图片描述
在这里插入图片描述
下一步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里选择好语言,我选择了中文和英文,软件能自动做国际化处理
在这里插入图片描述
在这里选择安装软件输出目录,我选择了桌面
设置好安装包icon
在这里插入图片描述
下一步,这里选择默认即可
在这里插入图片描述
之后会询问是否编译,我们选择是
在这里插入图片描述
这里自行选择,我选择了否
在这里插入图片描述
之后软件就会自动编译成安装文件,编译进度见左下角
在这里插入图片描述
待左下角提示完成
在这里插入图片描述
我们的安装文件就生成好了。大小只有30M哦
在这里插入图片描述

六.总结

本次详细演示了如何使用nuitka对我们的PyQt5程序进行打包,使用inno Setup工具将打包后的程序制作成安装程序,极大地减少了软件的占用体积,另外nuitka将py代码二进制的pyd文件提高了软件运行效率,防止了反编译,提高了整体软件的安全性,想多了解nuitka的朋友我会在下方贴几个地址,可以进行相关了解。

在这里插入图片描述

七.参考

mingw64
Nuitka
想了解Python源代码加密吗?现总结如下5大加密混淆手段!
Python与模具
Python 打包工具 Nuitka 入门指南

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值