Pyinstaller с pygame

Я несколько раз пытался использовать PyInstaller для объединения моих программ Python2, но он никогда не работает с модулем Pygame. Я видел много других вопросов по этой теме, но я не нашел полезных ответов.

Кто-нибудь знает это решение?

Я пытаюсь сделать это на Ubuntu 14.10.

-Редактировать-

Чтобы быть более конкретным:

«никогда не работает» означает, что когда я запускаю PyInstaller и создаю приложение, он, похоже, работает и делает приложение. Когда вы пытаетесь запустить приложение, ничего не происходит.

2 Solutions collect form web for “Pyinstaller с pygame”

Я предлагаю попробовать другую программу, такую ​​как py2exe, для объединения программ python, в которых у меня в настоящее время не было никаких проблем. Их много хороших видеороликов youtube в процессе, который основан на CMD. У меня были некоторые личные проблемы с использованием pyinstaller и думаю, что это просто глючит, если ваша программа не будет испорчена.

Я много искал в документе PyInstaller, чтобы заставить мою собственную игру работать. Я мало что знаю о Ubuntu, но я все работаю в Windows, и это должно быть очень похоже. Ключевым моментом здесь является получение PyInstaller для упаковки ваших ресурсов (изображений, звуков и т. Д.) С помощью кода Python. Лучшая дистрибуция – использовать консольную команду pyinstaller --onefile main.py в вашем каталоге, чтобы получить один исполняемый файл. PyInstaller создаст папку dist и файл main.spec. Файл .spec содержит все параметры, которые PyInstaller использует для создания вашего исполняемого файла. Для исполняемого файла --onefile он должен выглядеть так:

 # -*- mode: python -*- block_cipher = None a = Analysis(['..\\src\\bitmessagemain.py'], pathex=['C:\\example\\pyinstaller\\bitmessagemain'], binaries=None, datas=None, hiddenimports=[], hookspath=None, runtime_hooks=None, excludes=None, win_no_prefer_redirects=None, win_private_assemblies=None, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, a.binaries, 'BINARY')], name='bitmessagemain', debug=False, strip=None, upx=True, console=False , icon='src\\images\\can-icon.ico') 

Обязательно запустите PyInstaller один раз, чтобы создать файл .spec, даже если полученный исполняемый файл не работает.

a – объект, который собирает материал для ввода вашего исполняемого файла. Вы хотите добавить свои папки ressource в datas= part. Для этого создайте список:

 added_files = [ ( 'data', 'data' ), ( 'sfx/*.mp3', 'sfx' ), ( 'src/README.txt', '.' ) ] 

Первая строка в этом примере добавляет все содержимое данных папки, расположенных в той же папке, что и main.spec и main.py и добавляет ее в папку data внутри исполняемого файла. Вы хотите, чтобы ваши пути работали, поэтому две записи кортежа обычно должны быть одинаковыми. Вторая строка добавляет все файлы .mp3 из sfx в папку sfx внутри exectuable и так далее. Добавьте все свои ресурсы в этот список и будьте осторожны, чтобы ваши пути были действительными.

Затем вы можете изменить свой .spec (который является стандартным кодом python):

 # -*- mode: python -*- block_cipher = None added_files = [ #Any variable name works ( 'data', 'data' ), ( 'sfx/*.mp3', 'sfx' ), ( 'src/README.txt', '.' ) ] a = Analysis(['..\\src\\bitmessagemain.py'], pathex=['C:\\example\\pyinstaller\\bitmessagemain'], binaries=None, datas=added_files, #Dont forget to change this line! hiddenimports=[], hookspath=None, runtime_hooks=None, excludes=None, win_no_prefer_redirects=None, win_private_assemblies=None, cipher=block_cipher) ... 

Последним очень важным шагом является добавление этих двух строк кода в начале вашего main.py:

 if getattr(sys, 'frozen', False): os.chdir(sys._MEIPASS) 

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

Наконец, я бы посоветовал вам использовать функцию os.path.join для всех ваших путей в вашем коде. Это сделает пути переносимыми на другие платформы.

На стороне примечания, если вы используете опцию –oneir, сделайте то же самое, но добавьте две строки:

 if getattr(sys, 'frozen', False): os.chdir(os.path.dirname(sys.executable)) 

Если вы это сделаете, и ваш исполняемый файл сразу же закрывается при двойном щелчке (в Windows), вам необходимо изменить console=False на console=True а затем введите cmd / k COMPLETEPATHTOYOUREXECUTABLE в поле поиска в StartMenu. Это запустит ваш .exe и откройте консоль, чтобы вы могли видеть журнал ошибок. Вероятно, вы попросите какой-то файл, который вы забыли включить, таким образом вы можете добавить его в .spec, перестройте свой .exe с помощью pyinstaller main.spec и повторите попытку.

Надеюсь, это тоже поможет другим, информация в Интернете довольно неясна для PyInstaller + Pygame.

  • Почему исполняемый файл python открывает новый экземпляр окна, когда функция с помощью многопроцессорного модуля вызывается в окнах
  • FileNotFoundError: Нет такого файла или каталога: .constants.json
  • PyInstaller сгенерирован exe не работает, в проекте используется ReportLab
  • Не удается найти файл конфигурации PRAW при упаковке приложения с помощью py2app
  • Проблемы с Pyinstaller с подушкой
  • Включение каталога с помощью Pyinstaller
  • Pyinstaller не корректирует импорт pycripto ... иногда
  • cx_freeze, как включить сторонние модули, ImportError: нет модуля с именем progressbar
  • Python - лучший язык программирования в мире.