前几天做好了飞机大战的游戏,准备把它用pyinstaller打包起来。
结果打包好了后,很开心的一打开居然给我报错了,内容如下:Failed to execute scripts Main.
这我就懵了呀,我可是第一次用pyinstaller呀。这个样子报错我马上去网上千查万查,参数数十种办法,不是瞎说,这办法我就尝试了没有三十次也有二十次了。我用了差不多8个小时也没有成功,人真的是要崩溃了。
正当我要放弃的时候,我看见了网上一个说法,他说先写一个简单的小游戏,然后尝试一下会不会出现问题,如果没有问题,那么说明是我这个代码的问题,而不pyinstaller的问题。于是我尝试了一下,小游戏正常运行。。。。。。。
那么说明我花了这么久也没查到答案最后居然是代码写错了???
我实在不敢相信!
不巧的是我在之前还看到一篇文章说是pyinstaller不支持中文字体,于是我把我代码中的字体用#去掉,然后再次尝试pyinstaller,结果很明显,还是报错。
但是我在想我用Python的代码来启动游戏是可以执行的,那应该说明我的代码没有错啊。于是我用了一个蠢的办法,但是不得不说是有效的方法。
我重新分析,我的这个游戏分有三个文件夹,图像,字体,音效,还有加上主模块的5个模块构成,既然字体的影响删去还是无法正常游戏,那么我就试试其他的,图像一般是不会有问题,所以我从音效开始尝试起,事实证明我的分析是对的。
我将音效去除,然后用pyinstaller重新打包游戏,结果就正常运行了(没有声音)。
于是我开始二次分析,既然是音效的问题,那么游戏一开始就报错,而不是玩了一下崩溃退出,就证明不是游戏中什么飞机爆炸的音效的影响,于是我从最有可能的部分入手——背景音乐。打开sound文件夹这么一看果然如此,所有文件都是wav格式的,而只有背景音乐是ogg格式。这就更加让我确定了我的想法,于是我上网一查,果不其然啊。给你们看看我看到了什么(转一个别人的文章)
现在游戏可以正常运行了。
虽然耗时很长,但是自己解决问题的感觉真的是很爽。
————————华丽的分割线——————————
总结:出现Failed to execute scripts Main的报错,不一定是什么高大上的故障。
1、检查一下打包好之后有没有把必要的组件放入dist文件夹(图片,字体,音效,txt文档(源代码不需要)),然后就是build文件夹,好像没什么用,可以删了。(看了一下别人的文章,也是这么说的,我自己也删了,并不影响游戏)
2、如果确信自己没有漏掉组件,那就检查一下组件的形式。
(事实证明:用pyinstaller打包以后pygame不支持播放mp3和ogg文件 我把音乐文件转换成wav格式就成功了。所以mp3和ogg在pycharm里可以正常使用,不过如果要转成exe的话还得先把音乐文件统一转化成wav才行)
亲身试验过,如果图片什么的没有放进去,报错也是Failed to execute scripts Main。