2015-06-19 2 views
0

Я работаю над маком, и я пишу игру на питоне и pygame, для которой нужны звуковые файлы, которые будут присутствовать в том же каталоге, где находится исходный код. Дело в том, что это работает, когда я запускаю исходный код через интерпретатор python. Это не работает, когда я пытаюсь запустить исполняемый файл, который был скомпилирован cxFreeze. Я искал в Интернете решения, но ничего не нашел.Как мне скомпилировать 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. Это не работает, и я работал в это время без решения. Как я могу заставить это работать?

+0

При запуске из терминала, вы сначала перейдите в соответствующую папку и запустите файл, или же вы вводите более полный путь ('cd myprograms',' myprogram.exe' или 'myprograms/myprogram.exe')? Если вы просто хотите указать звуковые файлы в одной и той же папке, вам не нужно указывать путь; просто используйте 'pygame.mixer.Sound ('beep1.wav')'. – TigerhawkT3

ответ

1

Вы может использовать sys.argv. Первый элемент из аргументов командной строки всегда сама программа:

import os 
import sys 

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

спасибо, что это сработало для меня! –

0

Попробуйте использовать

os.path.abspath(__file__) 

заносить бы абсолютный путь к выполняемому сценарию, так как у вас есть звуковые файлы, в том же пути, это не должно быть проблемой для доступа к ним