Python 是大众的编程语言,是最常用的三种语言之一。 Python 的简单语法允许初学者甚至孩子在几天内编写代码。

在过去的十年中,开发人员已经开始在许多领域使用 Python 进行编程,包括数据科学、机器学习、Web 开发、科学计算、人工智能、教育领域,甚至游戏开发。

在我们详细介绍Cython vs Python vs PyPy之前,请了解 Python 是一种解释型语言,与 C 和 C++ 等编译型语言相比相当慢。这使得 Python 程序本质上很慢,并限制了 Python 在 CPU 密集型应用程序中的使用。

为了克服 Python 的性能问题,开发人员创建了许多替代的Python 编译器将 Python 代码编译成其他语言,如 C、JavaScript 甚至机器代码。

备用编译器的另一个优点是您可以在 Python 代码中利用现有的其他语言库并将它们一起编译。我们将很快了解更多细节。

Nuitka vs Cython vs PyPy

虽然有许多流行的 Python 编译器,但本文将主要关注 Nuitka、Cython 和 PyPy 的功能和特性。

我们还将看看这三个编译器如何相互比较,以及这些编译器服务的各种用例。

让我们从 Nuitka 开始——

什么是 Nuitka?

Nuitka 本身是用 Python 编写的,它以 Python 模块作为输入,并提供 c 程序作为输出。输出针对 libpython 和其他静态 c 文件执行,并作为扩展模块或可执行文件工作。

重要的是要知道,Nuitka 编译的输出经过高度优化并且比原始 python 程序更快,但它仍然无法与从纯 C 代码创建的可执行文件的性能相匹配。与基本的 Python 代码解释相比,许多开发人员声称使用 Nuitka 编译程序的速度提高了 4 倍。

Nuitka 最好的部分是它兼容几乎所有 Python 版本,包括 3.3、3.9、2.6、2.7 等。

到目前为止,它的开发也非常活跃,开发人员的目标是将 Nuitka 转换为可以从 Python 代码中提供本机 C 性能的编译器。

在我们继续讨论 PyPy 之前,请注意 Nuitka 相对较新,在用户采用和使用方面仍然落后于 Cython 和 PyPy,但它正在迅速取得进展,而且看起来很有希望。

您可以下载适用于各种平台的 Nuitka 当前稳定版本,并在 Windows、Debian、Ubuntu、Mint、CentOS、macOS、Fedore 和许多其他平台上安装/设置。您还需要在您的机器上安装 C 编译器。

在此处阅读更多信息 –Nuitka

什么是 PyPy

与 Nuitka 一样,PyPy 也支持 Python 2 和 Python 3 规范。 PyPy 是默认 Python 编译器 CPython 最流行的替代品。

PyPy 编译器最初是为了加速 Python 执行而创建的,为此,它利用了即时编译 (JIT)。基于 JIT 的编译器将原始代码作为输入,并在执行之前将代码转换为机器代码。

执行速度并不是 PyPy 获得的唯一优势,它还可以减少内存使用,并提供了一个选项来编写无堆栈应用程序,就像无堆栈 python 一样。

同样重要的是要注意,PyPy 不会在短期运行的进程上为您提供性能或内存利用优势。但是,当您有长时间运行的进程时,性能提升非常明显。

运行时间短的进程缺乏性能主要是因为 JIT 编译器需要时间来预热,因此会带来固有的初始化开销。

内存使用也是如此,对于小型程序,JIT 所需的额外内存超过了从执行编译代码中获得的任何好处。与原始 python 代码执行相比,开发人员已经尝试使用 PyPy 获得高达 15 倍的性能。

您可以在几乎所有流行的操作系统上运行 PyPy,包括 Linux、Mac OX X、Windows、FreeBSD 和 OpenBSD。

在此处阅读有关 Python Pypy 的更多信息 –PyPy

什么是 Cython?

Cython 完全是另一种动物,经常与默认的 Python 实现——CPython 混淆。您可能想查看流行的 Cython vs CPython 评论,以了解两者之间的主要区别。

稍微澄清一下,Cython 是 Python 的超集,允许开发人员调用 C/C++ 函数并从 Python 代码本身声明 C 类型。这使开发人员能够为 Python 编写 C 扩展,而无需编写更难的 C 程序。

看到许多流行的库(如 SciPy 和 Pandas)都是用 Cython 编写的,这并不奇怪。

关于 Cython 的一些额外说明如下 -

  • 使用 Python 和 C 编写混合 Cython 应用程序 - 更像是一种基于 Pyrex 的编程语言。 - 允许在 Python 语法本身中声明静态类型 - 生成可以使用流行的 C 编译器编译成高性能机器代码的 C 代码。

Cython 似乎与日俱增,开发人员打算通过确保与 Python 100% 兼容,使其成为官方 Python 发行版的一部分。

在此处阅读有关 Cython 的更多信息 –Cython

Nuitka vs Cython

在我在这里添加几行之前,请注意,这不是关于哪一个更好,因为两者都服务于不同的用例。 Cython 拥有自己的生态系统,而 Nuitka 仍在追赶,甚至可能超越 Cython。谈到性能,与 Nuitka 相比,Cython 提供了大约 5 倍的执行速度。这种说法可能会因不同的代码而异,但如果开发人员充分利用 Cython 的特性,比如在 Python 代码中使用 C 类型,这在 Nuitka 中是不可能的,那么这种说法在很大程度上是正确的。

结语:Nuitka vs Cython vs PyPy

从统计数据来看,Cython 似乎是使用最广泛的,但 PyPy 和 Nuitka 也正在通过新功能取得进展。

此外,尽管存在差异,但三者仍然努力提供与 python 规范的 100% 兼容性,并旨在成为标准 python 发行版的一部分。

这使我们结束了 Nuitka 与 Cython 与 PyPy 的辩论。此外,这种比较并没有得出任何赢家,因为这三者根本不同,并试图解决不同的问题。

此外,这些似乎都不会很快过时,因此投入时间会增加您的知识。请通过评论与我们的读者分享您使用这些编译器的经验。如果您喜欢这篇文章,也请在社交媒体渠道上分享。谢谢你的阅读!!

你可能还喜欢 -

Django 框架教程和课程

Python Flask 教程和课程

最佳 Python IDE 和代码编辑器

Cython vs Python vs CPython

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐