使用pyinstaller打包pygame游戏生成的exe运行提示找不到资源文件怎么办
问题原因
- 路径获取逻辑不适配PyInstaller打包环境:你使用
os.path.abspath(__file__)获取路径的方式仅在直接运行Python脚本时生效。PyInstaller的--onefile模式运行时,会先将所有内置文件解压到系统临时目录的随机文件夹中,__file__指向的是这个临时目录下的字节码文件路径,而非exe文件实际存放的路径。 - 资源文件未被打包进程序:你执行的打包命令没有指定将游戏依赖的
Pictures等资源文件夹打包进去,解压后的临时目录自然不存在对应资源文件,触发文件不存在报错。 - 硬编码的路径分隔符
\\仅适配Windows系统,不过这不是本次报错的直接原因,但建议修改为跨平台适配的写法避免后续问题。
解决步骤
第一步:修改路径获取与拼接逻辑
兼容直接运行脚本和打包后运行两种场景,修改代码如下:
import os import sys # 统一获取基础路径 def get_base_path(): # 打包后运行的场景,读取PyInstaller内置的临时目录路径 if getattr(sys, 'frozen', False): # 如果你希望资源和exe同目录放置,可替换为 return os.path.dirname(sys.executable) return sys._MEIPASS # 直接运行py脚本的场景 else: return os.path.dirname(os.path.abspath(__file__)) PathToDir = get_base_path() # 用os.path.join拼接路径,自动适配不同系统的分隔符 TloIMG = pygame.image.load(os.path.join(PathToDir, "Pictures", "Sceneria1.png"))
其余资源加载逻辑全部替换为上述os.path.join的拼接方式即可。
第二步:调整打包命令
需要通过--add-data参数告知PyInstaller将资源文件夹打包进程序:
- Windows系统打包命令:
pyinstaller --onefile -w --add-data "Pictures/*;Pictures/" NameOfTheFile.py
- Mac/Linux系统打包命令:
pyinstaller --onefile -w --add-data "Pictures/*:Pictures/" NameOfTheFile.py
如果还有其他资源文件夹(比如音效、字体文件夹),可追加多个--add-data参数指定即可。
内容的提问来源于stack exchange,提问作者PLrc
相关产品推荐
相关产品推荐

