py2exe生成dll?

时间:2009-02-15 07:06:26

标签: python windows dll py2exe

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

我想基本上用普通函数创建一个普通的win32 dll,但是这些函数将用python而不是c ++编写。

5 个答案:

答案 0 :(得分:6)

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

  • 看看py2exe中的zipextimporter模块。它有助于从zip导入pyd文件。
  • 使用它,你可以使用raw python-api在你自己的app / dll中加载py2exe的输出文件。 (如果可以的话,请使用boost :: python)
  • 并且,由于py2exe的outputfile是一个zip,你可以在dll的末尾附加它,使整个事情更加集成。 (也适用于jar文件的老技巧。)

未经测试,但我认为理论是合理的。

基本上,你在你的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     )