Existe-t-il un moyen d'utiliser py2exe ou une autre méthode pour générer des fichiers dll au lieu de fichiers exe? Je voudrais créer une DLL win32 normale avec des fonctions normales, mais ces fonctions seraient codées en python au lieu de C++.py2exe pour générer des DLL?
Répondre
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. En utilisant cela, vous pourrez peut-être charger le fichier de sortie de py2exe dans votre propre app/dll en utilisant python-api. (Utilisez boost :: python si vous le pouvez et vous voulez)
- Etant donné que le fichier de sortie de py2exe est un fichier zip, vous pouvez l'attacher à la fin de votre DLL, ce qui rend l'ensemble encore plus intégré. (Vieux truc qui fonctionne aussi avec les fichiers jar.)
Non testé, mais je pense que la théorie est solide. Pour l'essentiel, vous réimplémentez le fichier main() de l'exécutable de sortie de py2exe dans votre DLL.
Je ne suis pas au courant que py2exe
est capable de le faire, car je pense qu'il ne fait pas de symboles d'objets de votre code Python, mais qu'il incorpore juste le code octet compilé dans un exécutable avec l'exécution Python).
La création d'une bibliothèque native peut nécessiter un peu plus de travail (pour définir l'interface C/C++) avec l'API Python-C. Il peut être plus facile d'utiliser Elmer pour cela.
Je doute que py2exe le fasse, car il est structuré autour d'un .exe d'amorçage qui déploie l'interpréteur python et l'exécute.
Mais pourquoi ne pas simplement intégrer Python dans le code C et compiler ce code en tant que DLL?
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 )
Pour la postérité, j'ai pu utiliser Elmer pour générer avec succès une DLL utilisable récemment. Leur site has an example of building a DLL wrapper that loads python code. C'est plutôt cool parce que vous pouvez changer le code python à la volée pour changer le comportement de la DLL pour le débogage. Malheureusement, pour ma part, je voulais une DLL portable qui fonctionnerait sans installer Python. Cette partie n'a pas fonctionné tout à fait hors de la boîte. Plutôt que de répéter toutes les étapes, voici un lien vers la réponse avec les étapes que j'ai suivies: https://stackoverflow.com/a/24811840/3841168. J'ai dû distribuer python27.dll, elmer.dll et un couple de .pyd avec mon .dll; Un .net runtime approprié était également nécessaire puisque le python27.dll n'est généralement pas lié statiquement. Il peut y avoir un moyen de contourner le problème, y compris un chargement de dll, mais cela ne me dérange pas de distribuer plusieurs DLL, donc je n'ai pas trop creusé dedans.
- 1. py2exe ne parvient pas à générer un exécutable
- 2. py2exe setup.py avec des icônes
- 3. Générer par programme une DLL C Win32
- 4. Regrouper des exécutables supplémentaires avec py2exe
- 5. py2exe: Compilé Python Windows L'application ne fonctionnera pas à cause de DLL
- 6. Regroupement de PyQwt avec py2exe
- 7. py2exe incluant les DLLs MSVC dans le fichier .exe
- 8. Problème de service Windows py2exe
- 9. Linq to XML pour générer des DDL
- 10. générer des graphiques pour le site Web?
- 11. requête SQL pour générer des données données
- 12. Script Xcode pour générer/synthétiser des propriétés
- 13. Bibliothèque Python pour générer des fichiers VCF?
- 14. Bibliothèque Pure Python pour générer des Identicons?
- 15. générer des scripts SQL
- 16. Py2Exe - "La configuration de l'application est incorrecte."
- 17. Comment générer des fichiers pdb pour des versions parallèles?
- 18. Générer des couleurs uniques
- 19. générer des licences.licx
- 20. Quels sont les avantages/inconvénients de py2exe
- 21. générateur de py2exe ne fonctionne pas
- 22. Spécification du chemin d'accès relatif dans py2exe
- 23. Comment empaqueter un programme Twisted avec py2exe?
- 24. Comment puis-je obtenir tlbimp pour ne pas générer automatiquement des assemblys pour les types référencés?
- 25. DllRegisterServer pour C# dll?
- 26. configuration fichier pour DLL
- 27. asp.net générer des fichiers .tmp
- 28. Générer des numéros de série
- 29. Générer automatiquement des entités Hibernate
- 30. Comment générer des partitions entières?
py2exe a 1 chemin de sortie de code, le principal(). Avez-vous des idées sur un moyen de spécifier les fonctions/classes exportées avec du code python uniquement? En supposant que j'ai fait une sorte d'utilitaire similaire py2dll –
Non. Je ne pense pas que vous pouvez le faire sans écrire quelques C.Je pensais que vous lanceriez py2exe comme d'habitude, et utiliserais sa sortie de bibliothèque, mais codez votre propre DLL, qui exporte une fonction 'my_pymain' qui fait quelque chose de similaire aux exécutables de py2exe. Vous devriez être capable de voler ce code de py2exe. – Macke