13

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

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

4

5 回答 5

6

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

  • 看看 py2exe 中的 zipextimporter 模块。它有助于从 zip 导入 pyd 文件。
  • 使用它,您也许可以使用原始 python-api 在您自己的应用程序/dll 中加载 py2exe 的输出文件。(如果可以并且愿意,请使用 boost::python)
  • 而且,由于 py2exe 的输出文件是一个 zip,您可以将其附加到 dll 的末尾,从而使整个内容更加集成。(也适用于 jar 文件的旧技巧。)

没有经过测试,但我认为这个理论是合理的。

本质上,您在 dll 中重新实现了 py2exe 的输出可执行文件的 main()。

于 2009-02-28T22:13:25.370 回答
5

我怀疑 py2exe 会这样做,因为它的架构是围绕提供一个引导 .exe 来推出 python 解释器并运行它。

但为什么不直接将 Python 嵌入 C 代码中,然后将该代码编译为 DLL?

于 2009-02-15T18:36:51.130 回答
4

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

使用 Python-C API 创建本机库可能需要更多工作(定义 C/C++ 接口)。使用Elmer可能会更容易一些。

于 2009-02-15T07:27:15.103 回答
1

对于后代,我最近能够使用Elmer成功生成可用的 DLL。他们的网站有一个构建加载 python 代码的 DLL 包装器的示例。这很酷,因为您可以动态更改 python 代码以更改 DLL 行为以进行调试。

不幸的是,对我来说,我想要一个无需安装 python 就可以工作的可移植 DLL。那部分并不是开箱即用的。这里没有重复所有步骤,而是链接到我采取的步骤的答案:https ://stackoverflow.com/a/24811840/3841168 。我确实必须分发 python27.dll、elmer.dll 和几个 .pyd 以及我的 .dll;由于 python27.dll 通常不是静态链接的,因此还需要适当的 .net 运行时。可能有一些方法可以包含大量 dll,但我不介意分发多个 DLL,所以我没有深入研究它。

于 2014-10-02T14:25:54.987 回答
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     )
于 2014-06-02T20:27:03.450 回答