web-dev-qa-db-ja.com

iPhoneアプリにPythonを埋め込む

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

これをどのように行うのですか?すべての既存の議論は(当然)ジェイルブレイクについて言及しています。 (以前の質問: Pythonを使用してネイティブのiPhoneアプリを作成できますか

ここでの私の目標は、PyObjCアプリを書くことではなく、Pythonを埋め込みライブラリとして実行する通常のObjCアプリを書くことです。 Pythonコードは、ネイティブCocoaコードにコールバックします。 「制御ロジックはPythonコード」パターンです。

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

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

91
Andrew Plotkin

Python-たとえばXcodeでビルドする必要はありません---ビルドの製品は重要です。

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

IIRC(手作業でpythonを作成してからしばらく経ちました)すぐに使えるpythonはlibPython.a(および他のライブラリの束)、それを正しく構成する場合。

もちろん、2番目の問題は、クロスコンパイルすることですpython for ARM from from86box。Pythonはautoconfベースのプロジェクトであり、autoconfはクロスコンパイルの苦痛です。

正しく述べているように、小さくすることが重要になります。

また、驚くべきことではありませんが、これをしたいのはあなたが初めてではないということですが、iOSではそうではありません。 Pythonは、iOSを実行するデバイスよりもはるかに能力の低いデバイスに絞り込まれています。グーグルで検索すると、たくさんのリンクを持つスレッドが見つかりました。それは 役に立つかもしれません

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

28
bbum

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

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

進行中の作業

ほぼ2年後のやや憂鬱な更新:(githubのREADMEからコピー)

このプロジェクトは、私が満足するまでiPhoneで実行されるpythonではありません。この段階で深刻なプロジェクトに使用することはお勧めできません。

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

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

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

完全にPythonでアプリを作成することが実用的であることを本当に望んでいますが、現時点では不可能です。

21
cobbal

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

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

9
Albert