提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:nuitka打包成正式发布版本,之后出现故障调试难度非常大,也很麻烦,这个是每个使用nuitka都有的感受。本文基于“3.nuitka只打一次包多次版本发布”文章进一步展开讲打包调试篇
网上打包方法大多是把程序打包进exe中,这种方式在解决打包后才遇到的问题就很麻烦,每次改动点代码,就要打包一次,而nuitka打包过程动辄几分钟才结束,这种调试方式效率非常低。
基于此种困难,本文提出一个调试思路用于解决难题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、打包正式版本命令
在打包命令中加入:
--windows-disable-console --windows-icon-from-ico=exe图标文件路径.ico
并把打包结果路径修改到其他目录下,打包完成之后,从打包路径下把exe文件复制到正式版本对应exe路径之下,使用cmd方式之下exe文件,即可打开print结果输出。
二、nuitka打包调试
采用正式版本打包命令打包的程序,执行时是看不到打印信息,运行过程与预期不一致时,解决办法:把正式打包命令去掉以下信息:
--windows-disable-console
并把打包结果路径修改到其他目录下,打包完成之后,从打包路径下把exe文件复制到正式版本对应exe路径之下,使用cmd方式之下exe文件,即可打开print结果输出。
三、联合调试之文件级调试
提示:本步骤需要于3.nuitka只打一次包多次版本发布一起联合起来操作,才能够解决多次调试的困难。
打包成功之后,编译项目代码为pyd文件,按项目模块层级拷贝到打包程序目录下,不明确的可以参考我的博客下PyQt快速开发框架项目打包案例中打包篇(当前未写完成预告)。
四、nuitka打包后的bug总结
提示:代码逻辑问题不在此解决。
1.类型限制
运行打包程序,提示:
TypeError: Expected str, got bytes
原因:是函数使用类型限制、以及用Cython编译为pyd文件给打包程序调度导致的问题。
代码示例,encodeByXXX函数中参数text限定类型为str:
def add_to_16(text):
if len(text.encode('utf-8')) % 16:
add = 16 - (len(text.encode('utf-8')) % 16)
else:
add = 0
text = text + ('\0' * add)
return text.encode('utf-8')
def encodeByXXX(key,text:str):
text = add_to_16(text)
编译为pyd文件之后,复制到打包目录下,被调用这段函数encodeByXXX运行包以上错误。
暂时已知解决办法:去掉类型限制。