一、问题
使用wxPython创建一个图形界面,在VSCODE中正常运行,但是打包后,却不能运行,只出现一个一闪而过的窗口,这时最需要看看这窗口到底显示了什么内容。这里可以使用录屏软件录制屏幕,这里使用LICEcap小软件进行屏幕录制。
二、分析
找到黑色框出现的地方:
可以清晰看到报错地方,出现在wxPython库里,richtext.py中17行,找到该文件
浏览wx库文件,搜索._richtext文件,发现是以.pyd结尾的文件这是Python的扩展模块文件。它们是使用C或C++编写的动态链接库,可以被Python解释器加载和使用。在Windows上,.pyd文件通常被称为Python Dynamic Link Library,可以通过import语句在Python代码中导入和使用。
这里猜测打包时没有将用到的动态链接库打包进去。为了验证想法,我们再次打个包,打包前将生成单一exe的指令去掉,变成这样。(这里的speech目录是python虚拟环境目录)
nuitka --standalone 南瓜饼Cookie查看.py --windows-disable-console --windows-icon-from-ico=.\icon\icon.ico --output-dir=out --output-filename=南瓜饼Cookie查看.exe --remove-output --include-data-dir=icon=icon
打包成功,进入生成的文件目录,找到wx目录,发现仅有以下几个文件。
确实是没有pyd文件,那么下面给他手动加上。
三、解决方法
进行speech虚拟环境目录,将可能相关的动态链接库拷贝到打包后的目录中。
1、找到虚拟环境中的pyd文件
拷贝
再次运行之前生成的可执行文件,已经能够执行
四、小结
wxPython图形库底层是用C++编写,上层用python封装,pyd文件是C++库,打包文件时不会自动打包进exe文件,要手动添加。