2010-11-23 3 views
23

(または、 "PyPy/RPythonはPythonランタイムを必要とせずにコンパイル/ C/C++ へのPythonを変換するために使用することはできますか?")PyPy/RPythonを使用して小さなスタンドアロンの実行ファイルを作成できますか?

が、私はそのRPythonとそのPythonの、そのランニングでPyPyを理解しようとしていますそのコンパイルとその翻訳、そして幾分失敗しました。

私は仮説的なPythonプロジェクト(Windows用)を持っています。私はpy2exeを使用する数メガバイト(UPXの後)ではなく、数百メガバイト(O.N.O.)のオーダーのサイズを維持したいと思います。どのような方法でPyPy を使用して、Python26.dllに依存しないスタンドアロンの実行可能ファイルを作成できますか?可能であれば、forのようなRPythonの制限に従う必要がありますか?それとも、組み込み型でのみ動作しますか?完全なPython構文ですか?

私は、これを行うことができれば、PythonのCモジュールを直接使用することはほとんどできないことを認識しています。


(尋ねるの時間は、状況が明確になっており、ツールチェーンのこの部分がより明確RPythonなくPyPyとしてブランド化され、それは2010年にそうではなかった)

+1

これはほとんどの場合、あなたが望むほど小さな実行可能ファイルを生成しませんが、それは関連しているので、私は現在、スタンドアロンの実行可能ファイルをビルドできると主張しています。http://wiki.cython.org/EmbeddingCython –

+0

@Forest:Cythonがそれを行うことはできませんでしたが、Pythonランタイムを必要とするため、py2exe + UPXよりも小さい(または少なくとも多くの)小さなものは得られないと思います。 –

+0

ここにエコーがありますか? –

答えて

17

はい、PyPyはRPythonコードからスタンドアロンの実行ファイルを生成できます。つまり、コードを記述する際には、RPythonのすべての規則に従わなければなりません。あなたのPythonコードはまったく機能しない可能性があり、既存のPythonコードを移植することは通常楽しいものではありません。実行可能ファイルはCほど小さいものではありませんが、たとえばbohemm GCを使用したrpystoneターゲット(pypy/translator/goalから)は、ストリッピング後に64ビットで80kです。

+0

ありがとうございます。それは私が知りたいと思っていたもので、その答えがあると予想しています。私が尋ねたことに忘れてしまったことに関する二次的な質問は、PyPyを介してWindows APIにアクセスできるのでしょうか? 'ctypes.windll'はうまくいくのだろうか、もっと複雑になるだろうか? –

+0

ctypesはRPythonでは動作しません。 Cインタフェースがあり、それはrffiと呼ばれ、grepはその使用法のために使用されます(モジュールはそれを使用します)。ここにそこに公開されているWindows APIのかなりのビットがあります(申し訳ありませんが、これはかなり内部的なものですが、ドキュメントはありません;-) – fijal

+0

ありがとうございます。私がそれに着くなら、私は見てみましょう。 –