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

使用py2app打包pygame项目运行时报文件找不到错误如何解决

问题根源

你在开发环境能正常运行是因为Sublime执行代码时的工作目录就是你的项目根目录,直接写文件名的相对路径可以匹配到本地文件。但py2app打包后的.app程序运行时,所有资源文件会被放到Contents/Resources目录下,而可执行文件在Contents/MacOS目录下,默认工作目录和资源目录不一致,直接用相对路径就会触发文件找不到的错误。

修复步骤

  • 第一步:在你的代码中添加动态获取资源路径的函数
    在MainMenu.py以及主游戏模块的顶部加入以下代码:
    import sys
    import os
    
    def get_resource_path(relative_path):
        # 判断是否为打包后的运行环境
        if getattr(sys, 'frozen', False):
            # 打包后资源文件存放在 Contents/Resources 目录
            base_path = os.path.abspath(os.path.join(os.path.dirname(sys.executable), '..', 'Resources'))
        else:
            # 开发环境使用当前工作目录
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
    
  • 第二步:修改所有资源加载的代码
    所有加载图片、音效、字体的地方,都要调用上面的函数拼接路径,比如:
    原来的写法:
    screen_home = pygame.image.load('HomeScreen.png')
    
    修改为:
    screen_home = pygame.image.load(get_resource_path('HomeScreen.png'))
    
    注意带文件夹的资源也要保持相对路径写法,比如:
    shoot_img = pygame.image.load(get_resource_path('MySprite/Shoot/1.png'))
    
  • 第三步:调整打包命令(可选但必要,如果你要发给朋友)
    你之前用的-A参数是别名模式,生成的app仅能在你的本地电脑运行,依赖你本地的Python环境和项目文件。如果要生成可分享的独立app,打包时去掉-A参数即可:
    rm -rf build dist
    python3 setup.py py2app
    

排查小技巧

如果修改后依然报错,可以右键点击app选择「显示包内容」,进入Contents/Resources目录,确认对应的资源文件是否存在:

  • 如果文件不存在,检查setup.py中DATA_FILES的路径是否正确,注意macOS文件系统大小写敏感,路径大小写要和实际文件完全一致
  • 如果文件存在,检查代码中调用get_resource_path时传入的相对路径是否和DATA_FILES里写的路径完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:00