При запуске файла pyinstaller .exe pygame выдает ошибку

Я делаю небольшую игру, используя в основном Tkinter, но для звуков я использовал pygame.

Я пытался создать файл .exe, но при выполнении выдает ошибку.

pygame.init()

self.sound_player_shot = pygame.mixer.Sound('sounds/shot.wav')
self.sound_gameover = pygame.mixer.Sound('sounds/gameover.wav')

pygame.mixer.music.load('sounds/soundtrack.mp3')
pygame.mixer.music.play(-1)

Это единственный код из pygame, который я использую, и после создания файла .exe и копирования всех папок с данными в папку dist при выполнении этой ошибки возникает:

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1883, in __call__
  File "space_shooter.py", line 1292, in start_game
  File "space_shooter.py", line 115, in __init__
pygame.error

Папка sounds находится в той же папке, что и space_shooter.py, и все мои другие небольшие проекты работали просто путем копирования всех папок с данными в dist.

Спасибо!


person João Gabriel Piraine Bandeira    schedule 18.08.2020    source источник


Ответы (2)


Вы проверили, действительно ли путь, указанный вами для загрузки звуковых файлов, соответствует пути, который вы собираетесь использовать? Возможным вариантом может быть print(path) и запуск exe из CMD, чтобы проверить его вручную.

Трудно дать более конкретный ответ, не имея более конкретного сообщения об ошибке и зная, в какой строке на самом деле возникает ошибка.

Кроме того, я предлагаю вам использовать модуль os для получения и установки путей:

import os
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'relative/path/to/file/you/want.mp3')

PS: вы можете подумать о рефакторинге вашего файла space_shooter.py, 1292 строки в одном файле, на мой взгляд, звучат немного долго.

person Cribber    schedule 19.08.2020

Включение данных в программы, скомпилированные с помощью pyinstaller, можно выполнить во время компиляции. Там вы можете связать путь к фактическому файлу на вашем компьютере (относительный или абсолютный) с псевдонимом пути, который вы используете в самой программе.

Документация довольно хорошо описывает этот процесс.

person Mathias Lohne    schedule 19.08.2020