繁体   English   中英

Python - pygame 执行 exe 文件时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM