скомпилировать приложение Python с помощью setup.py - PullRequest
0 голосов
/ 20 февраля 2019

Я уже указывал на проблему экспорта моей pygame в исполняемый файл для распространения.У меня все еще есть проблема, что, когда я запускаю setup.py (я использую python версии 3.7.0) и собираю приложение, приложение напрямую падает, и я также не могу открыть исполняемый файл unix.Вот что я сделал до сих пор:

my setup.py:

from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need
# fine tuning.
build_exe_options = {"include_files" : ["pic.png", "sound.wav"]} # there are more files, i.e. all pics and audio files used

import sys
base = 'Win32GUI' if sys.platform=='win32' else None

executables = [
    Executable('pythonGame.py', base=base)
]

setup(name='MyGame',
      version = '1.0',
      description = 'blabla',
      options = dict(build_exe = build_exe_options),
      executables = executables)

, когда я запускаю setup.py для создания автономного приложения через:

python setup.py bdist_mac

Я получаю (много) сообщений об ошибках (см. Последние 3 строки терминального выхода ):

> error: /Library/Developer/CommandLineTools/usr/bin/install_name_tool:
> input file:
> build/GesaGame-1.0.app/Contents/MacOS/lib/pygame/pygame_icon.icns is
> not a Mach-O file @loader_path/.dylibs/libSDL-1.2.0.dylib error: can't
> copy '@loader_path/.dylibs/libSDL-1.2.0.dylib': doesn't exist or not a
> regular file

или выше

> error: /Library/Developer/CommandLineTools/usr/bin/install_name_tool:
> input file: build/GesaGame-1.0.app/Contents/MacOS/RunningCleats.wav is
> not a Mach-O file

Тем не менее, папка сборки была создана.При открытии я нахожу указанную программу, но она сразу падает после запуска.Что я здесь не так делаю?Я подозреваю, что это как-то связано с включенными файлами, но я не могу понять это.

1 Ответ

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

Поскольку я не знаю среду и у меня нет системы для тестирования, я могу только догадываться о потенциальных проблемах с вашим сценарием установки.

  1. cx_Freeze пока не поддерживает Python 3.7, в нем есть ошибка.Исправление существует, но еще не выпущено, однако вы можете применить его вручную, см. В чем может быть причина фатальной ошибки Python: initfsencoding: невозможно загрузить кодек файловой системы? и Сбой Cx_freezePython3.7.0 .Или вы можете откатиться до Python 3.6, если это вариант для вас.

  2. Динамически импортируемые пакеты, а также ресурсы DLL (.dll / .so / .dylib) часто делаютcx_Freeze не включается автоматически, вам нужно указать cx_Freeze, чтобы включить их, используя опции build_exe packages и include_files.Или они попадают в неправильное место (см. Следующий пункт).

  3. cx_Freeze версия 5.1.1 (текущая версия) замораживает пакеты в подкаталоге lib каталога сборки, тогда как основной сценарий и все зависимые файлы в каталогеосновной скрипт зависает прямо в директории сборки.Таким образом, относительный путь между любым файлом в пакете и каталогом основного скрипта или исполняемого файла изменяется в замороженном приложении (оно получает дополнительно lib/).Это означает, что если пакет попытается найти файл, расположенный в каталоге пакета, используя относительный путь из каталога основного приложения или наоборот, этот механизм не будет работать в замороженном приложении.Просмотрите трассировку стека сообщения об ошибке и для каждого файла, о котором пропало сообщение, проверьте, находится ли этот файл в каталоге сборки и находится ли замороженное приложение в нужном месте.Делайте ручные копии «отсутствующих» файлов в каталог сборки или в его подкаталог lib по мере необходимости, пока он не заработает.После того как вы определили правильное место для файла, вы можете использовать кортеж (source, destination) в качестве элемента в списке include_files, чтобы позволить cx_Freeze включить файл из source в конкретный destination в каталог сборки.См. Также FAQ Использование файлов данных в документации cx_Freeze.

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

...