将Python编译为本地代码?

12 投票
2 回答
12094 浏览
提问于 2025-04-17 09:50

可能的重复问题:
将Python编译成机器码可行吗?

有没有可能把Python代码(加上它需要的库和解释器)编译成一个单独的、本地Windows可执行文件(里面什么都不带)?就像GNU编译器把Java编译成一个本地的(超级大的)可执行文件,里面包含所有的机器码一样。

如果可以的话,我该怎么做呢?

(特别是,py2exe并不能满足我的需求——它会把库放在一个单独的ZIP文件里,还会把解释器放在一个单独的DLL文件里。)

注意 1:

我想强调的是,我不是在找“自解压缩的压缩包”、“可执行打包工具”或者其他什么“作弊”的方法来把文件打包进exe里——我想要的是一种真正能把Python转换成本地可执行文件的方式,就像GCJ对Java所做的那样。

注意 2:

只有在上述情况可行的情况下:

有没有可能至少生成一个单独的可执行文件,里面包含了解释器和所有库依赖,这样生成的可执行文件在运行之前不需要在目标磁盘上自解压?

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

2 个回答

1

简单来说,答案是否定的,这几乎适用于任何编程语言:你写的程序总是会依赖一些外部库,即使只是Windows系统自带的DLL文件。

比如说,如果你用微软的编译器写了一个C语言程序并进行了编译,你仍然需要安装C运行时库。大多数系统上可能已经有这些库,但这并不是一定的。同样,即使你成功地编译了一个与其库静态链接的C语言Python解释器,你还是得从某个地方获取C运行时。

我猜你真正想问的是,能不能编译成一个只依赖于你认为已经安装的库的单个.exe文件。那么这就要看你愿意把哪些东西算作基础系统了。你能假设.Net框架4或Silverlight已经安装吗?如果可以的话,你可能想看看IronPython。

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

7

Shed Skin 是一个可以把 Python 代码转换成 C++ 代码的工具,但它只能处理 Python 的一部分功能。因为 Python 有些特性很难直接转换成机器能理解的代码。

撰写回答