最近几天,我在玩弄一个叫做Nuitka的工具,它可以将Python编译成可执行的C/C++程序。
我还没有发现任何与PyPy相比较的Nuitka的速度优势。那么,Nuitka的意义是什么?难道我错过了什么吗?
Nuitka和PyPy有非常不同的目标。
Nuitka对您的Python项目进行Ahead Of Time(AOT)编译,使用Python C-API将其编译成C语言。因此,它更类似于Cython。尽管这是一个年轻的项目,但令人印象深刻的是已经实现了与庞大的Python语言规范的完全兼容性。下一步将是启用编译器进程中的优化,就像gcc -O3
一样。请注意,Nuitka用于将您的Python代码转换为可执行文件。然后,您可以通过对原始Python代码进行某种程度的混淆来“发布”可执行文件。
PyPy对正在运行的代码进行Just In Time(JIT)编译,将其编译为汇编语言。它跟踪运行的代码,识别热点,并生成程序的热部分的更快版本。它也具有与Python语言规范的完全兼容性。它不会提前转换您的Python代码,因此您将Python代码作为最终产品“发布”。
我期望这两个项目都将继续改进执行速度,但它们针对非常不同的需求。
Nuitka:
Nuitka是用Python编写的,它将Python模块作为输入,并提供C程序作为输出。该输出与libpython和其他静态C文件一起执行,可作为扩展模块或可执行文件。
PyPy:
与Nuitka类似,PyPy也支持Python 2和Python 3规范。 PyPy是CPython的最流行替代品,默认Python编译器。