Incrustar Python en una aplicación de iPhone

94

Entonces es un nuevo milenio; Apple ha hecho un gesto con la mano; ahora es legal incluir un intérprete de Python en una aplicación de iPhone (App Store).

¿Cómo se hace esto? Toda la discusión existente (como era de esperar) se refiere al jailbreak. (Pregunta anterior: ¿Puedo escribir aplicaciones nativas para iPhone usando Python? )

Mi objetivo aquí no es escribir una aplicación PyObjC, sino escribir una aplicación ObjC normal que ejecute Python como una biblioteca incrustada. El código Python luego volverá a llamar al código nativo Cocoa. Es el patrón "la lógica de control es código Python".

¿Existe una guía para construir Python en XCode, de modo que mi aplicación de iPhone pueda vincularlo? Preferiblemente un Python simplificado, ya que no necesitaré el 90% de la biblioteca estándar.

Probablemente pueda averiguar el subproceso y la API de extensión de Python; Lo he hecho en MacOS. Pero solo usando compiladores de línea de comandos, no XCode.

Andrew Plotkin
fuente

Respuestas:

30

Realmente no importa cómo construya Python, no necesita construirlo en Xcode, por ejemplo, pero lo que importa es el producto de esa construcción.

Es decir, necesitará crear algo como libPython.a que se pueda vincular estáticamente a su aplicación. Una vez que tenga un .a, se puede agregar al proyecto Xcode para su (s) aplicación (es) y, desde allí, se vinculará y firmará como el resto de su aplicación.

IIRC (ha pasado un tiempo desde que construí Python a mano) la Python lista para usar construirá una libPython.a (y un montón de otras bibliotecas), si la configura correctamente.

Por supuesto, su segundo problema será la compilación cruzada de Python para ARM desde su caja 86 . Python es un proyecto basado en autoconf y autoconf es un dolor en el trasero para la compilación cruzada.

Como dice correctamente, hacerlo pequeño será fundamental.

Tampoco es sorprendente que no seas la primera persona en querer hacer esto, pero no para iOS. Python se ha introducido en dispositivos mucho menos capaces que los que ejecutan iOS. Encontré un hilo con un montón de enlaces al buscar en Google; que podría ser útil .

Además, es posible que desee unirse a la lista pyobjc-dev . Si bien no está apuntando a una aplicación basada en PyObjC (lo cual, por cierto, es una buena idea; PyObjC tiene un largo camino por recorrer antes de que sea compatible con iOS), la comunidad PyObjC ha estado discutiendo esto y Ronald, de cualquiera, es probablemente la persona con más conocimientos en esta área en particular. Tenga en cuenta que PyObjC tendrá que resolver el problema de Python integrado en iOS antes de portar PyObjC. Su requisito previo es su requisito, por así decirlo.

bbum
fuente
Gracias por los enlaces. (Usé Python en Sharp Zaurus para una versión mucho anterior de este proyecto, pero esa era Python 1.6 y alguien más hizo el empaque ...)
Andrew Plotkin
4
Una vez porté Python a la PSP de Sony; tal vez algo del historial de Subversion le ayude. Aunque no es exactamente una respuesta. aquí: python-psp.net/trac
fraca7
22

Puse una secuencia de comandos muy aproximada en github que busca y compila python2.6.5 para iPhone y simulador.

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

Trabajo en progreso

Actualización algo deprimente casi 2 años después: (copiado de README en github)

Este proyecto nunca hizo que Python se ejecutara en el iPhone a mi satisfacción, y no puedo recomendar su uso para ningún proyecto serio en esta etapa.

Lo más notablemente faltante es la compatibilidad con pyobjc (que resulta ser mucho más difícil de migrar a iPhone ya que se basa en un código más específico de la plataforma)

También falta la capacidad de compilar módulos estáticamente (todos están actualmente construidos como dylibs que funcionan para el desarrollo, pero que yo sepa, no se permitirían en la App Store)

En este punto, este proyecto está destinado principalmente a ser un punto de partida para cualquier persona más inteligente que yo que quiera y pueda abordar los problemas anteriores.

Realmente desearía que fuera práctico escribir aplicaciones completamente en Python, pero en este punto parece imposible.

cobbal
fuente
¡Gracias! No tendré la oportunidad de verlo durante unos días, pero definitivamente lo intentaré pronto.
Andrew Plotkin
Si pyobjces difícil de compilar, ¿es factible de usar ctypes? En ese caso, esta respuesta podría ser una pista (darse cuenta de que sería solo el comienzo de un trabajo grande y doloroso, pero aún así).
Jacob Oscarson
10

También comencé un proyecto de este tipo. Viene con su propio script de compilación simplificado, por lo que no hay necesidad de perder el tiempo con autoconf para obtener su biblioteca estática de compilación cruzada. Es capaz de construir una biblioteca estática de Python completamente libre de dependencias con algunos módulos comunes. Debería ser fácilmente extensible.

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

Albert
fuente
No consigo que funcione tu compilescript. Se compila, pero carece de algunos módulos integrados como '-collections'. ¿Algunas ideas?
bijan
No incluí todos los módulos nativos de C. Solo modifícalo.
Albert
Parece anticuado ... ¿solo funciona con iOS 4.3? ¿Podría documentar cómo hacer que esto funcione con versiones más actuales?
ArtOfWarfare
@ArtOfWarfare: No lo he usado por un tiempo, ¿por qué no debería funcionar con versiones más recientes? Tal vez haga un informe de error en GitHub si ve algún problema.
Albert