将Python编译为机器代码是否可行?

将Python(可能通过中间C表示形式)编译为机器代码的可行性如何?

大概需要链接到Python运行时库,并且Python标准库中Python本身的任何部分也需要进行编译(并链接)。

另外,如果您想对表达式进行动态求值,则需要捆绑Python解释器,但是也许不允许这样做的Python子集仍然有用。

它会提供任何速度和/或内存使用优势吗?大概可以避免Python解释器的启动时间(尽管共享库在启动时仍需要加载)。


缥缈止盈
浏览 865回答 3
3回答

慕标5832272

就像@Greg Hewgill所说的那样,有很多理由说明为什么这并不总是可能的。但是,某些类型的代码(例如非常算法的代码)可以变成“真实的”机器代码。有几种选择:使用Psyco,它可以动态发出机器代码。不过,您应该仔细选择要转换的方法/函数。使用Cython,这是一种类似 Python的语言,已编译为Python C扩展使用PyPy,它具有从RPython(Python 的受限子集,不支持Python的某些最“动态”功能)到C或LLVM的转换器。PyPy仍处于高度实验阶段并非所有扩展名都存在之后,您可以使用现有软件包之一(freeze,Py2exe,PyInstaller)将所有内容放入一个二进制文件中。总而言之:您的问题没有一般性的答案。如果您具有对性能至关重要的Python代码,请尝试使用尽可能多的内置功能(或询问“如何使我的Python代码更快”问题)。如果那没有帮助,请尝试识别代码并将其移植到C(或Cython)并使用扩展名。

潇潇雨雨

PyPy是一个在Python中重新实现Python的项目,使用对本机代码的编译作为实现策略之一(其他方法是具有JIT的VM,使用JVM等)。他们的编译C版本平均比CPython运行慢,但对于某些程序则快得多。Shedskin是一个实验性的Python到C ++编译器。Pyrex是专门为编写Python扩展模块而设计的语言。它旨在弥合Python的精美,高级,易于使用的世界与C的混乱,低级的世界之间的鸿沟。
打开App,查看更多内容
随时随地看视频慕课网APP