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的包管理工具安装即可:

bash 复制代码
pip install nuitka

输入下面命令可查看nuitak 版本

bash 复制代码
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替换为自己的程序入口文件)

bash 复制代码
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 入门指南

相关推荐
chenziang14 分钟前
leetcode hot100 LRU缓存
java·开发语言
时雨h19 分钟前
RuoYi-ue前端分离版部署流程
java·开发语言·前端
云计算DevOps-韩老师37 分钟前
【网络云计算】2024第52周-每日【2024/12/25】小测-理论&实操-自己构造场景,写5个系统管理的脚本-解析
开发语言·网络·云计算·bash·perl
暮色尽染40 分钟前
Python 正则表达式
开发语言·python
IT猿手42 分钟前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解GLSMOP1-GLSMOP9及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·算法·机器学习·matlab·强化学习
小爬虫程序猿44 分钟前
利用Java爬虫获取速卖通(AliExpress)商品详情的详细指南
java·开发语言·爬虫
xlsw_1 小时前
java全栈day21--Web后端实战之利用Mybaits查询数据
java·开发语言
Murphy20231 小时前
.net4.0 调用API(form-data)上传文件及传参
开发语言·c#·api·httpwebrequest·form-data·uploadfile·multipart/form-
我曾经是个程序员1 小时前
C#Directory类文件夹基本操作大全
服务器·开发语言·c#
白云~️1 小时前
uniappX 移动端单行/多行文字隐藏显示省略号
开发语言·前端·javascript