当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将Python编译为机器代码是否可行?》经验,为你挑选了8个好方法。

将Python(可能通过中间C表示)编译成机器代码是否可行?

据推测,它需要链接到Python运行时库,Python标准库的任何Python部分本身都需要编译(并链接).

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

它会提供任何速度和/或内存使用优势吗?据推测,Python解释器的启动时间将被消除(尽管共享库仍需要在启动时加载).



1> Torsten Mare..:

正如@Greg Hewgill所说,有充分的理由说明为什么这并不总是可行的.但是,某些类型的代码(如非常算法代码)可以转换为"真正的"机器代码.

有几种选择:

使用Psyco,动态发出机器代码.但是,您应该仔细选择要转换的方法/功能.

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

使用PyPy,它有一个来自RPy​​thon(Python的一个受限制的子集,不支持Python的一些最"动态"特性)到C或LLVM的转换器.

PyPy仍然是高度实验性的

并非所有扩展都会出现

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

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


Pypy是Psyco的继承者

2> cleg..:

尝试使用ShedSkin Python-to-C++编译器,但它远非完美.还有Psyco - Python JIT,如果只需要加速.但恕我直言,这不值得努力.对于速度至关重要的代码部分,最佳解决方案是将它们编写为C/C++扩展.


仅供参考,ShedSkin放弃了Windows支持.
@sorin:嗯,今天它支持windows ... http://code.google.com/p/shedskin/downloads/detail?name=shedskin-0.9.1.exe&can=2&q=

3> Ramchandra A..:

py2c(http://code.google.com/p/py2c)可以将python代码转换为c/c ++我是py2c的独立开发人员.



4> pdc..:

PyPy是一个在Python中重新实现Python的项目,使用编译到本机代码作为实现策略之一(其他是使用JIT的VM,使用JVM等).他们编译的C版本平均比CPython慢​​,但对某些程序来说要快得多.

Shedskin是一个实验性的Python-to-C++编译器.

Pyrex是专为编写Python扩展模块而设计的语言.它旨在弥合优秀的,高级的,易于使用的Python世界与凌乱的低级别C世界之间的差距.


Cython是Pyrex更广泛使用,更积极开发的友好型叉子.

5> bcattle..:

Nuitka是一个Python到C++编译器,它链接到libpython.这似乎是一个相对较新的项目.作者声称在pystone基准测试中CPython 的速度有所提高.



6> ConcernedOfT..:

Pyrex是Python语言的一个子集,它编译为C语言,由最初为Python 构建列表推导的人完成.它主要是为构建包装器而开发的,但可以在更一般的环境中使用. Cython是一个更积极维护的派雷克斯叉.


Cython是Pyrex更广泛使用,更积极开发的友好型叉子.

7> Greg Hewgill..:

这似乎是合理的第一眼,但是也有很多的Python中普通的东西没有直接可映射到一个C表示没有带过很多Python运行时支持.例如,想到鸭子打字.Python中用于读取输入的许多函数可以采用文件或类文件对象,只要它支持某些操作,例如.read()或readline().如果你仔细想想怎样才能映射这种类型到C的支持,你就开始正是想象各种各样的事情,Python运行时系统已经做.

有一些实用程序,如py2exe,它将Python程序和运行时捆绑到一个可执行文件中(尽可能).



8> serge-sans-p..:

一些额外的参考:

https://github.com/dropbox/pyston是Dropbox开发的Python的JIT编译器

http://pythran.readthedocs.io/是用于科学计算的C++转换器的编译时python

https://github.com/cosmo-ethz/hope是一个用于科学计算的C++翻译器的JIT python

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有