将Python嵌入iPhone应用程序


94

因此,这是一个新的千年。苹果摇了摇手。现在在iPhone(App Store)应用程序中包含Python解释器是合法的。

如何做到这一点?现有的所有讨论(毫无疑问)都涉及越狱。(旧问题:我可以使用Python编写本机iPhone应用程序

我的目标不是编写PyObjC应用程序,而是编写将Python作为嵌入式库运行的常规ObjC应用程序。然后,Python代码将回调到本机可可代码。这是“控制逻辑就是Python代码”模式。

是否有使用XCode内置Python的指南,以便我的iPhone应用程序可以链接它?最好是精简的Python,因为我不需要90%的标准库。

我大概可以弄清楚线程和Python扩展API。我已经在MacOS上做到了。但仅使用命令行编译器,而不使用XCode。


Answers:


30

如何构建Python其实并不重要-例如,您不需要在Xcode中构建它-但重要的是该构建的产品。

即,您将需要构建类似libPython.a的东西,该东西可以静态链接到您的应用程序中。有了.a后,可以将其添加到您的应用程序的Xcode项目中,然后从那里将其链接和签名,就像您应用程序的其余部分一样。

IIRC(自从我手工构建python以来已经有一段时间了),如果配置正确,现成的python将构建libPython.a(以及其他库)。

当然,您的第二个问题将是从86交叉编译适用于ARM的python盒。Python是一个基于autoconf的项目,而autoconf则是交叉编译的难题。

正如您正确指出的那样,减小尺寸至关重要。

同样,不足为奇的是您不是第一个想要这样做的人,但对于iOS而言却不是。Python已被挤入功能不如运行iOS的设备中。我在搜寻时发现了一个带有一堆链接的线程;这可能有用

另外,您可能想加入pyobjc-dev列表。虽然您的目标不是基于PyObjC的应用程序(顺便说一句,这是一个好主意-PyObjC在与iOS友好之前还有很长的路要走),但PyObjC社区一直在与Ronald讨论这个问题,在这个特定领域可能是最有知识的人。请注意,在移植PyObjC之前,PyObjC必须解决iOS上的嵌入式Python问题。他们的先决条件就是您的要求。


感谢您的链接。(我用的Python对夏普的Zaurus了很多这个项目的早期版本,但是这是Python的1.6和别人做了包装...)
安德鲁·普洛特金

4
我曾经将Python移植到Sony的PSP。也许一些Subversion历史会为您提供帮助。虽然不完全是一个答案。此处:python-psp.net/trac
fraca7

22

我在github上放了一个非常粗糙的脚本,该脚本为iPhone和模拟器获取并构建python2.6.5。

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

工作正在进行中

大约2年后的更新令人沮丧:(从README复制在github上)

这个项目从来没有真正让python在iPhone上运行过,我不满意,因此我不建议在此阶段将它用于任何严肃的项目。

最值得注意的是缺少pyobjc支持(事实证明,由于它依赖于更多平台特定的代码,因此很难移植到iPhone)

还缺少静态编译模块的能力(目前所有模块都以dylib形式构建,可用于开发,但据我所知App Store不允许这样做)

在这一点上,这个项目的主要目的是成为比我更聪明并且想要解决上述问题的任何人的起点。

我真的希望完全用Python编写应用程序是可行的,但目前看来这是不可能的。


谢谢!我将有几天没有机会看它,但是我一定会尽快尝试的。
Andrew Plotkin 2010年

如果pyobjc难以编译,使用ctypes是否可行?在那种情况下,这个答案可能是一个线索(意识到这只是一项艰巨而艰巨的工作的开始,但仍然如此)。
Jacob Oscarson

10

我也开始了这样的项目。它带有自己的简化编译脚本,因此无需弄乱autoconf即可获得交叉编译的静态库。它能够使用一些通用模块构建完全无依赖的Python静态库。它应该易于扩展。

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


我没有让您的编译稿起作用。它确实可以编译,但是缺少一些内置模块,例如“ -collections”。有任何想法吗?
bijan 2012年

我没有包括所有本机C模块。只需对其进行修改。
艾伯特

似乎已过时...仅适用于iOS 4.3?您能否记录一下如何使它与更多最新版本一起使用?
ArtOfWarfare 2015年

@ArtOfWarfare:已经有一段时间没有使用它了,为什么它不可以与更新版本一起使用?如果您发现任何问题,也许可以在GitHub上提交错误报告。
艾伯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.