iPhoneアプリにPythonを埋め込む


94

つまり、それは新しい千年紀です。Appleは手を振った。iPhone(App Store)アプリにPythonインタープリターを含めることが合法になりました。

これを行うにはどうすればよいですか?すべての既存の議論は(当然のことながら)脱獄に言及しています。(以前の質問:Pythonを使用してネイティブのiPhoneアプリを作成できますか?

ここでの目標は、PyObjCアプリを作成することではなく、組み込みライブラリとしてPythonを実行する通常のObjCアプリを作成することです。次に、PythonコードはネイティブCocoaコードを呼び出します。「制御ロジックはPythonコードです」パターンです。

XCodeにPythonを組み込むためのガイドはありますか?私のiPhoneアプリがそれをリンクできるように?標準ライブラリの90%を必要としないので、できればPythonを削除してください。

おそらく、スレッド化とPython拡張APIを理解できるでしょう。私はMacOSでそれをしました。ただし、XCodeではなく、コマンドラインコンパイラのみを使用します。


回答:


30

Pythonをどのようにビルドするかは重要ではありません-たとえば、Xcodeでビルドする必要はありません-しかし重要なのは、そのビルドの成果物です。

つまり、アプリケーションに静的にリンクできるlibPython.aのようなものを構築する必要があります。.aを取得したら、それをアプリケーションのXcodeプロジェクトに追加し、そこから他のアプリと同じようにリンクおよび署名します。

IIRC(私が手作業でpythonを作成してからしばらく経っています)を正しく構成すれば、すぐに使用できるpythonがlibPython.a(および他の多くのライブラリー)を作成します。

もちろん、2番目の問題は、86ボックスからARM用のPythonをクロスコンパイルすることです。Pythonはautoconfベースのプロジェクトであり、autoconfはクロスコンパイルの問題です。

あなたが正しく述べているように、それを小さくすることは重要です。

当然のことですが、あなたがこれをやりたい最初の人ではありませんが、iOSではありません。Pythonは、iOSを実行するデバイスよりもはるかに能力の低いデバイスに圧迫されています。探し回っているときに、たくさんのリンクがあるスレッドを見つけました。それが役に立つかもしれません

また、pyobjc-devリストに参加することもできます。PyObjCベースのアプリケーション(これはいいアイデアです-PyObjCがiOSで使用できるようになるまでには長い道のりがあります)をターゲットにしていませんが、PyObjCコミュニティはこれとRonaldについて議論しています。おそらくこの分野で最も知識のある人です。PyObjCを移植する前に、PyObjCがiOS上の埋め込みPythonの問題を解決する必要があることに注意してください。彼らの前提条件は、あなたの要件です。


リンクをありがとう。(私はこのプロジェクトのかなり以前のバージョンでSharp ZaurusでPythonを使用しましたが、それはPython 1.6で、他の誰かがパッケージを作成しました...)
Andrew Plotkin

4
私はかつてPythonをソニーのPSPに移植しました。おそらく、Subversionの履歴の一部が役立つでしょう。正確な答えではありませんが。ここ:python-psp.net/trac
fraca7

22

iPhoneとシミュレーター用のpython2.6.5をフェッチしてビルドする非常に大まかなスクリプトをgithubに配置しました。

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

進行中の作業

ほぼ2年後のやや憂鬱なアップデート:(githubのREADMEからコピー)

このプロジェクトでは本当に満足のいくようにiPhoneでpythonを実行することはできませんでした。また、この段階で深刻なプロジェクトに使用することはお勧めできません。

最も顕著な欠落はpyobjcサポートです(より多くのプラットフォーム固有のコードに依存しているため、iPhoneへの移植がはるかに難しいことが判明しています)

また、モジュールを静的にコンパイルする機能もありません(現在、すべて開発用に機能するdylibとして構築されていますが、私の知る限り、App Storeでは許可されていません)。

この時点で、このプロジェクトは主に、上記の問題に取り組みたいと思っている、私より賢い人のための出発点になることを意図しています。

私は完全にPythonでアプリを書くことが実用的であることを本当に望みますが、現時点ではそれは不可能のようです。


ありがとう!数日間見る機会はありませんが、まもなくやってみるつもりです。
Andrew Plotkin

pyobjcコンパイルが難しい場合、使用することは可能ctypesですか?その場合、この答えは手がかりとなる可能性があります(それが大規模で面倒な作業の始まりに過ぎないことを理解しているが、それでもなお)。
Jacob Oscarson、2007

10

そのようなプロジェクトも始めました。独自の簡略化されたコンパイルスクリプトが付属しているため、クロスコンパイルされた静的ライブラリを取得するためにautoconfをいじる必要はありません。いくつかの一般的なモジュールを使用して、完全に依存関係のないPythonの静的ライブラリを構築できます。簡単に拡張できる必要があります。

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


私はあなたのコンパイルスクリプトを動作させません。コンパイルはできますが、「-collections」のようないくつかの組み込みモジュールがありません。何か案は?
bijan 2012年

私はすべてのネイティブCモジュールを含めませんでした。変更するだけです。
アルバート

日付のようです... iOS 4.3でのみ機能しますか?これをより新しいバージョンで動作させる方法を文書化できますか?
ArtOfWarfare 2015

@ArtOfWarfare:しばらく使用していないのに、なぜ最近のバージョンでは動作しないのですか?問題が発生した場合は、GitHubでバグレポートを作成してください。
Albert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.