2010-09-11 100 views
86

因此,這是一個新的千年;蘋果已經揮動手;在iPhone(App Store)應用程序中包含Python解釋器現在是合法的。將Python嵌入iPhone應用程序

怎麼去做這件事?所有現有的討論(不出所料)都是指越獄。 (老問題:Can I write native iPhone apps using Python

我的目標不是編寫一個PyObjC應用程序,而是編寫一個運行Python作爲嵌入式庫的常規ObjC應用程序。 Python代碼將回調到本地Cocoa代碼。這是「控制邏輯是Python代碼」模式。

是否有指導讓Python在XCode中構建,以便我的iPhone應用程序可以鏈接它?最好是精簡的Python,因爲我不需要90%的標準庫。

我大概可以找出線程和Python擴展API;我在MacOS上做到了這一點。但只能使用命令行編譯器,而不能使用XCode。

+0

http://itunes.apple.com/us/app/ipython/id485729872?ls=1&mt=8 – chown 2012-01-06 14:33:45

+0

做你能夠做到這一點? – Ali 2012-01-22 00:37:21

回答

27

它如何構建Python並不重要 - 例如,您不需要在Xcode中構建它 - 但重要的是它的產品。

即,您將需要構建類似libPython.a的東西,它可以靜態鏈接到您的應用程序中。一旦你有.a,它可以被添加到你的應用程序的Xcode項目中,並且從那裏它將被鏈接和簽名,就像你的應用程序的其他部分一樣。

IIRC(已經有一段時間了,因爲我已經手工構建了python)現成的python會構建一個libPython.a(以及其他一些庫),如果您正確配置的話。

當然,你的第二個問題是要從你的框中交叉編譯python for ARM。 Python是一個基於autoconf的項目,autoconf是一個交叉編譯的麻煩。

正如您正確指出的那樣,使其變小將至關重要。

也不奇怪,你不是第一個想做這件事的人,但不是iOS的。 Python已經被擠壓到那些比運行iOS的設備要少得多的設備上。當用google搜索時,我發現有一串鏈接,它might be useful

此外,您可能還想加入pyobjc-dev列表。雖然你不是針對基於PyObjC的應用程序(這是一個好主意,PyObjC還有很長的路要走,因爲它對iOS友好),但PyObjC社區一直在討論這個問題,可能是這方面最有見識的人。請注意,在移植PyObjC之前,PyObjC必須解決iOS上的嵌入式Python問題。他們的先決條件就是你的要求。

+0

感謝您的鏈接。 (我在夏普Zaurus上使用了Python,這個項目的早期版本很多,但那是Python 1.6和其他人的包裝......) – 2010-09-11 18:02:13

+4

我曾經將Python移植到索尼的PSP上;也許一些Subversion的歷史會幫助你。不完全是答案。這裏:http://www.python-psp.net/trac/ – fraca7 2010-11-14 14:19:51

21

我已經把一個非常粗略的腳本放在github上,它爲iPhone和模擬器提取和構建python2.6.5。

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

進展中的工作

有點鬱悶更新近2年後(從README在github上覆制)

這個項目從來沒有真正得到蟒蛇在iPhone上運行我的 滿意度,我不建議在這個階段將它用於任何嚴肅的項目 。

最值得注意的是缺少的是pyobjc支持(原來是多少 很難移植到iPhone,因爲它依賴於更具體的平臺 代碼)

還缺少的是靜態編譯模塊的所有能力,(在 目前建作爲工程的發展,但我 知識不會在App Store中被允許)

此時該項目主要是指對任何人 比我聰明的起點dylibs誰想要並能解決上述問題。

我真的希望完全用Python編寫應用程序是實用的,但在這一點上 似乎是不可能的。

+0

謝謝!我幾天沒有機會看它,但我一定會盡快嘗試。 – 2010-09-14 16:46:45

+0

如果'pyobjc'很難編譯,使用'ctypes'是否可行?在這種情況下[this](http://stackoverflow.com/a/1490644/288672)的答案可能是一個線索(意識到它只是一個大而痛苦的工作的開始,但仍然)。 – 2012-07-06 10:12:28

9

我也開始了這樣一個項目。它帶有自己的簡化編譯腳本,因此不需要使用autoconf來獲得交叉編譯的靜態庫。它能夠用一些通用模塊構建一個完全無依賴關係的靜態Python庫。它應該很容易擴展。

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

+0

我沒有讓你的compilescript工作。它編譯,但缺少一些內置模塊,如'集合'。有任何想法嗎? – bijan 2012-10-26 10:40:47

+0

我沒有包含所有的本地C模塊。只需修改它。 – Albert 2012-10-26 13:11:11

+0

似乎日期...只適用於iOS 4.3?你能記錄如何讓它與更多的當前版本一起工作嗎? – ArtOfWarfare 2015-08-16 14:39:38

相關問題