You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame项目IDE运行正常,pyinstaller打包exe后闪退报错如何解决

问题根因

报错和你自己准备的png、wav等自定义资源路径无关,是freesansbold.ttf作为pygame内置字体,被pyinstaller打包后会以二进制流(BytesIO对象)的形式加载,而pygame.font.Font()第一个参数预期接收文件路径类对象,类型不匹配就触发了报错。

解决方案

你可以根据自己的需求选择以下任意一种方案:

  • 方案1:使用pygame默认字体(修改成本最低)
    直接将报错行代码替换为:
font = pygame.font.Font(None, 32)

传入None作为字体路径参数时,pygame会自动调用内置的默认字体,完全规避字体路径加载问题,不需要额外调整打包配置或复制文件。

  • 方案2:手动指定字体文件路径(需要保留freesansbold字体时使用)
  1. 先从本地pygame安装目录中找到freesansbold.ttf文件,将它和你用到的png、wav资源放在同一目录下
  2. 建议在代码中新增动态资源路径获取逻辑,兼容开发环境和打包后运行环境,避免工作目录不匹配问题,代码示例如下:
import os
import sys

def get_resource_path(relative_path):
    # 适配pyinstaller打包后的临时运行目录
    if getattr(sys, '_MEIPASS', False):
        base_path = sys._MEIPASS
    # 开发环境下取当前项目根目录
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 替换原有字体初始化代码
font = pygame.font.Font(get_resource_path("freesansbold.ttf"), 32)
# 其他资源加载也可以用这个方法,比如ufo.png
ufo_img = pygame.image.load(get_resource_path("ufo.png"))
  1. 打包时可以通过参数将所有资源直接打进exe内,不需要手动复制到dist目录,打包命令示例:
pyinstaller --add-data "freesansbold.ttf;." --add-data "*.png;." --add-data "*.wav;." main.py

如果是Mac/Linux系统,把命令里的分号;换成冒号:即可。

内容的提问来源于stack exchange,提问作者zChris128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:06:03