【问题标题】:Compiling Python to native code? [duplicate]将 Python 编译为本机代码? [复制]
【发布时间】:2012-02-05 20:34:03
【问题描述】:

可能重复:
Is it feasible to compile Python to machine code?

是否可以将 Python 代码(加上它的依赖项,加上解释器库)编译成单个 本机 Windows 可执行文件(nothing 其他捆绑在一起)来自 Python 文件? (有点像用于 Java 的 GNU 编译器如何将 Java 编译成 native(巨大的)可执行文件,其中包含真实机器代码中的所有内容。)

如果是这样,我该怎么做?

(具体来说,py2exe not 做我想做的事——它将库包含在一个 单独的 ZIP 文件中,并将解释器作为 单独的 DLL。)

注1:

强调一下,我不是要求“自解压存档”、“可执行打包程序”或其他通过捆绑“作弊”的方式exe 中的文件——我正在寻找能够真正将 Python 转换为本机可执行文件的东西,就像 GCJ 为 Java 所做的那样。

注2:

仅当上述可行时:

是否有可能从包含解释器以及所有库依赖项的 Python 代码中至少生成一个 single 可执行文件,以便生成的可执行文件 不需要运行前自解压到目标磁盘?

在这种情况下,“编译”要求放宽了:代码是否实际编译为机器代码并不重要(它可以简单地作为文本资源嵌入到目标可执行文件中),但结果必须是一个单个 exe 文件[没有别的],可以独立运行,特别是在运行前不需要解压/安装任何东西到目标磁盘上。

【问题讨论】:

  • 我认为您可以使用 Python 创建本机 .net 二进制文件,但它们不会是单一的(将取决于 .net 运行时环境)。
  • @PauloScardine:是的,我也不在寻找那个。 :) 感谢您指出。

标签: python windows compiler-construction executable


【解决方案1】:

Shed Skin 可以将 Python 编译为 C++,但只能是其中的一部分。 Python 的某些方面很难编译为本机代码。

【讨论】:

  • +1 看起来正是我需要的;我一定会试一试的。
  • Shoot... 看起来生成的可执行文件仍然依赖于libpcre-0.dlllibgcc_s_dw2-1.dlllibstdc++-6.dll。除非我可以通过与 GCC 的静态链接来摆脱它们,否则这是行不通的......
【解决方案2】:

简短的回答是否定的,这几乎适用于任何语言:您编写的任何程序都将依赖于一些外部库,即使只是 Windows 系统 DLL。

如果您编写了一个 C 程序并使用 Microsoft 的编译器对其进行编译,您仍然需要安装 C 运行时库。它们可能已经在大多数系统上,但不能保证。同样,即使您设法编译了一个静态链接到其库的 C Python 解释器,您仍然必须从某个地方获取 C 运行时。

我怀疑您真正要问的是您是否可以编译为单个 .exe,该 .exe 仅取决于您合理预期已经安装的库。所以这一切都取决于你愿意考虑的基本系统的一部分?您可以假设安装了 .Net framework 4 或 Silverlight 吗?如果是这样,您可能想看看 IronPython。

同样,pypy 可以使用 Visual Studio 工具链或 MinGW 构建,但我很确定在这两种情况下,您在运行时仍需要一些外部库。

【讨论】:

  • 你仍然必须从某个地方获取 C 运行时我不确定我是否得到你想说的,但你显然可以静态链接到 C 运行时任何其他库。
  • 我想说的是,现在大多数编译器都默认动态链接库。我认为 Visual Studio 仍然可以选择静态链接到 C 运行时,但并非所有编译器都会为您提供该选项。即使他们这样做了,如果库作为 DLL 和导入库提供,您仍然会有一些库无法获得该选项。
  • @Duncan 我不是 C/C++ 人,但我很确定你也可以使用 GCC 进行静态链接,但我不明白为什么它不可能。跨度>
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多