Python'u bir iPhone uygulamasına yerleştirme


96

Yani yeni bir milenyum; Apple ellerini salladı; Bir iPhone (App Store) uygulamasına bir Python yorumlayıcısı eklemek artık yasaldır.

Bunu yapmaya nasıl devam edilir? Mevcut tartışmaların tümü (şaşırtıcı olmayan bir şekilde) jailbreaking ile ilgilidir. (Daha eski soru: Python kullanarak yerel iPhone uygulamaları yazabilir miyim )

Buradaki amacım bir PyObjC uygulaması yazmak değil, Python'u gömülü bir kütüphane olarak çalıştıran normal bir ObjC uygulaması yazmak. Python kodu daha sonra yerel Cocoa kodunu geri çağıracaktır. Bu, "kontrol mantığı Python kodudur" kalıbıdır.

İPhone uygulamamın onu bağlayabilmesi için XCode'da yerleşik Python edinme rehberi var mı? Standart kitaplığın% 90'ına ihtiyacım olmayacağından, tercihen sadeleştirilmiş bir Python.

Muhtemelen iş parçacığı ve Python uzantısı API'sini çözebilirim; Bunu MacOS'ta yaptım. Ancak yalnızca komut satırı derleyicilerini kullanarak, XCode'u değil.


Yanıtlar:


30

Python'u nasıl oluşturduğunuz gerçekten önemli değil - örneğin Xcode'da oluşturmanıza gerek yok - ama önemli olan bu yapının ürünüdür.

Yani, uygulamanıza statik olarak bağlanabilecek libPython.a gibi bir şey oluşturmanız gerekecek. Bir .a'ya sahip olduğunuzda, bu, uygulamalarınız için Xcode projesine eklenebilir ve oradan, uygulamanızın geri kalanı gibi bağlanır ve imzalanır.

IIRC (elle python oluşturduğumdan beri epey zaman geçti) kutudan çıkar çıkmaz python, doğru şekilde yapılandırırsanız bir libPython.a (ve bir sürü başka kitaplık) oluşturacaktır.

Elbette, ikinci sorununuz ARM için python'u 86 kutunuzdan çapraz derlemek olacak . Python, autoconf tabanlı bir projedir ve autoconf, çapraz derleme için tam bir sıkıntıdır.

Doğru şekilde ifade ettiğiniz gibi, onu küçültmek kritik olacaktır.

Şaşırtıcı olmayan, bunu yapmak isteyecek ilk kişi olmamanız, ancak iOS için değil. Python, iOS çalıştıranlardan çok daha az yetenekli cihazlara sıkıştırılmıştır. Googling yaparken bir sürü bağlantı içeren bir ileti dizisi buldum; o yararlı olabilir .

Ayrıca pyobjc-dev listesine katılmak isteyebilirsiniz . PyObjC tabanlı bir uygulamayı hedeflemiyor olsanız da (ki bu, btw, iyi bir fikirdir - PyObjC'nin iOS uyumlu hale gelmeden önce daha uzun bir yolu vardır), PyObjC topluluğu bunu ve herhangi birinden Ronald'ı tartışmaktadır. muhtemelen bu alandaki en bilgili kişidir. PyObjC'nin, PyObjC'yi taşımadan önce gömülü Python'u iOS üzerinde çözmesi gerekeceğini unutmayın. Onların ön koşulu, olduğu gibi sizin gereksiniminizdir.


Bağlantılar için teşekkürler. ( Bu projenin çok daha eski bir sürümü için Sharp Zaurus üzerinde Python kullandım , ancak bu Python 1.6 idi ve ambalajı başka biri yaptı ...)
Andrew Plotkin

4
Bir zamanlar Python'u Sony'nin PSP'sine taşıdım; belki Subversion tarihinin bir kısmı size yardımcı olacaktır. Yine de tam olarak bir cevap değil. burada: python-psp.net/trac
fraca7

22

Github'a iPhone ve simülatör için python2.6.5'i getiren ve oluşturan çok kaba bir komut dosyası koydum.

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

Devam eden çalışma

Yaklaşık 2 yıl sonra biraz iç karartıcı güncelleme: (README'den github'da kopyalandı)

Bu proje, iPhone'da hiçbir zaman beni tatmin edecek şekilde python çalıştırmadı ve bu aşamada herhangi bir ciddi proje için kullanmanızı tavsiye edemem.

En önemlisi eksik olan pyobjc desteğidir (daha platforma özgü koda dayandığı için iPhone'a taşımak çok daha zor hale gelir)

Ayrıca, modülleri statik olarak derleme yeteneği de eksiktir (hepsi şu anda geliştirme için çalışan dylib'ler olarak inşa edilmiştir, ancak bildiğim kadarıyla App Store'da buna izin verilmez)

Bu noktada, bu proje çoğunlukla yukarıdaki sorunların üstesinden gelmek isteyen ve bu sorunların üstesinden gelebilen benden daha akıllı olan herkes için bir başlangıç ​​noktasıdır.

Uygulamaları tamamen Python'da yazmanın gerçekten pratik olmasını isterdim, ancak bu noktada imkansız görünüyor.


Teşekkürler! Birkaç gün bakma şansım olmayacak ama kesinlikle yakında deneyeceğim.
Andrew Plotkin

Eğer pyobjcderlemek zor, kullanımı mümkündür ctypes? Bu durumda bu cevap bir ipucu olabilir (bunun büyük ve sancılı bir çalışmanın sadece başlangıcı olacağını fark etmek, ama yine de).
Jacob Oscarson

10

Ben de böyle bir projeye başladım. Kendi basitleştirilmiş derleme betiği ile birlikte gelir, böylece çapraz derlenmiş statik kitaplığınızı almak için autoconf ile uğraşmanıza gerek yoktur. Bazı ortak modüller ile tamamen bağımlılık içermeyen statik bir Python kütüphanesi oluşturabilir. Kolayca genişletilebilir olmalıdır.

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


Derlemenizin çalışmasını sağlayamıyorum. Derleme yapar, ancak '-collections' gibi bazı yerleşik modüllerden yoksundur. Herhangi bir fikir?
bijan

Tüm yerel C modüllerini dahil etmedim. Sadece değiştirin.
Albert

Eski görünüyor ... yalnızca iOS 4.3 ile çalışır? Bunu daha güncel sürümlerle nasıl çalıştıracağınızı belgeleyebilir misiniz?
ArtOfWarfare

@ArtOfWarfare: Bir süredir kullanmadım, neden daha yeni sürümlerle çalışmasın? Herhangi bir sorunla karşılaşırsanız belki GitHub'da bir hata raporu oluşturun.
Albert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.