Встраивание Python в приложение для iPhone

96

Итак, наступило новое тысячелетие; 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 (и множество других библиотек), если вы правильно его настроите.

Конечно, вашей второй проблемой будет кросс-компиляция python для ARM из вашего 86-го компьютера . Python - это проект, основанный на autoconf, а autoconf - неудобство для кросс-компиляции.

Как вы правильно заявили, очень важно сделать его маленьким.

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

Кроме того, вы можете присоединиться к списку pyobjc-dev . Хотя вы не нацеливаетесь на приложение на основе PyObjC (что, кстати, является хорошей идеей - PyObjC предстоит пройти долгий путь, прежде чем он станет дружественным к iOS), сообщество PyObjC обсуждает это, и Рональд, кто угодно, вероятно, самый знающий человек в этой конкретной области. Обратите внимание, что PyObjC должен будет решить проблему встроенного Python на iOS перед переносом PyObjC. Их предпосылка - это как бы ваше требование.

бомж
источник
Спасибо за ссылки. (Я использовал Python на Sharp Zaurus для гораздо более ранней версии этого проекта, но это был Python 1.6, и кто-то еще занимался упаковкой ...)
Эндрю Плоткин
4
Однажды я портировал Python на Sony PSP; возможно, вам поможет кое-что из истории Subversion. Хотя не совсем ответ. здесь: python-psp.net/trac
fraca7
22

Я поместил на github очень грубый скрипт, который загружает и собирает python2.6.5 для iPhone и симулятора.

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

Работа в процессе

Несколько удручающее обновление почти 2 года спустя: (скопировано из README на github)

Этот проект никогда не запускал python на iPhone, к моему удовлетворению, и я не могу рекомендовать его использовать для каких-либо серьезных проектов на данном этапе.

В частности, отсутствует поддержка pyobjc (которую намного сложнее перенести на iPhone, поскольку она зависит от кода, более специфичного для платформы)

Также отсутствует возможность статической компиляции модулей (все они в настоящее время построены как dylib, которые работают для разработки, но, насколько мне известно, не будут разрешены в App Store)

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

Я действительно хотел бы, чтобы было практично писать приложения полностью на Python, но на данный момент это кажется невозможным.

коббал
источник
Благодарность! Несколько дней у меня не будет возможности посмотреть на него, но я обязательно попробую его скоро.
Андрей Плоткин
Если pyobjcсложно скомпилировать, возможно ли это использовать ctypes? В таком случае этот ответ может быть ключом к разгадке (понимая, что это будет только начало большой и болезненной работы, но все же).
Джейкоб Оскарсон 06
10

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

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

Альберт
источник
Я не заставляю ваш скрипт компиляции работать. Он компилируется, но в нем отсутствуют некоторые встроенные модули, такие как «-collections». Любые идеи?
bijan
Я не включил все собственные модули C. Просто измените это.
Альберт
Кажется устаревшим ... работает только с iOS 4.3? Не могли бы вы задокументировать, как заставить это работать с более актуальными версиями?
ArtOfWarfare
@ArtOfWarfare: Давно не пользовался, почему бы ему не работать с более свежими версиями? Если вы заметили какие-либо проблемы, напишите отчет об ошибке на GitHub.
Альберт