2.一文讲清楚:nuitka用于python打包(应用于PyQt5编程打包)

声明

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

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

  3. 安装细节以及更多命令参数本文不细说,已经大佬在做这方面,既然有大佬在做,为什么还要单独开出一篇文章来讲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\bin”配置到环境变量path下
运行cmd执行:gcc –version 检查版本号是否正确

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

版本下载方法有两个:

  1. 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

以上地址,需要根据实际情况选择相对版本,把下载地址拷贝出来,自己去用下载工具下载;解压到指定目录,配置好环境变量;
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

  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿飞哥666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值