#python #tkinter #pygame #exe #pyinstaller
#python #tkinter #pygame #exe #pyinstaller
Вопрос:
Я создаю небольшую игру, используя в основном 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
.
Спасибо!
Ответ №1:
Вы проверили, действительно ли путь, указанный вами для загрузки звуковых файлов, является тем путем, который вы собираетесь использовать? Одним из вариантов может быть 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 строки в одном файле, на мой взгляд, звучит немного длинновато.
Ответ №2:
Включение данных с помощью программ, скомпилированных pyinstaller, может быть выполнено во время компиляции. Там вы можете связать путь к реальному файлу на вашем компьютере (относительный или абсолютный) с псевдонимом path, который вы используете в самой программе.
Документация довольно хорошо описывает этот процесс.