py2exe生成dll?

有没有办法使用py2exe或其他方法来生成DLL文件,而不是exe文件?

我想基本上创build一个普通的函数,但正常的win32 DLL,但这些函数将被编码在Python而不是C ++。

Solutions Collecting From Web of "py2exe生成dll?"

我想你可以通过做一些黑客来解决这个问题:

  • 看看py2exe中的zipextimporter模块。 它有助于从zip导入pyd文件。
  • 使用它,你可能能够使用原始的python-api在你自己的app / dll中加载py2exe的输出文件。 (使用boost :: python如果你可以和想要的)
  • 而且,由于py2exe的输出文件是一个压缩文件,所以你可以把它附加在你的dll的最后,使整个事情更加集成。 (也是和jar文件一起工作的老技巧。)

没有测试,但我认为理论是正确的。

本质上,你重新实现py2exe的输出可执行文件的main()在你的DLL。

我怀疑py2exe是这样做的,因为它的体系结构提供了一个引导.exe,推出python解释器并运行它。

但是,为什么不把Python嵌入到C代码中,并将其作为DLL编译?

我不知道py2exe能够做到这一点,因为我相信它实际上并没有将对象符号从你的Python代码中取出,而只是将编译后的字节码嵌入到Python运行时的可执行文件中。

创建本地库可能需要使用Python-C API进行更多的工作(定义C / C ++接口)。 为此,使用Elmer可能会稍微容易些。

对于后人,我能够使用Elmer最近成功地生成一个可用的DLL。 他们的网站有一个构建加载python代码的DLL包装的例子 。 这很酷,因为你可以随时改变Python代码来改变DLL的行为以进行调试。

不幸的是,对于我来说,我想要一个可移植的DLL,不需要安装python。 这部分并没有很好的工作。 而不是重复所有的步骤,这里是一个链接到我采取的步骤的答案: https : //stackoverflow.com/a/24811840/3841168 。 我不得不分发python27.dll,elmer.dll和一些.pyd以及我的.dll文件。 因为python27.dll通常不是静态链接的,所以也需要一个拨号的.net运行时。 可能有一些解决方法,包括一堆dll的,但我不介意分发多个DLL,所以我没有深入挖掘它。

它看起来像是可以从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 )