Использование python в части приложения Cocoa. Как мне упаковать .py с приложением?


person leecbaker    schedule 05.04.2011    source источник


Ответы (1)


Вы можете использовать py2app для компиляции NSBundle, который может быть загружен во время выполнения (вы можете добавить этот загружаемый пакет в папку PlugIns/ вашего пакета приложений). Однако, несмотря на то, что поначалу довольно легко начать работать, в PyObjC или py2app, похоже, есть ошибка, которая приводит к значительным утечкам памяти в зависимости от API вашего плагина (см. http://sourceforge.net/tracker/?func=detail&aid=1982104&group_id=14534&atid=114534).

Более сложный, но безопасный подход — использовать ссылку на Python.framework. Затем вы можете хранить файлы .py в каталоге Resources/ набора приложений и загружать их через стандартный API встраивания CPython.

Не включайте только файлы .pyc. Формат pyc — это деталь реализации, на которую не следует полагаться в будущих версиях Python.

person Barry Wark    schedule 05.04.2011
comment
Я уже использую метод Python.framework — я просто еще не обнаружил, как найти путь к ним, а именно [[NSBundle mainBundle] pathForResource:ofType:]. Спасибо за дополнительные подробности. - person leecbaker; 09.04.2011
comment
@Barry, если вы статически связываетесь с Python.framework для создания собственного интерпретатора в своем приложении, а используемая в настоящее время версия фреймворка работает с файлами *.pyc, не будет ли ваш пользовательский интерпретатор «всегда работать» с этими pyc-файлы? (Поскольку совместимость скомпилирована со статической библиотекой), я спрашиваю, потому что я надеюсь запутать/защитить .py, который я отправляю с коммерческим продуктом, и частью этой стратегии было устранение файлов .py. Спасибо за любую информацию, которую вы можете предоставить. - person Dave; 23.04.2016
comment
@Dave Да, вы, вероятно, правы насчет файлов .pyc (хотя это выходит за рамки моих недавних подробностей о CPython). Однако файлы .pyc практически не запутываются в смысле защиты коммерческой тайны. Возможно, вам придется поторопиться с пользовательским импортером и действительно запутанным (зашифрованным?) форматом хранения. - person Barry Wark; 25.04.2016