Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t运行Pygame脚本,该脚本播放通过cx\U冻结编译的OGG文件_Python_Python 3.x_Pygame_Cx Freeze_Python 3.3 - Fatal编程技术网

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