Python-执行exe文件时出现pygame错误

时间:2020-07-16 14:08:37

标签: python tkinter pygame pyinstaller

因此,我正在为自己开发一个小项目,使用pygame和tkinter来构建mp3播放器。 使用Visual Studio运行程序时一切正常,但是当我使用pyinstaller将程序转换为.exe文件并尝试运行时,出现以下内容:
pygame.mixer.load(song)
pygame.error
Failed to execute script

我已经尝试了所有方法,但总是告诉我相同的情况。在这里,您可以看到我如何称呼这首歌:

pygame.init()
pygame.mixer.init()

song = path + '\music\\' + selected_song
pygame.mixer.music.load(song)

处于path + '\music\\',即歌曲所在的目录。 slected_songsong + '.mp3'的名称。

3 个答案:

答案 0 :(得分:2)

您需要双反斜杠:

发件人:

song = path + '\music\\' + selected_song

收件人:

song = path + '\\music\\' + selected_song

或者:

song = f"{path}\\{music}\\{selected_song}"

答案 1 :(得分:1)

正如我提到的那样,将pygame注释为2.0.0.dev6或更高版本,另外一个可能的问题是将.exe pyinstaller放置在dist文件夹中时。因此,如果您尚未将其从该文件夹中移出,则路径不正确并且无法找到文件,因此会出现错误。

答案 2 :(得分:0)

当python程序与pyInstaller,CXFreeze等打包在一起时,执行的第一部分是将所有内容解压缩到一个临时位置。这样,可执行文件也可能无法从同一目录运行。

因此,重要的是python程序本身确定当前的工作目录并找到其资源文件所在的位置。图像,声音等将不再位于“ ./music”或“ ./assets/images”,可能更像是“ /tmp/cxunpack.125423/assets/sounds /”。

该脚本需要确定其运行位置:

import sys
import os.path

if getattr(sys, 'frozen', False):  # Is it CXFreeze frozen
    EXE_LOCATION = os.path.dirname( sys.executable ) 
else:
    EXE_LOCATION = os.path.dirname( os.path.realpath( __file__ ) ) 

然后然后os.path.join()结合使用,以确定所需文件的正确路径:

song_filename = os.path.join( EXE_LOCATION, "music", "first.mp3" )
pygame.mixer.music.load( song_filename )

使用os.path.join()很重要,因为它可以使您的程序与平台更加独立,并可以自动处理路径的一些小问题。

相关问题