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

如何使用PyInstaller将pygame游戏的音效文件打包进exe可执行文件

PyInstaller打包Pygame音效进单EXE解决方案

核心问题

你的配置存在两个不匹配的问题,导致无法找到音效文件:

  • 单EXE模式下PyInstaller运行时会把所有打包的资源解压到系统临时目录,对应路径存放在sys._MEIPASS属性中,你之前取的sys.executable目录是EXE存放的位置,不是资源实际解压的位置
  • .spec配置里你把音效文件打包到了根目录下的Sounds文件夹,但代码里读取的是Assets/Sounds路径,两者不匹配

具体修改步骤

步骤1:修正运行路径获取逻辑

修改main.py中的路径判断代码,打包后优先读取临时资源目录:

if getattr(sys, "frozen", False):
    # 打包运行时取临时解压目录路径
    EXE_LOCATION = sys._MEIPASS
else:
    # 开发阶段取脚本所在目录
    EXE_LOCATION = os.path.dirname(os.path.realpath(__file__))

pygame.init()
sound_effects = SoundEffects(EXE_LOCATION)

步骤2:统一资源路径(二选一即可)

方案A:修改.spec配置适配现有代码

把.spec文件中的added_files修改为如下内容,让打包后的资源路径和代码读取路径匹配:

added_files = [('C:\\Users\\joshu\\CursorHunters\\Assets\\Sounds\\*.wav', 'Assets\\Sounds')]

该方案不需要修改sound_effects.py的代码。

方案B:修改音效加载代码适配现有.spec配置

把sound_effects.py中所有音效加载路径的Assets/Sounds替换为Sounds,比如:

# 原来的写法
self.explosion1 = pygame.mixer.Sound(os.path.join(EXE_LOCATION, "Assets", "Sounds", "explosion1.wav"))
# 修改后的写法
self.explosion1 = pygame.mixer.Sound(os.path.join(EXE_LOCATION, "Sounds", "explosion1.wav"))

该方案不需要修改.spec文件。

步骤3:重新打包

打包时必须指定修改后的.spec文件作为参数,不要直接打包main.py:

pyinstaller "Cursor Hunters.spec"

修改完成后生成的EXE就已经包含了所有音效文件,运行时不需要额外携带Assets文件夹。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:02