Проблема создания исполняемого Pygame - pyinstaller - PullRequest
0 голосов
/ 05 февраля 2019

Я недавно начал работу над игрой для моей дочери, которая поможет в изучении слов.Я иду дальше и решил создать исполняемый файл (я сделаю это со многими другими играми).Эта игра несколько отличается из-за звуков и музыки.Я перепробовал все, что мог придумать, искал все, что мог придумать и т. Д. Это ошибка CMD сообщает, ошибка относится к звуковому файлу.Я попытался добавить файл напрямую с помощью --add-data Я попытался поместить исполняемый файл в тот же каталог, что и звуковой файл (в этом нет необходимости, так как он должен связывать его уже).Сценарий работает абсолютно нормально в противном случае (из CMD и т. Д.) ЛЮБЫЕ ИДЕИ ??

C:\Users\launc\Desktop\Coding\Games\g_sight_words\dist>sight_words.exe pygame 1.9.4 Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "sight_words.py", line 5, in <module> File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "c:\users\launc\appdata\local\programs\python\python37-32\lib\site- packages\PyInstaller\loader\pyimod03_importers.py", line 627, in exec_module exec(bytecode, module.__dict__) File "settings.py", line 21, in <module> pygame.error: Unable to open file 'the.wav' [9892] Failed to execute script sight_words

1 Ответ

0 голосов
/ 06 февраля 2019

Как выглядит ваш файл .spec?Вот документы PyInstaller о добавлении файлов данных .

В основном вам нужно добавить что-то вроде:

a = Analysis(...
 datas=[ ('the.wav', '.') ],
 ...
 )

Это поместит ваш звуковой файл ('the.wav') в корневой каталог вашего скомпилированного приложения (второй аргумент '.')

Затем в вашем приложении вы можете проверить, работаете ли вы из исходного кода или как скомпилированный исполняемый файл.Я использую вспомогательную функцию:

def my_path(path_name):
    """Return the appropriate path for data files based on execution context"""
    if getattr( sys, 'frozen', False ):
        # running in a bundle
        return(os.path.join(sys._MEIPASS, path_name))
    else:
        # running live
        return path_name

Итак, код вашего приложения будет выглядеть примерно так:

the_sound = pygame.mixer.Sound(my_path("the.wav"))
...