前面的话,有能够编译py文件和图片资源一起打包为exe的大神,给讲一下,谢啦
最近有个pygame的小游戏需要编译成windows的exe文件,网上找了找资料一般有两种py2exe和pyinstaller.
为什么报错IndexError: tuple index out of range
根据网上的资料尝试后知道py2exe最高支持到python3.4, python3.6的opcode发生了改变(pyinstaller发布版也是这样报错)。py2exe解析opcode时不支持新的opcode,这里很多人不知道opcode,这和python的编译运行机制有关,python3.6改变原来的bytecode opcodes为wordcode opcodes。详细的可以参考python3.6新的改变.
怎么办
推荐使用pyinstaller,使用命令行安装成功后,进入“python安装目录\Lib\site-packages”,删掉Pyinstaller文件夹,github下载开发者版Pyinstaller,下载zip解压后提取Pyinstaller文件夹到刚才的目录替换。至此可以正常使用命令行完成。
新的问题
pyinstaller -F game.py后可以在“python安装目录\Scripts\dist”找到exe了。正常的单独py文件没有问题。但是我这个项目用到了一些图片和声音文件,发现运行exe时闪退原因是找不到资源文件。后来发现了这篇文章
另外,具体使用可以参考pyinstaller的文档。如果只有py的脚本文件,只使用pyinstaller -F 文件.py即可编译成exe。
但是这个项目用到了一些resources,项目结构如下:
项目结构.jpg按照文档上的命令操作仍出现很多问题:
1:首先生成spec文件
pyi-makespec -F name.py
2:调整.spec文件中的参数,添加data。文件夹中的文件目录:
文件结构.jpggame.py中的代码引用dude.png:
#2.load images
player = pygame.image.load('dude.png')
讲道理,在同一层目录下,按照文档上的说法,data按照如下添加即可:
datas=[('dude.png','.')]
但就是不行,还尝试过很多种路径的写法,包括再放入一个文件夹。。。。等等都不行。
贴一些过程的错误:
成功但exe不能正确引用图片.jpg 引用不到的错误.jpg data中的参数错误.jpg
网友评论