因此,我正在为自己开发一个小项目,使用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_song
和song + '.mp3'
的名称。
答案 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()
很重要,因为它可以使您的程序与平台更加独立,并可以自动处理路径的一些小问题。