我正在使用mac,我正在用python和pygame编写一个游戏,需要一些声音文件存在于源代码所在的同一目录中。当我通过python解释器运行源代码时,它是有效的。当我尝试运行由cxFreeze编译的可执行文件时,它不起作用。我在互联网上搜索解决方案,但一无所获。
当解释python时,cwd将是源代码所在的目录。当使用cxFreeze编译并通过终端运行时,cwd将更改为我的主目录。这会让事情变得混乱,因为我想让这个游戏变得便携,我需要将声音文件放在与可执行文件相同的文件夹中。
import os
# Load the sound files.
CWDPATH = os.getcwd()
BEEP1 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep1.wav'))
BEEP2 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep2.wav'))
BEEP3 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep3.wav'))
BEEP4 = pygame.mixer.Sound(os.path.join(CWDPATH, 'beep4.wav'))
这部分代码是造成问题的原因。它在解释时运行顺畅,但在使用cxFreeze编译时不起作用,因为os.getcwd()计算到主目录。我也尝试在cxFreeze脚本中的'packages'选项中加入'os'。它不起作用,我在没有解决方案的情况下工作了几个小时。我怎样才能让它发挥作用?
答案 0 :(得分:1)
您可以使用sys.argv
。命令行参数的第一个元素始终是程序本身:
import os
import sys
CWDPATH = os.path.abspath(os.path.dirname(sys.argv[0]))
答案 1 :(得分:0)
尝试使用
os.path.abspath(__file__)
这将返回正在执行的脚本的绝对路径,因为您将音频文件放在同一路径中,访问它们不应该是一个问题