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

Пиша приложение Cocoa, което използва Python за извършване на някои изчисления и манипулиране на данни. Имам клас Objective-C, който използвам за изпълнение на скриптовете на Python чрез API на Python. В момента мога да извикам Python без проблем с помощта на API и свързване към Python.framework.

Сега гледам как да пакетирам кода заедно. Разбирам, че кодът на Python ще бъде включен като част от пакета .app, вероятно в папката Resources. Срещал съм py2app, който се обсъжда на много места, но изглежда, че се използва само ако приложението ви е написано изцяло на Python; Не мисля, че това е решението на моя проблем. Как правилно да пакетирам кода с моето приложение? Мога ли да изпратя .pyc вместо .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
@Дейв да, вероятно си прав за .pyc файловете (въпреки че това е извън скорошния ми спомен за подробности за CPython). Въпреки това, .pyc файловете едва ли са объркани в смисъл на защита на търговски тайни. Може да се наложи да станете по-изящни с персонализиран импортер и наистина объркан (криптиран?) формат за съхранение. - person Barry Wark; 25.04.2016