Python Can';t运行Pygame脚本,该脚本播放通过cx\U冻结编译的OGG文件
当我编译以下脚本时:Python Can';t运行Pygame脚本,该脚本播放通过cx\U冻结编译的OGG文件,python,python-3.x,pygame,cx-freeze,python-3.3,Python,Python 3.x,Pygame,Cx Freeze,Python 3.3,当我编译以下脚本时: # play.py import os, re import pygame.mixer pygame.mixer.init(11025) pygame.mixer.music.load('song.ogg') pygame.mixer.music.play(-1) os.system("PAUSE") 使用以下setup.py: 通过: python setup.py build 执行play.exe时会出现以下错误: Traceback (most recent
# play.py
import os, re
import pygame.mixer
pygame.mixer.init(11025)
pygame.mixer.music.load('song.ogg')
pygame.mixer.music.play(-1)
os.system("PAUSE")
使用以下setup.py:
通过:
python setup.py build
执行play.exe时会出现以下错误:
Traceback (most recent call last):
File "C:\Python33\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 2
7, in <module>
exec(code, m.__dict__)
File "play.py", line 7, in <module>
pygame.error: Couldn't open 'song.ogg'
回溯(最近一次呼叫最后一次):
文件“C:\Python33\lib\site packages\cx\u Freeze\initscripts\Console3.py”,第2行
7,在
执行官(代码、指令)
文件“play.py”,第7行,在
pygame.error:无法打开'song.ogg'
该脚本在编译之前运行良好,是的,我确实将song.ogg放在了exe的目录中。顺便说一下,song.ogg工作正常,我已经检查过了。有什么想法吗
另外,如果我把它改成song.wav,它可以正常工作,但是wav文件太大了,我无法使用。MP3也不能正常工作。通过我发现我需要将libogg.dll、libvorbis.dll和libvorbisfile.dll从Python33\Lib\site packages\pygame复制到我冻结的程序目录。计算机无法打开song.ogg文件,因为cx\u freeze在编译时没有包含歌曲。您应该尝试将歌曲文件包含到
setup.py
脚本中。使用下面这样的setup.py
脚本
from cx_Freeze import setup, Executable
exe=Executable(
script="play.py",
base="Win32Gui",
)
includefiles=[song.ogg]
includes=[]
excludes=[]
packages=[]
setup(
version = "0.0",
description = "Description",
author = "Name",
name = "Play",
options = {'build_exe': {'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [exe]
)
根据您的回答,我找到了适用于mac用户的此解决方案(假设您曾经安装pygame): 运行第3个命令后,如果收到消息“警告:sol_mixer-1.2.12已安装”。请将其替换为以下内容:
brew reinstall sdl_mixer --with-libvorbis
仅供参考:它可能需要一些插件来读取ogg文件,而这些文件不会被复制到exe目录中。如果是Python模块,您可以告诉cx_Freeze它需要包含它()。如果它是一个DLL,你可以将它指定为一个要复制的文件。我已经尝试过了,在互联网上搜索建议我应该将libvorbis.DLL复制到exe的目录中,很遗憾,这似乎不起作用。我已经试着联系有同样问题的人,他们说他们找不到解决方案,不得不换成另一种语言(比如LUA)。这是一个棘手的问题,pygame应该自己支持OGG,即使我
导入pygame
它也不起作用。切换到一种完全不同的语言似乎有些过头了。一定有办法解决这个问题,但恐怕我不知道是什么。尝试使用查看(未冻结)程序加载ogg文件时加载的额外dll。通过Process Explorer,我可以找到需要将libogg.dll、libvorbis.dll和libvorbisfile.dll从Python33\Lib\site packages\pygame复制到冻结程序的目录中。很有魅力,很高兴听到。既然你自己已经找到了解决方案,你想把它写下来作为一个答案并接受它,这样问题就会显示为已回答。实际上我已经把声音文件放在冻结程序的目录中了,我在问题上说过了。无论如何,问题已经解决了。
brew install libogg
brew install libvorbis
brew install sdl_mixer --with-libvorbis
brew reinstall sdl_mixer --with-libvorbis