Pygame转换为.exe后无法打开声音文件

时间:2020-06-08 20:51:30

标签: python python-3.x pygame pyinstaller

所以我有一个用pygame编写的游戏。效果很好。我喜欢它。我想与朋友分享,所以我尝试将其编译为exe。这是事情潜水的地方。

这是我的代码示例:

import os, sys, csv
import pygame
import random
import subprocess

pygame.mixer.init(22050, -16, 2, 256)
pygame.init()

clock = pygame.time.Clock()
width   = 1080
height  = 1080
keys    = pygame.key.get_pressed()
size    = (width, height)
myfont  = pygame.font.Font('8Bit.ttf', 30)
screen  = pygame.display.set_mode([width,height],pygame.FULLSCREEN) 
pygame.display.set_caption('My Game')

print(os.getcwd())
image   = pygame.image.load(os.path.join('image.png'))
engine  = pygame.mixer.Sound(os.path.join('engine.ogg'))
bang    = pygame.mixer.Sound('bang.ogg')

我所有的游戏文件都与游戏位于同一根目录中。再次,当我从终端运行python代码时,它运行良好。

我使用pyinstaller进行了转换,并将其安装到目录中,所有游戏文件均导入到该目录中。

文件位于print()调用所打印的目录中,而我得到的错误是:

    pygame.error: Unable to open file 'engine.ogg'

我尝试过包括并删除os.path.join()调用,甚至试图只键入整个路径。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我将它与pyinstaller一起使用,效果很好:

ROOT_DIR = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))

您需要在项目的根文件夹中的任何.py文件中定义此变量。无论项目是否编译,现在都将成为项目目录的路径。

然后您将像这样使用它:

image = pygame.image.load(os.path.join(ROOT_DIR, 'image.png'))