2022 年值得尝试的 6 个 Python 解释器

看看你的代码在与你习惯的解释器不同的解释器上的表现可能会很有趣。
5 位读者喜欢这篇文章。
Hands on a keyboard with a Python book

WOCinTech Chat。由 Opensource.com 修改。CC BY-SA 4.0

Python 是最流行的编程语言之一,需要一个解释器来执行 Python 代码定义的指令。与其他直接编译成机器代码的语言相比,解释器负责读取 Python 代码并将其指令翻译给 CPU 执行相关操作。市面上有几种解释器,在本文中,我将介绍其中的一些。

解释器入门

当谈到 Python 解释器时,通常指的是 /usr/bin/python 二进制文件。它允许你执行 .py 文件。
然而,解释只是其中一项任务。在 CPU 上实际执行一行 Python 代码之前,需要经过以下四个步骤

  1. 词法分析 - 人工编写的源代码被转换为一系列逻辑实体,即所谓的词法标记。
  2. 语法分析 - 在语法分析器中,检查词法标记的语法和文法。语法分析器的输出是抽象语法树 (AST)。
  3. 编译 - 编译器根据 AST 创建 Python 字节码。字节码由非常基本的、平台无关的指令组成。
  4. 解释 - 解释器获取字节码并执行指定的操作。

正如你所看到的,在采取任何实际操作之前,需要很多步骤。仔细看看不同的解释器是有意义的。

1. CPython

CPython 是 Python 的参考实现,也是许多系统上的默认实现。顾名思义,CPython 是用 C 语言编写的。
因此,可以用 C 语言编写扩展,从而使广泛使用的基于 C 的库代码可用于 Python。CPython 可在包括 ARM、iOS 和 RISC 在内的各种平台上使用。然而,作为该语言的参考实现,CPython 经过仔细优化,但并不专注于速度。

2. Pyston

Pyston 是 CPython 解释器的一个分支,它实现了性能优化。该项目将自己描述为标准 CPython 解释器的替代品,适用于大型、真实世界的应用程序,具有高达 30% 的加速潜力。由于缺少兼容的二进制包,Pyston 包必须在下载过程中重新编译。

3. PyPy

PyPy 是一个用 RPython(Python 的静态类型子集)编写的 Python 即时 (JIT) 编译器。与 CPython 解释器相比,PyPy 编译成机器代码,可以直接由 CPU 执行。PyPy 是 Python 开发人员的试验场,他们可以在这里更轻松地试验新功能。

PyPy 比参考 CPython 实现更快。由于 JIT 编译器的性质,只有长时间运行的应用程序才能从缓存中受益。 PyPy 可以作为 CPython 的替代品。但有一个缺点。C 扩展模块在很大程度上受到支持,但它们的运行速度比 Python 模块慢。PyPy 扩展模块是用 Python(而不是 C)编写的,因此 JIT 编译器能够优化它们。只要你的应用程序不依赖于不兼容的模块,PyPy 就可以很好地替代 CPython。项目网站上有一个专门页面详细描述了与 CPython 的区别:PyPy 和 CPython 之间的差异

4. RustPython

顾名思义,RustPython 是一个用 Rust 编写的 Python 解释器。虽然 Rust 编程语言相当新,但它越来越受欢迎,并且有望成为 C 和 C++ 的继任者。默认情况下,RustPython 的行为类似于 CPython 的解释器,但它也有一个 JIT 编译器,可以根据需要启用。另一个不错的功能是 Rust 工具链允许你直接编译到 WebAssembly,并且还允许你在浏览器中完全运行解释器。可以在 rustpython.github.com/demo 找到演示。

5. Stackless Python

Stackless Python 将自己描述为 Python 编程语言的增强版本。该项目基本上是 CPython 解释器的一个分支,它向该语言添加了微线程、通道和调度器。微线程允许你将代码组织成任务,从而让你并行运行代码。这种方法类似于使用 greenlet 模块的绿线程。通道可用于任务之间的双向通信。Stackless Python 的著名用户是大型多人在线角色扮演游戏 Eve Online

6. Micro Python

MicroPython 是面向微控制器的理想选择。它是一个精简的实现,只需要 16kB 的 RAM 和 256kB 的空间。由于它旨在用于嵌入式环境,MicroPython 的标准库只是 CPython 广泛的 STL 的一个子集。为了开发和测试,或者作为轻量级替代方案,MicroPython 也可以在普通的 x86 和 x64 机器上运行。MicroPython 适用于 Linux、Windows 以及许多微控制器。

性能

从设计上讲,Python 是一种天生速度较慢的语言。根据任务的不同,解释器之间的性能差异很大。要了解哪个解释器最适合特定任务,请参阅 pybenchmarks.org。使用解释器的另一种替代方案是将 Python 二进制代码直接编译成机器代码。例如,Nuitka 是可以将 Python 代码编译为 C 代码,然后再从 C 代码编译为机器代码的项目之一。然后使用普通的 C 编译器将 C 代码编译为机器代码。Python 编译器的主题非常广泛,值得单独写一篇文章。

总结

Python 是一种用于快速原型设计和自动化任务的优秀语言。此外,它易于学习,非常适合初学者。如果你通常坚持使用 CPython,那么看看你的代码在另一个解释器上的表现可能会很有趣。如果你使用 Fedora,你可以轻松测试其他一些解释器,因为软件包管理器已经提供了正确的二进制文件。查看 fedora.developer.org 了解更多信息。

标签
User profile image.
Stephan 是一位技术爱好者,他欣赏开源,因为它可以深入了解事物的工作原理。Stephan 在工业自动化软件这个大多是专有领域的公司担任全职支持工程师。如果可能,他会从事他基于 Python 的开源项目、撰写文章或骑摩托车。

3 条评论

不是很清楚,但我猜 Fedora 中的默认解释器是 CPython?

是的,但我强烈建议(正如我在几年前的《Python in a Nutshell》第 3 版以及现在正在制作过程的最后阶段的第 4 版中所做的那样——纸质版应该在年底前发布,电子书甚至更早)你安装自己的 CPython(或其他解释器),并为任何严肃的开发工作使用虚拟环境,而不是依赖系统提供的版本(或者,更糟糕的是,以任何方式篡改所述版本)。

回复 作者 Greg P

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.