Python——pgzero游戏打包exe执行时报错
记录一次使用 pgzero 开发游戏,使用 pyinstaller 打包时报错
目录结构:
1. 第一次报错
打包指令:
pyinstaller -Fw .\code.py
结果打开报错
报错如下:
Traceback (most recent call last):
File "code.py", line 1, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
File "pgzrun.py", line 23, in <module>
File "pgzero\runner.py", line 106, in prepare_mod
File "pgzero\game.py", line 92, in show_default_icon
File "pkgutil.py", line 637, in get_data
File "PyInstaller\loader\pyimod03_importers.py", line 344, in get_data
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\XXX\\AppData\\Local\\Temp\\_MEI218762\\pgzero\\data\\icon.png'
根据报错信息,可以知道报错原因是没有找到这个图片,而我没有引入这个过这个图片,所以根据报错提示 File "pgzero\game.py", line 92, in show_default_icon
,猜测是这个文件出了问题
2. 第二次报错
在 python 的第三方包目录中找到 "pgzero\game.py"
,查看第92行代码
这里确实引入了一个文件,所以我把这两行注释掉再重新打包
结果还是报错,好的是游戏窗口已经出来了
3. 解决问题
这次猜测是因为打包时没有引入文件,所以我在打包指令中添加了引入文件的选项
pyinstaller -Fw --add-data ".\images\*;.\images" --add-data ".\music\*;.\music" .\code.py
选项意思是:添加数据,将 相对路径下 images
文件夹中的所有文件 添加到 exe文件中的 images
文件夹中
总结
问题主要是因为资源没有引入
- 第一步是在
"pgzero\game.py"
中注释代码,以防引入默认图标 - 第二步是在打包时添加游戏需要的资源