有没有办法使用py2exe或其他方法生成dll文件而不是exe文件?
我想基本上用普通函数创建一个普通的win32 dll,但是这些函数将用python而不是c ++编写。
答案 0 :(得分:6)
我认为你可以通过做一些黑客来解决这个问题:
未经测试,但我认为理论是合理的。
基本上,你在你的dll中重新实现py2exe的输出可执行文件的main()。
答案 1 :(得分:5)
我怀疑py2exe是否这样做,因为它的架构是提供一个引导.exe,它会推出python解释器并运行它。
但为什么不将Python嵌入C代码中,并将该代码编译为DLL?
答案 2 :(得分:4)
我不知道py2exe
能够做到这一点,因为我相信它实际上并没有从Python代码中创建对象符号,而只是将编译后的字节代码嵌入到Python的可执行文件中运行时)。
使用Python-C API创建本机库可能需要更多工作(以定义事物的C / C ++接口)。使用Elmer可能会更容易一些。
答案 3 :(得分:1)
对于后代,我最近能够使用Elmer成功生成可用的DLL。他们的网站has an example of building a DLL wrapper that loads python code。这很酷,因为您可以动态更改python代码以更改DLL行为以进行调试。
不幸的是,对我来说,我想要一个可以在不安装python的情况下工作的可移植DLL。那部分并没有完全开箱即用。不是重复所有步骤,而是通过我采取的步骤找到答案的链接:https://stackoverflow.com/a/24811840/3841168。 我确实需要发布python27.dll,elmer.dll和几个.pyd以及我的.dll;由于python27.dll通常不是静态链接,因此还需要一个适当的.net运行时。可能有一些方法,包括一堆dll的,但我不介意分发多个DLL,所以我没有深入挖掘它。
答案 4 :(得分:0)
看起来可以从py2exe生成COM DLL:
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 )