Вставлення Python в додаток для iPhone


94

Так це нове тисячоліття; Apple помахала їм рукою; Зараз законно включати інтерпретатора Python у додаток iPhone (App Store).

Як можна робити це? Вся існуюча дискусія (не дивно) стосується тюремного вбивства. (Питання старіше: чи можу я писати рідні програми для iPhone за допомогою Python )

Моя мета тут не написати додаток PyObjC, а написати звичайний додаток ObjC, який запускає Python як вбудовану бібліотеку. Потім код Python передзвонить до рідного коду какао. Це шаблон "логіки управління - код Python".

Чи є посібник із вбудованого Python в XCode, щоб мій додаток iPhone міг пов’язати його? Переважно зрізаний Python, оскільки мені не потрібно 90% стандартної бібліотеки.

Я, мабуть, можу розібратися в API інтерфейсу і розширення Python; Я робив це на MacOS. Але тільки за допомогою компіляторів командного рядка, а не XCode.


Відповіді:


30

Насправді не важливо, як ви будуєте Python - наприклад, вам не потрібно будувати його в Xcode - але важливо, що це продукт цієї збірки.

А саме вам знадобиться створити щось на зразок libPython.a, яке може статично пов’язано з вашою програмою. Щойно у вас є .a, його можна додати до проекту Xcode для вашої програми (програм), і звідти він буде пов’язаний і підписаний так само, як і решта вашої програми.

IIRC (минуло певний час, коли я створив python вручну), нестандартний python створить libPython.a (і купу інших бібліотек), якщо ви правильно налаштували його.

Звичайно, ваш другий випуск буде крос-компіляцією пітона для ARM з вашого 86 поля. Python - це проект, заснований на автоконусі, і autoconf - це біль в задній частині для перехресної компіляції.

Як ви правильно констатуєте, вирішальне значення буде зробити його невеликим.

Не дивно, що ви не перша людина, яка хотіла це зробити, але не для iOS. Python був витіснений на пристрої набагато менш працездатні, ніж на тих, на яких працює iOS. Я знайшов нитку з купою посилань, коли гугл про; це може бути корисним .

Також ви можете приєднатись до списку pyobjc-dev . Хоча ви не орієнтуєтесь на додаток на основі PyObjC (що, до речі, хороша ідея - PyObjC має довгий шлях, перш ніж це стане дружньою для iOS), спільнота PyObjC обговорювала це, і Рональд, будь-хто, є, мабуть, найбільш обізнаною людиною у цій конкретній області. Зауважте, що PyObjC доведеться вирішити вбудовану проблему Python в iOS перед перенесенням PyObjC. Їх обов'язковою умовою є як би ваша вимога.


Дякуємо за посилання. (Я використовував Python на Sharp Zaurus для значно більш ранньої версії цього проекту, але це був Python 1.6, і хтось ще робив упаковку ...)
Андрій Плоткін,

4
Я колись переніс Python на PSP Sony; можливо, якась історія Subversion допоможе вам. Не зовсім відповідь, хоча. тут: python-psp.net/trac
fraca7

22

Я поставив дуже грубий сценарій на github, який отримує і створює python2.6.5 для iPhone та симулятора.

http://github.com/cobbal/python-for-iphone

В роботі

Дещо гнітюче оновлення майже через 2 роки: (скопійовано з README на github)

Цей проект ніколи насправді не працював пітоном на iPhone на мій задоволення, і я не можу рекомендувати використовувати його для будь-якого серйозного проекту на цьому етапі.

Найбільш помітною є підтримка pyobjc (яка виявляється набагато складнішою для порту на iPhone, оскільки вона покладається на більш конкретний код платформи)

Також не вистачає можливості статичної компіляції модулів (всі зараз побудовані як диліби, які працюють на розвиток, але, наскільки мені відомо, це не буде дозволено в App Store)

На даний момент цей проект здебільшого покликаний стати відправною точкою для того, хто розумніший за мене, хто хоче і може вирішити вищезазначені проблеми.

Я дуже хотів би, щоб було практично повністю писати програми на Python, але на даний момент це здається неможливим.


Дякую! У мене не буде можливості подивитися на це кілька днів, але я обов'язково спробую це скоро.
Ендрю Плоткін

Якщо pyobjcскладно скласти, чи можливо це використовувати ctypes? У такому випадку ця відповідь може бути підказкою (розуміючи, що це буде лише початком великої і болісної роботи, але все ж).
Яків Оскарсон

10

Я також розпочав такий проект. Він оснащений власним спрощеним сценарієм компіляції, тому немає необхідності возитися з autoconf, щоб отримати статичну бібліотеку, складену хрестом. Він здатний створити повністю беззалежну статичну бібліотеку Python з деякими загальними модулями. Він повинен бути легко розширюваним.

https://github.com/albertz/python-embedded/


Я не змушую вашого компілятора працювати. Він компілює, але не вистачає деяких вбудованих модулів, таких як "-колекції". Якісь ідеї?
bijan

Я не включив усі вбудовані модулі С. Просто модифікуйте його.
Альберт

Здається, датовано ... працює лише з iOS 4.3? Чи можете ви документувати, як змусити це працювати з більш сучасними версіями?
ArtOfWarfare

@ArtOfWarfare: Не використовував його деякий час, чому він не повинен працювати з більш новими версіями? Можливо, складіть звіт про помилку на GitHub, якщо у вас виникнуть проблеми.
Альберт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.