为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

缥缈止盈 2019-12-25 14:19:54
将Python(可能通过中间C表示形式)编译为机器代码的可行性如何?大概需要链接到Python运行时库,并且Python标准库中Python本身的任何部分也需要进行编译(并链接)。另外,如果您想对表达式进行动态求值,则需要捆绑Python解释器,但是也许不允许这样做的Python子集仍然有用。它会提供任何速度和/或内存使用优势吗?大概可以避免Python解释器的启动时间(尽管共享库在启动时仍需要加载)。
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

就像@Greg Hewgill所说的那样,有很多理由说明为什么这并不总是可能的。但是,某些类型的代码(例如非常算法的代码)可以变成“真实的”机器代码。

有几种选择:

  • 使用Psyco,它可以动态发出机器代码。不过,您应该仔细选择要转换的方法/函数。

  • 使用Cython,这是一种类似 Python的语言,已编译为Python C扩展

  • 使用PyPy,它具有从RPython(Python 的受限子集,不支持Python的某些最“动态”功能)到C或LLVM的转换器。

    • PyPy仍处于高度实验阶段

    • 并非所有扩展名都存在

之后,您可以使用现有软件包之一(freeze,Py2exe,PyInstaller)将所有内容放入一个二进制文件中。

总而言之:您的问题没有一般性的答案。如果您具有对性能至关重要的Python代码,请尝试使用尽可能多的内置功能(或询问“如何使我的Python代码更快”问题)。如果那没有帮助,请尝试识别代码并将其移植到C(或Cython)并使用扩展名。


查看完整回答
反对 回复 2019-12-25
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

PyPy是一个在Python中重新实现Python的项目,使用对本机代码的编译作为实现策略之一(其他方法是具有JIT的VM,使用JVM等)。他们的编译C版本平均比CPython运行慢,但对于某些程序则快得多。


Shedskin是一个实验性的Python到C ++编译器。


Pyrex是专门为编写Python扩展模块而设计的语言。它旨在弥合Python的精美,高级,易于使用的世界与C的混乱,低级的世界之间的鸿沟。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 858 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信