Question

Est-il possible en utilisant py2exe ou une autre méthode pour générer des fichiers dll au lieu des fichiers exe?

Je voudrais créer essentiellement une dll win32 normale avec des fonctions normales, mais ces fonctions sera codé en Python au lieu de c ++.

Était-ce utile?

La solution

Je pense que vous pouvez résoudre ce problème en faisant quelques bidouillages:

  • Jetez un oeil sur le module zipextimporter dans py2exe. Il aide à l'importation de fichiers PYD à partir d'un zip.
  • L'utilisation que vous pourriez être en mesure de charger le fichier de sortie de py2exe dans votre propre application / dll en utilisant python brut-api. (Utilisez boost :: python si vous le pouvez et que vous voulez)
  • Et, depuis outputfile de py2exe est un zip, vous pouvez le joindre à la fin de votre dll, ce qui rend la chose encore plus intégrée. (Vieux truc qui fonctionne avec pot-fichiers aussi.)

Non testé, mais je pense que la théorie est saine.

Pour l'essentiel, vous réimplémentez principal () dans votre dll exécutable de sortie de py2exe.

Autres conseils

Je doute que py2exe fait cela, car il est architecturé autour de fournir un .exe qui roule bootstrapping le interpréteur python et l'exécute.

Mais pourquoi ne pas simplement intégrer Python dans le code C et compiler ce code comme une DLL?

Je ne suis pas au courant de py2exe être en mesure de le faire, car je crois que cela ne fait pas vraiment des symboles de l'objet de votre code Python, mais intègre tout l'octet code compilé dans un fichier exécutable avec le moteur d'exécution Python).

Création d'une bibliothèque native peut exiger un peu plus de travail (pour définir l'interface C / C ++ pour les choses) avec l'API Python-C. Il peut être un peu plus facile en utilisant Elmer pour cela.

Pour la postérité, j'ai pu utiliser Elmer pour générer avec succès une DLL utilisable récemment. Leur site a un exemple de construction d'une enveloppe de DLL qui charge le code python . Il est assez cool parce que vous pouvez modifier le code python à la volée pour changer le comportement de DLL pour le débogage.

Malheureusement, pour moi, je voulais une DLL portable qui fonctionne sans installer python. Cette partie ne ne fonctionnait pas tout à fait hors de la boîte. Plutôt que de répéter toutes les étapes, voici un lien vers la réponse aux étapes de mon travail: https://stackoverflow.com/a/ 24811840/3841168 . J'ai eu à distribuer python27.dll, elmer.dll et quelques années .pyd le long de mon .dll; un runtime .NET approprié était également nécessaire puisque le python27.dll est généralement pas lié statiquement. Il peut y avoir autour, y compris un bateau plein de dll, mais je ne me dérangerait pas distribuer plusieurs DLL, donc je ne creuser trop.

On dirait qu'il est possible de générer une DLL COM à partir py2exe:

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     )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top