【发布时间】: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 复制到我的冻结程序的目录。像魅力一样工作。
-
很高兴听到这个消息。既然您自己找到了解决方案,您是否想将其写为答案并接受它,以便问题显示为已回答。
标签: python python-3.x pygame cx-freeze python-3.3