2010-11-23 4 views
23

(Oder: "Kann PyPy/RPython verwendet werden, um zu kompilieren/translate Python zu C/C++ , ohne dass die Python-Laufzeit?")Kann PyPy/RPython verwendet werden, um eine kleine eigenständige ausführbare Datei zu erstellen?

Ich habe versucht, PyPy mit seinem RPython und seinem Python, dessen Laufe zu begreifen und seine Zusammenstellung und seine Übersetzung, und sind etwas gescheitert.

Ich habe ein hypothetisches Python-Projekt (für Windows); Ich möchte seine Größe in der Größenordnung von hundert Kilobyte (O.N.O.) lieber als die mehreren Megabyte, die mit py2exe (nach UPX) benötigt werden, beibehalten. Kann ich PyPy in irgendeiner Weise verwenden, um eine eigenständige ausführbare Datei zu erzeugen, die nicht von Python26.dll abhängig ist? Wenn ich kann, muss es die RPython-Beschränkungen wie for nur arbeiten, die auf eingebauten Typen arbeiten, oder ist es volle Python-Syntax?

Ich weiß, dass, wenn dies getan werden kann, ich fast sicher nicht C-Module aus Python direkt verwenden konnte.


(Seit der Zeit zu fragen, hat sich die Situation klarer geworden, und dieser Teil der Werkzeugkette ist deutlicher als RPython der Marke statt PyPy, es ist nicht so im Jahr 2010 war)

+1

Dies wird fast sicher nicht eine ausführbare Datei so klein wie Sie wollen, aber da es verwandt ist, dachte ich, ich würde darauf hinweisen, dass Cython behauptet, dass es jetzt eigenständige ausführbare Dateien erstellen kann: http://wiki.cython.org/EmbeddingCython –

+0

@Forest: Ich wusste nicht, Cython könnte das tun, aber aufgrund der Python-Laufzeit denke ich, es ist unwahrscheinlich, dass etwas (oder zumindest viel) kleiner als py2exe + UPX. –

+0

Gibt es ein Echo hier? –

Antwort

17

Ja, PyPy kann eigenständige ausführbare Dateien aus RPython-Code erzeugen. Das bedeutet, dass Sie beim Schreiben von Code alle komplizierten RPython-Regeln befolgen müssen. Es ist völlig unwahrscheinlich, dass Ihr Python-Code sofort funktioniert, und die Portierung von vorhandenem Python-Code macht normalerweise keinen Spaß. Es macht keine ausführbaren Dateien so klein wie C, aber zum Beispiel rpystone Ziel (von Pypy/Übersetzer/Ziel) mit Boehm GC ist 80k auf 64bit nach dem Strippen.

+0

Danke dafür. Das wollte ich wissen und erwartete, dass die Antwort wäre. Eine zweite Frage zu dem, was ich vergessen habe zu fragen, ist der Zugriff auf die Windows API über PyPy? Würde 'ctypes.windll' funktionieren oder wäre es komplexer? –

+0

Ctypes funktioniert nicht in RPython. Es gibt eine C-Schnittstelle, sie heißt rffi, grep für Anwendungen (Module verwenden sie). Es gibt eine ganze Reihe von Windows-API hier und da ausgesetzt, schauen Sie in Quelle (Entschuldigung, aber das ist alles ziemlich interne Sachen, keine Dokumentation ;-) – fijal

+0

OK, danke. Wenn ich dazu komme, werde ich es mir ansehen. –

Verwandte Themen