Frage

Gibt es eine Möglichkeit py2exe oder eine andere Methode mit DLL-Dateien anstelle von EXE-Dateien zu generieren?

Ich mag im Grunde einen normalen win32 dll mit normalen Funktionen erstellen, aber diese Funktionen würden in Python anstelle von c ++ codiert werden.

War es hilfreich?

Lösung

Ich glaube, Sie dies, indem Sie einige Hacking lösen könnte:

  • Nehmen Sie einen Blick auf die zipextimporter Modul in py2exe. Es hilft mit pyd-Dateien aus einem Zip-Import.
  • verwendet, könnten Sie in der Lage py2exe die Ausgabedatei in Ihrer eigenen app / dll mit rohem python-api zu laden. (Verwenden Sie boost :: Python, wenn Sie können und wollen)
  • Und da py2exe die Ausgabedatei ein Zip ist, können Sie es am Ende Ihrer dll anbringen könnte, das Ganze noch mehr integrierte machen. (Old Trick, der auch mit jar-Dateien funktioniert.)

Nicht getestet, aber ich denke, die Theorie Sound ist.

Im Wesentlichen Sie reimplementieren py2exe den Ausgang ausführbarer main () in der DLL.

Andere Tipps

Ich bezweifle, dass py2exe dies tut, wie es um die Bereitstellung eines Bootstrapping .exe architectured ist, der den Python-Interpreter rollt und führt es aus.

Aber warum nicht einfach einzubetten Python in C-Code und kompiliert, dass Code als DLL?

Ich bin mir nicht bewusst py2exe die Lage, das zu tun, wie ich glaube, dass es eigentlich nicht Gegenstand Symbole aus Ihrem Python-Code, sondern nur bettet das kompilierte Byte-Code in einer ausführbaren Datei mit der Python-Laufzeit).

eine native Bibliothek anlegen kann ein bisschen mehr Arbeit erfordern, mit dem Python-C-API (die C / C ++ Schnittstelle, um die Dinge zu definieren). Es kann etwas einfacher sein, mit Elmer dafür.

Für die Nachwelt konnte ich Elmer verwenden vor kurzem ein brauchbares DLL erfolgreich zu generieren. Ihre Website hat ein Beispiel für den Aufbau einer DLL-Wrapper, der Python-Code lädt. Es ist ziemlich cool, weil Sie den Python-Code on the fly ändern können das DLL-Verhalten zu ändern, für das Debuggen.

Leider ist für mich, wollte ich ein tragbares DLL, die ohne Installation von Python funktionieren würde. Dieser Teil war nicht ganz nicht aus dem Kasten heraus arbeiten. Anstatt alle Schritte wiederholen, hier ist ein Link auf die Antwort mit den Schritten, die ich nahm: https://stackoverflow.com/a/ 24811840/3841168 . Ich musste python27.dll, elmer.dll und ein paar .pyd die zusammen mit meiner DLL zu verteilen; eine eignet .net Laufzeit wurde auch da der python27.dll benötigt in der Regel nicht statisch gelinkt. Es kann eine gewisse Art und Weise sein, um eine Schiffsladung von DLL einschließlich, aber ich habe nichts dagegen, mehrere DLLs zu verteilen, so dass ich auch graben nicht in sie zu viel.

Es sieht aus wie es ist möglich, eine COM-DLL von py2exe zu generieren:

http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer

  23     my_com_server_target = Target(
  24     description = "my com server",
  25     # use module name for ctypes.com dll server
  26     modules = ["dir.my_com_server"],
  27     # the following line embeds the typelib within the dll
  28     other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],
  29     # we only want the inproc (dll) server
  30     create_exe = False
  31     )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top