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

How do I get compiled python(with cxFreeze) to get the current working directory as the directory where the executable is in?

我正在开发 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() 评估到主目录。我也尝试将 'os' 放入 cxFreeze 脚本的 'packages' 选项中。它不起作用,我在没有解决方案的情况下工作了这个时间。我怎样才能让它工作?

尝试使用

os.path.abspath(__file__)

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

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

import os
import sys

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