Verwenden Sie Cython als Python-zu-C-Konverter

Lesezeit: 4 Minuten

Ich habe riesige Python-Module (+8000 Zeilen). Sie haben im Grunde jede Menge Funktionen für die Interaktion mit einer Hardwareplattform über die serielle Schnittstelle durch Lesen und Schreiben in Hardwareregister.

Sie sind keine numerischen Algorithmen. Die Anwendung liest/schreibt also nur in Hardwareregister/-speicher. Ich verwende diese Bibliotheken, um benutzerdefinierte Skripte zu schreiben. Schließlich muss ich all diese Dinge verschieben, damit sie in einem eingebetteten Prozessor auf meiner Hardware ausgeführt werden, um eine genauere Kontrolle zu haben, dann starte ich das Ereignis einfach vom PC und der Rest ist in der Hardware.

Also muss ich sie in C konvertieren. Wenn ich meine Skripte von einem automatischen Tool in C konvertieren lassen könnte, würde mir das eine Menge Zeit sparen. Aus diesem Grund fühlte ich mich zu Cython hingezogen. Effizienz ist nicht wichtig, meine Codes sind keine Rechenmaschinen. Der generierte Code sollte jedoch relativ klein sein, um in meinen begrenzten Speicher (einige hundert Kilobyte) zu passen.

Kann ich Cython als Konverter für meine benutzerdefinierten Python-Skripte in C verwenden? Meine Vermutung ist ja, in welchem ​​​​Fall kann ich diese .c-Dateien verwenden, um auf meiner Hardware ausgeführt zu werden? Meine Vermutung ist nicht, da ich Cython auch in meiner Hardware haben muss, damit sie laufen. Aber wenn nur einige .c-Dateien erstellt werden, kann ich sie durchgehen und eigenständig machen, da der Code nicht viele Funktionen von Python verwendet, sondern nur als schnell zu implementierendes Skript verwendet wird.

  • Hat jemand damit wirklich Erfolg gehabt? Ich glaube, das wäre sehr schwer zu debuggen. Ich möchte das wirklich selbst mit Cython/PyPy machen, aber das sieht so aus, als könnte es sehr interessant sein, es zu testen …

    – Radix07

    16. Juni 2015 um 20:33 Uhr

Benutzeravatar von agf
agf

  1. Ja, im Kern tut Cython genau das. Aber …
  2. Sie brauchen Cython nicht, aber Sie brauchen libpython. Sie haben vielleicht das Gefühl, dass es nicht so viele Python-Funktionen verwendet, aber ich denke, wenn Sie dies versuchen, werden Sie feststellen, dass es nicht wahr ist – Sie werden Ihr Programm nicht von seiner Abhängigkeit trennen können libpython während Sie immer noch die Python-Sprache verwenden.

Eine andere Option ist PyPyspeziell ist es Übersetzungs-Toolchain, NICHT der PyPy-Python-Interpreter. Es lässt Sie übersetzen Pythoneine Teilmenge der Python-Sprache, in C. Wenn Sie wirklich nicht viele Funktionen oder Bibliotheken der Python-Sprache verwenden, kann dies funktionieren.

PyPy ist hauptsächlich als alternative Python-Implementierung bekannt, aber es ist auch eine Reihe von Tools zum Kompilieren dynamischer Sprachen in verschiedene Formen. Dadurch kann die in (R)Python geschriebene PyPy-Implementierung von Python in Maschinencode kompiliert werden.

Wenn C++ verfügbar ist, Nuitka ist ein Python-zu-C++-Compiler, der für normales Python funktioniert, nicht nur für RPython (das von Shedskin und PyPy verwendet wird).

  • Es ist also ein Übersetzer, der Ihnen .c gibt? Ich dachte, es ist eine spezifische Implementierung von Python, um es schnell zu machen. Schnell zu sein ist nicht meine Sorge.

    Benutzer845459

    18. August 2011 um 19:26 Uhr

  • Lesen Sie die Antwort genauer durch. PyPy ist Zwei Dinge, eine Implementierung von Python und ein Python-Übersetzer/Compiler. Du willst nicht das Erste, du willst das Zweite. Die Übersetzungs-Toolchain, mit der ich verlinkt habe, enthält Details zu Ihren Wünschen.

    – agf

    18. August 2011 um 19:30 Uhr


  • @agf, ich kann nicht herausfinden, wie man ein Python-Programm übersetzt (sagen Sie hello.py mit einer Zeile i=1; print hello, 1) in eine ac-Quelldatei, die ich mir in einem Editor ansehen und mit gcc kompilieren kann. Ich würde mich freuen, wenn Sie mir mit einem Beispiel helfen könnten.

    – Kys Tao

    21. März 2012 um 3:32 Uhr

  • Sie verwenden PyPy nicht, um Python in C zu übersetzen. Sie verwenden Cython, das für diese Aufgabe entwickelt wurde. Der Benutzer möchte RPython nicht nach C übersetzen, was ohnehin ein komplizierter Ansatz wäre, während Cython einen einfachen, klaren Weg bietet.

    – Alkalde

    29. September 2013 um 19:17 Uhr

  • @alcalde Ich habe diese (sehr alte) Antwort etwas aufgeräumt; du hast recht, es war irreführend.

    – agf

    30. September 2013 um 0:58 Uhr

Wenn C++ für diese eingebettete Plattform verfügbar ist, ist dies der Fall Häutenkonvertiert es Python in C++.

  • Ich habe von ShedSkin gehört, aber ich kann ihm nicht vertrauen. Cython scheint robuster und weit verbreitet zu sein, mit sehr positiven Bewertungen.

    Benutzer845459

    18. August 2011 um 19:25 Uhr


  • Für C++ gibt es auch Python.

    – Boardrider

    19. April 2016 um 12:34 Uhr

1388950cookie-checkVerwenden Sie Cython als Python-zu-C-Konverter

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy