PyInstaller打包Pygame项目运行报No such file or directory错误如何解决
错误原因
PyInstaller打包时不会自动收录Pygame依赖的默认字体文件freesansbold.ttf。打包后的程序运行时,会先将所有内置资源解压到/tmp/_MEIxxxxxx格式的临时目录下,当程序触发字体加载逻辑时,找不到对应路径下的字体文件,先抛出文件不存在异常,最终导致段错误崩溃。
解决方案
方法一:打包命令直接指定资源
在PyInstaller打包命令中通过--add-data参数显式声明要打包该字体文件:
- Linux/macOS 执行命令:
pyinstaller -F --add-data "$(python3 -c "import pygame,os;print(os.path.dirname(pygame.__file__))")/freesansbold.ttf:pygame/" main.py
- Windows 执行命令:
pyinstaller -F --add-data "%(python -c "import pygame,os;print(os.path.dirname(pygame.__file__))")%\freesansbold.ttf;pygame" main.py
方法二:修改spec配置文件
如果已经生成了打包用的.spec文件,直接修改文件中的datas配置项:
# 替换为你本地Python环境中pygame的freesansbold.ttf实际路径 datas = [ ("/usr/local/lib/python3.10/site-packages/pygame/freesansbold.ttf", "pygame") ]
修改完成后重新执行pyinstaller xxx.spec完成打包即可。
方法三:代码规避默认字体调用
直接在代码中放弃使用Pygame的默认字体,改为加载项目自带的字体文件:
将原有类似pygame.font.SysFont(None, 32)的写法,替换为:
# 字体文件放在项目目录下,打包时一起收录即可 font = pygame.font.Font("./myfont.ttf", 32)
内容的提问来源于stack exchange,提问作者Kellan_B
相关产品推荐
相关产品推荐

