欢迎光临
我们一直在努力

nuitka编译pyqt5,python nuitka打包exe

文章目录 声明一、优缺点对比二、安装相关2.1. 安装编译器2.2. 安装nuitka 三、通用命令行3.1- 网上搜索到通用的3.2- 调试开关3.3-对特定目录进行pyd打包3.4 本人项目中用到的打包命令 五、路径问题六、打包调试七、虚拟机打包

声明

打包命令、图片来源网上大佬。同步法语知乎:2-一文讲清楚:nuitka用于python打包(应用于PyQt5编程打包)

本文用到打包命令应用于 Nuitka-0.6.8.4 、0.6.13 两个版本,两个版本参数改动很多

安装细节以及更多命令参数本文不细说,已经大佬在做这方面,既然有大佬在做,为什么还要单独开出一篇文章来讲nuitka打包呢?
出发点: 1.总结个人打包经验,2.分享打包步骤,3.作为“3.nuitka一次打包多次发布”文章的导入文章;

一、优缺点对比

当前pyinstaller基本上占有python打包市场的80%份额以上,为什么这么大的份额之下还有nuitka的一席之地呢?这个是由于nuitka打包的程序运行效率以及安全性明显优于pyinstaller,不容忽视的是nuitka存在打包过程容易出错、打包耗时等问题,导致很多人不愿意从pyinstaller中走出来,尝试nuitka(以我从初学nuitka到可以把公司项目打包成功,这个过程预计一般落后的雪糕学习时间至少要3-7天,python老手一般2天就可以熟练打包)。

运行性能与打包效率:nuitka打包类似于pyinstaller,nuitka打包的程序运行性能明显优于pyinstaller打包的程序,但是nuitka打包过程出现的错误率明显高于pyinstaller,并且nuitka打包效率也非常低,一般一个简单文件打包就要2-5分钟、pyinstaller一般在1-2分钟内可以打包,这个耗时时间与打包机器性能有一定关系,两个对比基本上3:1的耗时比。

安全性:这个属于专业人士对比。个人感觉都差不多,有的人认为nuitka更安全。特别是nuitka提供指定目录编译打包提供相对安全性。不过个人觉得如果仅仅是转换为pyd文件就是安全性的,我在“python打包”中提到的Cython打包就可以满足。

二、安装相关 2.1. 安装编译器

下载WinGw对应版本解压到c盘下,“C:\mingw64\满意的大树”配置到环境变量path下
运行cmd执行:gcc –version 检查版本号是否正确

对应版本要求:
a.python的位数(32位、64位),WinGw对应也存在32/64位;
b.nuitka对版本要求

版本下载方法有两个:

nuitka打包提示下载
由于nuitka对MinGw有版本要求,在第一次打包会提示下载最新的版本,这个过程询问是否下载更新。收入”yes”,之后就会弹出如下 https://github.com/brechtsanders/winlibs_mingw/releases/download/11.2.0-12.0.1-9.0.0-r1/winlibs-i686-posix-dwarf-gcc-11.2.0-llvm-12.0.1-mingw-w64-9.0.0-r1.zip

以上地址,需要根据实际情况选择相对版本,把下载地址拷贝出来,自己去用下载工具香港vps下载;解压到指定目录,配置好环境变量;
2. 手工找最新版本下载

最新版本:https://github.com/brechtsanders/winlibs_mingw/releases/

PS: 以下版本相对相对来说比较老,不太适合当前新版本,只是举例说明
下载MinGW:https://sourceforge.net/projects/mingw-w64/files/

2.2. 安装nuitka

pip install nuitka

版本很重要,有一些版本不稳定,按照通用打包命令运行时,如果有什么异常,可以考虑往前几个版本试试。

三、通用命令行 3.1- 网上搜索到通用的

nuitka –mingw64 –windows-disable-console –standalone –show-progress –show-memory –plugin-enable=qt-plugins –plugin-enable=pylint-warnings –recurse-all –recurse-not-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,win32com –output-dir=out main.py

3.2- 调试开关

–windows-disable-console #这一行去掉,执行时带cmd界面执行

3.3-对特定目录进行pyd打包

–follow-import-to=cmpIn #这个是对特定需要保密的部分进行处理 — 为你需要编译成C/C++的py文件夹命名,里面放你的py文件或者文件夹

3.4 本人项目中用到的打包命令

Nuitka-0.6.8.4

nuitka –mingw64 –windows-disable-console –standalone –show-progress –show-memory –plugin-enable=qt-plugins –plugin-enable=pylint-warnings –recurse-all –recurse-not-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,pubunit,qtunit,dataunit –output-dir=D:\打包结果\数据处理工具 testDtsRun.py

Nuitka-0.6.13

python -m nuitka –mingw64 –standalone –show-progress –show-memory –plugin-enable=qt-plugins –plugin-enable=pylint-warnings –nofollow-import-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,pubunit,qtunit,dataunit –output-dir=D:\打包结果\数据处理工具 testDtsRun.py

五、路径问题

由于打包程序,路径环境被“破坏”,需要在入口程序位置修复。

BASE_DIR = os.path.dirname(os.path.abspath(file))
sys.path.append(os.path.join(BASE_DIR, ‘client’)

资源文件也是这一个道理,需要用绝对路径方式,由于每个程序部署不一样,需要用BASE_DIR作为资源查找起点。

六、打包调试

经常遇到的问题:加装模块提示找不到模块、资源找不到。

参考”3.2″\步骤,把cmd窗口打包到程序中。打开cmd窗口,切换路径到打包程序下,执行下面的exe文件。检查执行提示。

例如错误行提示:

from aaa import bbb

提示aaa找不到,说明exe文件同级目录下,不存在aaa文件或者aaa目录,从python环境中拷贝一份aaa文件(目录)到exe文件同级目录下。

提示资源缺失找不到,参考“四、路径问题”进行处理

七、虚拟机打包

很多大佬教育落后的雪糕用虚拟机进行打包,其实言外之意是,本机环境由于不断安装python版本、以及其他编译环境也不一定干净,有可能会出现打包各种问题。

入门教程参考Python打包exe的王炸-Nuitka:Python打包exe的王炸-Nuitka

38983340

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。