将Python编译为本机代码?

时间:2012-01-09 09:26:55

标签: python windows compiler-construction executable

  

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

是否可以将Python代码(加上其依赖项和解释程序库)编译为单个本机 Windows可执行文件( nothing 从Python文件中捆绑的else? (有点像Java的GNU编译器如何将Java编译成 native (humongous)可执行文件,其中包含真机代码中的所有内容。)

如果是这样,我该如何做呢?

(具体来说,py2exe 执行我想要的操作 - 它包含单独的 ZIP文件中的库,并且它包含解释器作为分开 DLL。)

注1:

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

注2:

仅当上述不可能时:

是否有可能至少从包含与所有库依赖项捆绑在一起的解释器的Python代码生成单个可执行文件,这样生成的可执行文件需要在运行之前自行提取到目标磁盘上?

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

2 个答案:

答案 0 :(得分:7)

Shed Skin可以将Python编译为C ++,但只能将其编译为受限制的子集。 Python的某些方面很难编译为本机代码。

答案 1 :(得分:1)

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

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

我怀疑你真正在问的是你是否可以编译成一个单独的.exe,它只依赖于你已经安装合理期望的库。所有这一切都取决于你愿意考虑什么基础系统的一部分?您能否假设安装了.Net framework 4或Silverlight?如果是这样,你可能想看看IronPython。

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