C++/Rust - Code in Python-Projekt einbinden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1706
Registriert: Freitag 11. Dezember 2020, 15:13

Guten morgen zusammen,

ich habe eine allgemeine Frage. Wenn ich aus Performance-Gründen (oder sonstige Gründe), Code in einer Sprache wie C++ oder Rust schreiben möchte, wie muss das Projekt aufgebaut sein, dass ich das in mein Python-Projekt installieren und importieren kann? Ich gehe davon aus, dass das der allgemeine Weg ist und nicht ein simpler Aufruf mit `subprocess`?

Ich habe mich mal etwas durch das `Numpy`-Projekt geklickt. Allerdings ist das eventuell etwas zu groß um die Struktur zu erkennen.

Ich würde nun Code schreiben, dass Eingaben entgegen nimmt und dann irgendwas berechnet. Zum Beispiel ganz simple:

Code: Alles auswählen

fn add(x: i32, y: i32) -> i32 {
    return x + y;
}

fn main() {
    let result = add(1, 2);
}
Das kann ich kompilieren und ausführen. Ich habe aber keine API. Muss ich jetzt um diesen Code einen Python-Wrapper schreiben oder wie sind die einzelnen Schritte, dass ich nachher den Code in mein Python-Projekt installieren und importieren kann?

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
grubenfox
User
Beiträge: 649
Registriert: Freitag 2. Dezember 2022, 15:49

'numpy-Projekt'?

Also für C bzw. C+ sollte https://docs.python.org/3/extending/index.html und https://docs.python.org/3/c-api/intro.html#c-api-tools hilfreich sein... [hoffe ich, ich habe da genau Null Erfahrung]
zu Rust wollte ich schreiben "keine Ahnung", aber ich sehe beim zweiten Link gerade dass dort auch Rust erwähnt wird und PyO3 (https://pyo3.rs/v0.28.2/)
Benutzeravatar
sparrow
User
Beiträge: 4641
Registriert: Freitag 17. April 2009, 10:28

@grubenfox: numpy ist eine Bibliothek für numerische Berechnung in Python, die dafür bekannt ist, dass sie extrem schnell ist, weil sie nur ein Wrappen um sehr schnelle C oder C++ Funktionen ist.

@Dennis89: In diesem Video wird ganz gut erklärt, wie man das mot pyo3 in Rust macht. Das schöne ist, dass man da auf Rust-Seite alles tut und sich das in Python wie ein ganz normaler Import anfühlt. Damit habe ich auch schon Dinge umgesetzt.

Und bitte daran denken, dass Rust-Code deutlich langsamer ist, wenn es nicht als "realease" kompiliert wird.
Benutzeravatar
grubenfox
User
Beiträge: 649
Registriert: Freitag 2. Dezember 2022, 15:49

sparrow hat geschrieben: Sonntag 1. März 2026, 12:03 @grubenfox: numpy ist eine Bibliothek für numerische Berechnung in Python, die dafür bekannt ist, dass sie extrem schnell ist, weil sie nur ein Wrappen um sehr schnelle C oder C++ Funktionen ist.
Das ist klar. Bei Dennis89 klang das mit dem Numpy-Projekt für mich so als ob das ein viel kleineres DemoProjekt als das originale numpy wäre, nur für das erklären vom wrappen von C-Code. Das normale numpy wäre mir viel zu groß um da irgendwas zu erkennen.

Da lieber ein kleineres einfaches Beispiel wie das aus der Python-Doku oder von Dennis89 vorgeschlagen. Prinzipiell sind die ja identisch: eine C-Funktion die mit einem [Beispiel Python-Doku] oder zwei [Beispiel Dennis89] Parametern aufgerufen wird und ein Ergebnis zurück an Python liefert.
Benutzeravatar
sparrow
User
Beiträge: 4641
Registriert: Freitag 17. April 2009, 10:28

Oh, mir fällt ein: Ich weiß gar nicht, worin der kompilierte Teil von Numpy geschrieben ist.
Könnte also auch in einer anderen Sprache geschrieben sein.
Benutzeravatar
grubenfox
User
Beiträge: 649
Registriert: Freitag 2. Dezember 2022, 15:49

The core of NumPy is well-optimized C code.
Benutzeravatar
Dennis89
User
Beiträge: 1706
Registriert: Freitag 11. Dezember 2020, 15:13

Perfekt, vielen Dank.

Damit kann ich erst mal Zeit verbringen und probieren.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
imonbln
User
Beiträge: 201
Registriert: Freitag 3. Dezember 2021, 17:07

Wenn es ein Buch sein darf kann ich folgendes Empfehlen um Rust mit Python zu kombinieren.

https://www.amazon.de/-/en/Speed-Your-P ... 180181144X
Benutzeravatar
Dennis89
User
Beiträge: 1706
Registriert: Freitag 11. Dezember 2020, 15:13

Hört sich gut an, Danke dafür.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten