将Python编译为本地代码?
可能的重复问题:
将Python编译成机器码可行吗?
有没有可能把Python代码(加上它需要的库和解释器)编译成一个单独的、本地Windows可执行文件(里面什么都不带)?就像GNU编译器把Java编译成一个本地的(超级大的)可执行文件,里面包含所有的机器码一样。
如果可以的话,我该怎么做呢?
(特别是,py2exe
并不能满足我的需求——它会把库放在一个单独的ZIP文件里,还会把解释器放在一个单独的DLL文件里。)
注意 1:
我想强调的是,我不是在找“自解压缩的压缩包”、“可执行打包工具”或者其他什么“作弊”的方法来把文件打包进exe
里——我想要的是一种真正能把Python转换成本地可执行文件的方式,就像GCJ对Java所做的那样。
注意 2:
只有在上述情况不可行的情况下:
有没有可能至少生成一个单独的可执行文件,里面包含了解释器和所有库依赖,这样生成的可执行文件在运行之前不需要在目标磁盘上自解压?
在这种情况下,“编译”的要求可以放宽:不管代码是否真的编译成机器码(它也可以简单地作为文本资源嵌入到目标可执行文件中),但结果必须仍然是一个单独的 exe
文件[而且什么都没有],可以独立运行,特别是不需要在运行之前解压/安装任何东西到目标磁盘上。
2 个回答
简单来说,答案是否定的,这几乎适用于任何编程语言:你写的程序总是会依赖一些外部库,即使只是Windows系统自带的DLL文件。
比如说,如果你用微软的编译器写了一个C语言程序并进行了编译,你仍然需要安装C运行时库。大多数系统上可能已经有这些库,但这并不是一定的。同样,即使你成功地编译了一个与其库静态链接的C语言Python解释器,你还是得从某个地方获取C运行时。
我猜你真正想问的是,能不能编译成一个只依赖于你认为已经安装的库的单个.exe文件。那么这就要看你愿意把哪些东西算作基础系统了。你能假设.Net框架4或Silverlight已经安装吗?如果可以的话,你可能想看看IronPython。
同样,pypy可以用Visual Studio工具链或MinGW来构建,但我敢肯定在这两种情况下,你仍然需要一些外部库来运行。
Shed Skin 是一个可以把 Python 代码转换成 C++ 代码的工具,但它只能处理 Python 的一部分功能。因为 Python 有些特性很难直接转换成机器能理解的代码。