Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Thomas Bartzick
User
Beiträge: 2
Registriert: Donnerstag 10. März 2022, 17:13

Guten Tag in die Runde!

Mein Wunsch ist es, aus einem Python-Skript eine DLL zu bauen, um die in Python definierten Funktionen dort als Importe innerhalb eines C-Programms aufzurufen.
Ich stelle mir das Vorgehen wie folgt vor:

* Schreiben einer oder mehrerer *.py mit Funktionen, die exportiert werden sollen.
* "SomethingWonderfulHappens" *.py => *.DLL
* DLL => DLM
* Laden-/Entladen der DLM zur Laufzeit
* Aufruf aus Python nach C importierter Funktionen zur Laufzeit

Frage: Ist dies überhaupt möglich?
Ich habe mittlerweile so Einiges versucht, davon durch Cython und nuitka zu realisieren - doch leider nur mit mäßigem Erfolg.

Zwar generiert mir z.B. Cython ein C-File, das ich einbinden und auch in eine DLL übersetzen kann. Jedoch bindet die Funktion "LoadLibrary" diese nicht ein - vermutlich, da weitere Abhängigkeiten zu anderen DLLs nicht erfüllt sind. Letztlich benötige ich aber eine feine, kleine DLL/DLM ohne weiteren Overhead.

Falls also jemand diesbezüglich einen Weg wissen sollte, bin ich für jeden Hinweis dankbar!

Viele Grüße,
Thomas
Sirius3
User
Beiträge: 15984
Registriert: Sonntag 21. Oktober 2012, 17:20

Eine feine kleine DLL kann es nicht geben. Du brauchst für Python immer die gesamte Python-Laufzeitumgebung.
Man kann Python als DLL in C-Programme einbinden, das wäre den Weg, den Du gehen müßtest. Dort kannst Du dann direkt Pythonbibliotheken einbinden und über das Python-C-Interface nutzen.
__deets__
User
Beiträge: 11926
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na man kann das schon machen. Den gesamten Interpreter plus eine C-API in einer DLL ausliefern. Aber ist schon etwas Arbeit. Cython kann da nur so viel helfen. Doch deren Mailingliste ist da vielleicht ein guter anlaufpunkt. Stefan ist ja sehr Umtriebig.
__deets__
User
Beiträge: 11926
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nachtrag: woran ich natürlich nicht so richtig gedacht habe ist die python stdlib, die meinte Sirius 3 natürlich auch. Und das kann schon tricky werden. Manches kann mit cython sicher in C-API-Calls transferiert werden. Aber andere Dinge wie zb der Import Mechanismus etc sind schon ausgefuchster. Es gab mal etwas das nannte sich Frozen modules. Vielleicht geht das noch.
Thomas Bartzick
User
Beiträge: 2
Registriert: Donnerstag 10. März 2022, 17:13

:D Hallo und guten Tag in die Runde!

Vielen Dank für die schnellen Antworten hier!
Ich habe mich entschlossen, es noch einmal mit Micropython zu probieren. Möglicherweise habe ich einen gangbaren Weg zur zeitoptimierten Ausführung gefunden.

Beste Grüße,
Thomas
Antworten