如何编译python(使用cxFreeze)将当前工作目录作为可执行文件所在的目录?

时间:2015-06-19 16:41:00

标签: python pygame cx-freeze

我正在使用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'。它不起作用,我在没有解决方案的情况下工作了几个小时。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

您可以使用sys.argv。命令行参数的第一个元素始终是程序本身:

import os
import sys

CWDPATH = os.path.abspath(os.path.dirname(sys.argv[0]))

答案 1 :(得分:0)

尝试使用

os.path.abspath(__file__)

这将返回正在执行的脚本的绝对路径,因为您将音频文件放在同一路径中,访问它们不应该是一个问题