![](/img/trans.png)
[英]When executing a pyinstaller .exe file, pygame raises an error
[英]Python - pygame error when executing exe file
所以,我正在为自己做一个小项目,使用 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'
。
你需要双反斜杠:
从:
song = path + '\music\\' + selected_song
至:
song = path + '\\music\\' + selected_song
或者:
song = f"{path}\\{music}\\{selected_song}"
正如我提到的,评论将 pygame 更新到版本 2.0.0.dev6 或更高版本,另一个可能的问题是在制作.exe
pyinstaller 时将其放入dist
文件夹。 因此,如果您尚未将其从该文件夹中移出,则路径不正确并且无法找到文件,因此会出现错误。
当 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()
很重要,因为它使您的程序更加独立于平台,并自动处理连接路径的一些小问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.