提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、基础参考
nuitka打包程序的版本发布方法,不同版本命令参考"一文讲清楚:nuitka用于python打包(应用于PyQt5编程打包"
二、背景
nuitka打包好的程序动辄上100M,更有甚者超过1G。这种程序如果每次更新一点就全量发布,必然让用户非常懊恼。
三、打包阻断原理
nuitka打包过程,根据py文件中from、import遍历相应模块文件打包到打包程序中,一旦遇到pyd,则不再递归查找下一层模块py文件。
nuitka用到什么打包什么,如果新更新的代码中包含了新的模块,运行到这个新程序就会出现报错现象,如果这个新的模块是自己维护的,可以用下面方案解决;这个新模块是python自带模块或者第三方python模块有两种解决办法:1. 把这个模块拷贝到打包目录下、2. 修改app.py增加一样引用代码,重新打包整体发布。
四、打包方案
版本发布解决方案(初级):
程序层级:入口程序.py–>pyd文件–>项目主体模块
app.py #调用 main函数(from client.callMain import main)
client/callMain.pyd #提供main函数供app.py使用
#pyd文件由callMain.py转换而来,提供main函数,调用main.py中的窗口
client/view/frame/main.py #主体窗口
client/view/manage/user.py #用户管理界面
使用打包命令打包app.py文件,递归到from client.callMain import main 发现callMain为pyd文件,nuitka必然不再递归打包,client里面其他模块就需要手动转换为pyd文件拷贝到打包目录之下
版本发布解决方案(Cython版本):
待续:如何批量转换py文件为pyd;在“PyQt快速开发框架”中会集成一个这方面的小工具。
版本安全发布解决方案(启动安全检查pyd合法性):
待续:pyd文件如何进行安全校验,规避破解风险
案例:待续,也可以参考最近发布的“Pyqt快速开发框架项目demo”进行构建
基础打包文章参考:Python打包exe的王炸-Nuitka 入门教程
声明:本文同步发布于知乎:3.nuitka只打一次包多次版本发布