Seite 1 von 1

Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Verfasst: Freitag 11. März 2022, 08:59
von Thomas Bartzick
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

Re: Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Verfasst: Freitag 11. März 2022, 09:57
von Sirius3
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.

Re: Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Verfasst: Freitag 11. März 2022, 10:21
von __deets__
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.

Re: Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Verfasst: Freitag 11. März 2022, 10:39
von __deets__
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.

Re: Bau und Import einer aus Python generierten Programmbibliothek (DLL)

Verfasst: Dienstag 15. März 2022, 15:33
von Thomas Bartzick
: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