无法运行播放通过 cx_Freeze 编译的 OGG 文件的 Pygame 脚本
Posted
技术标签:
【中文标题】无法运行播放通过 cx_Freeze 编译的 OGG 文件的 Pygame 脚本【英文标题】:Can't run Pygame script that plays a OGG file compiled through cx_Freeze 【发布时间】:2013-04-02 04:11:34 【问题描述】:当我编译以下脚本时:
# 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:
from cx_Freeze import setup, Executable
exe = Executable(
script="play.py",
)
setup(
executables = [exe]
)
通过:
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'
脚本在编译之前运行良好,是的,我确实将 song.ogg 放在了 exe 的目录中。顺便说一下 song.ogg 工作正常,我已经检查过了。有什么想法吗?
附:如果我将其更改为 song.wav ,它可以正常工作,但 WAV 文件对我来说太大而无法使用。 MP3 也不能正常工作。
【问题讨论】:
它可能需要一些插件来读取 ogg 文件,并且不会被复制到 exe 目录。如果它是 Python 模块,您可以告诉 cx_Freeze 它需要包含它 (docs)。如果是 DLL,可以指定为要复制的文件。 我已经尝试过了,在互联网上搜索建议我应该将 libvorbis.dll 复制到 exe 的目录,遗憾的是这似乎不起作用。我已经尝试联系有同样问题的人,他们说他们无法找到解决方案,不得不切换到另一种语言(如 LUA)。这是一个尴尬的问题,pygame应该是自己支持OGG的,即使我import pygame
也不行。
切换到完全不同的语言似乎有点矫枉过正。一定有办法解决这个问题,但恐怕我不知道它是什么。尝试使用Process Explorer 查看当您的(解冻的)程序加载 ogg 文件时加载了哪些额外的 DLL。
通过 Process Explorer 我发现我需要将 libogg.dll、libvorbis.dll 和 libvorbisfile.dll 从 Python33\Lib\site-packages\pygame 复制到我的冻结程序的目录。像魅力一样工作。
很高兴听到这个消息。既然您自己找到了解决方案,您是否想将其写为答案并接受它,以便问题显示为已回答。
【参考方案1】:
通过Process Explorer,我发现我需要从Python33\Lib\site-packages\pygame 到我的冻结程序目录。
【讨论】:
【参考方案2】:计算机无法打开 song.ogg 文件,因为 cx_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]
)
【讨论】:
其实我已经把声音文件放在了冻结程序的目录下,我在问题上说的。反正问题已经解决了。【参考方案3】:扩展您的答案,我为 mac 用户找到了此解决方案(假设您使用 Homebrew 安装 pygame):
brew install libogg
brew install libvorbis
brew install sdl_mixer --with-libvorbis
如果您收到“警告:sol_mixer-1.2.12 已安装”的消息。运行第三条命令后,将其替换为以下内容:
brew reinstall sdl_mixer --with-libvorbis
供参考:can't open sound files using pygame on a mac
【讨论】:
以上是关于无法运行播放通过 cx_Freeze 编译的 OGG 文件的 Pygame 脚本的主要内容,如果未能解决你的问题,请参考以下文章
运行使用 cx_freeze 编译的 exe 时如何查看错误消息?
开放图形协议 - og:movie 与 youtube 链接