Почему файл .exe, созданный pyinstaller, не работает? - PullRequest
1 голос
/ 03 апреля 2019

Я создал простую игру "flappy bird" с pygame, а затем попытался преобразовать скрипт .py с pyinstaller в .exe с pyinstaller flappybird.py. Но когда я пытаюсь выполнить .exe, командная строка и окно игры открываются примерно на 2 секунды, не отображая никаких ошибок и ничего не показывая из игры, что прекрасно работает, когда выполняется в виде сценария python через flappybird.py в командной строке , Я использую новейшую версию pyinstaller, и у меня нет никакой идеи, почему это не работает, так как это работало как шарм с другими играми, которые я написал ранее.

Спасибо за вашу помощь; D

1 Ответ

0 голосов
/ 03 апреля 2019

Попробуйте открыть командную строку и перейти к папке, в которой вы ее установили. Затем запустите его через flappybird.exe (или как вы его назвали) и убедитесь, что ошибка не отображается в вашем терминале. Похоже, что он попадает в ошибку, которая вылетает, но немедленно закрывается, прежде чем вы сможете прочитать ошибку. Поэтому запуск его из терминала позволяет ему иметь окно, которое не исчезает, и оно может напечатать там сообщение об ошибке, если оно есть (хотя это может сообщать вам только об ошибках во время запуска, я не уверен). Обычно я предпочитаю использовать графический интерфейс с обновленным разделом текста, и я могу использовать его для «печати» состояний моих скомпилированных программ в этом окне, возможно, вы могли бы использовать подобную технику? Желаем удачи!

обновление

С вашим кодом я смог скомпилировать и запустить его без проблем (используя cx-freeze). Мой файл setup.py был:

import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
additional_modules = []

build_exe_options = {"includes": additional_modules,
                     "packages": ["pygame", "random", "sys", "pyglet"],
                     "excludes": ['tkinter'],
                     "include_files": ['icon.ico', 'res']}

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(name="Flappy Bird",
      version="1.0",
      description="Flap around",
      options={"build_exe": build_exe_options},
      executables=[Executable(script="flappybird.py", base=base)])

Вы можете заставить свой исполняемый файл работать, если вы

  • pip install cx_freeze

  • скопировать / вставить приведенный выше код в файл setup.py (находится прямо рядом с вашим скриптом)

  • открыть папку в командной строке и запустить python setup.py build

Возможно, вам придется снова запустить команду, если она не удалась (что-то связанное с попыткой чтения из папки, которую она еще не создала).

  • Теперь у вас есть новая папка build, и ваш исполняемый файл находится внутри нее!
...