Превращение моей программы на Python в настоящее приложение

Используя простые инструкции здесь https://www.metachris.com/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/

Теперь у меня есть файл приложения в dist. Однако, когда я открываю его, я получаю предупреждение, в котором ничего не говорится, кроме

Ошибка приложения, открытие консоли или завершение работы

Моя программа представляет собой файл Python, который импортирует множество модулей (opencv, tkinter и многие другие). Когда я запускаю его с консоли (python app.py), он отлично работает, открывает окно tkinter и т. Д.

Итак, во-первых, что может пойти не так? А также, как это на самом деле должно работать, включает ли приложение все opencv? Как модули Python включаются в подобное портативное приложение?

Спасибо за любую помощь / руководство.


person harry lakins    schedule 20.12.2016    source источник


Ответы (1)


Это больше, чем один вопрос!

Неважно.

  1. Когда вы создаете приложение с помощью интерпретатора Python, предоставленного Apple, вы получаете полуавтономное приложение.

Когда такое приложение запускается, оно запускает встроенный Python от Apple и использует его стандартную библиотеку.

Любой нестандартный модуль должен быть включен, но часто возникают проблемы.

  1. Когда вы устанавливаете свой Python с python.org и все дополнительные библиотеки в него, вы продолжаете создавать приложение с его помощью вместо сборки Python от Apple,

затем упаковывается весь интерпретатор вместе со стандартной библиотекой и всем, что вы импортировали.

Это часто работает как шарм, хотя позволяет создавать гораздо более крупные приложения. Но теперь, дни, это не такая уж катастрофа.

Как это работает? py2app, py2exe и аналогичные инструменты проверяют дерево кода Python на наличие операторов импорта.

Затем все найденные зависимости включаются в пакет.

Проблемной частью является динамический импорт, использующий функцию import () или reload (). Для таких модулей вы должны специально указать py2app упаковать их.

Иногда достаточно добавить к нему статический импорт в вашем приложении, например:

if 0:
    import site

OpenCV, хм, желаю удачи! Иногда он приносит живые кошмары, чтобы правильно связать свои пути с C ++, я надеюсь, что упаковка его в приложение вместе с Python сработает.

Я им не пользуюсь, поэтому не знаю, какие у вас проблемы.

Используйте /Applications/Utilities/Console.app, чтобы увидеть любые ошибки и обратные данные, отправленные на stderr / stdout после упаковки вашего приложения. Вы можете найти там полезную информацию.

Но я бы посоветовал вам скачать собственный интерпретатор Python и сделать полноценное автономное приложение. Это не имеет большого значения. Просто вызовите setup.py с ним вместо встроенного.

И поищите, что вам нужно добавить в свой setup.py, чтобы правильно упаковать OpenCV, если это является причиной вашей проблемы.

person Dalen    schedule 20.12.2016
comment
Это действительно полезно - спасибо. Вы правы, OpenCv - это кошмар. Я не вижу, чтобы это было легко. Когда вы говорите скачать собственный интерпретатор Python, что вы имеете в виду в данном случае? - person harry lakins; 21.12.2016
comment
Вы знаете, вы можете использовать любой интерпретатор Python, который вам нравится. Как и тот, что предоставлен Apple, CPython от python.org (это будет официальный дистрибутив Python), Jython и так далее. Вы можете собрать Python самостоятельно, внося изменения, которые вам нужны или нравятся. Кастом в этом смысле. Потому что это не предусмотрено ОС. Для вас это будет Python с python.org, ничего особенного. Просто мое неуклюжее выражение. Извините. Кошмар или нет, все можно сделать. Просто будьте достаточно упрямыми, и у вас все получится. : D - person Dalen; 21.12.2016
comment
Полностью согласен с вашим отношением, напоследок их;) точнее некуда. На этой ноте, через несколько часов - наконец удалось отследить несколько ошибок и найти модули отсутствующих модулей. Спасибо за совет в любом случае. - person harry lakins; 21.12.2016
comment
Дай угадаю. Рассматриваемый модуль динамически импортирует свои подмодули, поэтому py2app их не нашел. Еще один совет: если вы хотите распространять свое приложение и по-прежнему хотите полуавтономный пакет приложений, попробуйте его на другом компьютере, чтобы проверить, работает ли оно. Не принимайте ничего как должное. - person Dalen; 21.12.2016
comment
В значительной степени на месте - до py2app все работало отлично - затем пришлось вручную импортировать подмодуль. Собираюсь опробовать на другой машине как можно скорее. Ваше здоровье ! - person harry lakins; 21.12.2016