在iPhone应用中嵌入Python

97 投票
3 回答
50793 浏览
提问于 2025-04-16 04:00

现在是新千年,苹果公司已经放宽了限制,现在在iPhone(App Store)应用中包含Python解释器是合法的。

那么,怎么做呢?现有的讨论(毫无意外)都提到了越狱的问题。(之前的问题:我可以用Python写原生iPhone应用吗

我这里的目标不是写一个PyObjC应用,而是写一个普通的ObjC应用,让它作为嵌入库运行Python代码。然后,Python代码会调用原生的Cocoa代码。这就是“控制逻辑是Python代码”的模式。

有没有关于如何在XCode中集成Python的指南,这样我的iPhone应用就可以链接它?最好是一个精简版的Python,因为我不需要标准库的90%。

我可能能搞定线程和Python扩展API;我在MacOS上做过这方面的工作。但我只用过命令行编译器,而不是XCode。

3 个回答

10

我也开始了这样的一个项目。它自带了一个简单的编译脚本,所以你不需要去折腾autoconf来获取你交叉编译的静态库。这个项目可以构建一个完全没有依赖的Python静态库,并且包含一些常用的模块。它应该很容易扩展。

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

22

我在github上放了一个很粗糙的脚本,用来获取和构建适用于iPhone和模拟器的python2.6.5。

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

这个项目还在进行中。

快两年后有些沮丧的更新:(摘自github上的README)

这个项目到目前为止并没有让我满意地在iPhone上运行python,所以我不建议在任何严肃的项目中使用它。

最明显的缺失是pyobjc支持(这实际上很难移植到iPhone,因为它依赖于更多特定于平台的代码)。

另外,静态编译模块的能力也缺失(目前所有模块都是作为动态库构建的,这在开发中可以用,但据我所知,在App Store中是不被允许的)。

目前这个项目主要是给那些比我聪明的人一个起点,让他们可以解决上述问题。

我真的希望能完全用Python写应用程序,但现在看来这几乎是不可能的。

30

其实你构建Python的方式并不重要,比如说你不一定非要在Xcode里构建它。重要的是你构建出来的产品。

也就是说,你需要生成一个像libPython.a这样的文件,这个文件可以静态链接到你的应用程序里。一旦你有了这个.a文件,就可以把它添加到你的Xcode项目中,然后它会像你应用里的其他部分一样被链接和签名。

如果我没记错的话(我已经有一段时间没手动构建Python了),如果你正确配置,开箱即用的Python会生成libPython.a(还有一些其他的库)。

当然,你第二个要面对的问题是要在你的86机器上为ARM架构交叉编译Python。Python是一个基于autoconf的项目,而autoconf在交叉编译时会让人很头疼。

正如你所说,让它变小是非常关键的。

这也不奇怪,你并不是第一个想这么做的人,不过你不是为了iOS。Python已经被压缩到比运行iOS的设备更低配置的设备上。我在网上搜索时发现了一个包含很多链接的讨论串;它可能会对你有帮助

另外,你可能想加入pyobjc-dev邮件列表。虽然你并不是在针对基于PyObjC的应用(顺便说一句,这个想法不错——PyObjC还有很长的路要走才能适应iOS),但PyObjC社区一直在讨论这个问题,而Ronald可能是这个领域最有知识的人。请注意,PyObjC必须先解决在iOS上嵌入Python的问题,然后才能移植PyObjC。换句话说,他们的前提条件就是你的需求。

撰写回答