Python解释器汇总

Python 是一门解释型语言,Python 代码要想运行,必须借助 Python 解释器。

本质上,Python 解释器就是段程序,如果我们想执行 Python 代码,必须先运行 Python 解释器,由它读取我们写好的代码,再转换(翻译)成计算机能识别的机器指令。

Python 解释器是开源的,任何志同道合的人都可以参与改进它,甚至水平高的人还能编写实现一个解释器。本套 Python 教程使用的是  Python 官方推荐的、用 C 语言编写实现的 Python 解释器,又称 CPython。CPython 的使用范围是最广的,平时我们讨论的 Python 解释器指的就是 CPython,如果你刚刚接触 Python,我也建议你使用 CPython。

当然除了 CPython 以外,还有很多款 Python 解释器,它们分别用不同的编程语言实现,运行在不同的平台上,比如用 Java 语言实现的 Python(称为 Jython),用 .net 实现的 Python(称为 IronPython)等等。

这些 Python 解释器虽然诞生时间比 CPython 晚,但一直在努力地跟上主流,并在不同的生产环境中推广 Python。虽然有些解释器只是玩具项目或实验,但大部分是为了解决某些实际问题而创建的,这些问题要么使用 CPython 无法解决,要么需要耗费程序员巨大的精力,比如说:

  • 在嵌入式系统上运行 Python 代码;
  • 与运行框架(如 Java 或 .NET)或其他语言做代码集成;
  • 在 Web 浏览器上运行 Python 代码。

接下来,我就给大家介绍几种最常用的 Python 解释器以及它们各自的特点。

CPython

CPython 中的 “C” 指的就是 C 语言,意味着 CPython 解释器是完全用 C 语言编写实现的。

当我们从 Python 官网上下载并安装好 Python 3.x 后,除了会获得 CPython 解释器,还会获得 Python 程序运行所依赖的标准库模块。注意,CPython 解释器是用纯 C 语言编写的,但很多标准库模块是用纯 Python 语句编写的,还有一些是 C 和 Python 组合编写的。

CPython 是使用最广泛的一款 Python 解释器,关于 CPython 的下载和安装,我们会在第二章给大家做详细讲解。

Jython

Jython 是一款运行在 Java 平台上的 Python 解释器,可以将 Python 代码转换为 Java 字节码,开发人员在 Python 模块中可以无缝使用 Java 类。

Jython 和 CPython 的主要区别有:

  • 采用 Java 垃圾回收机制,而不是引用计数。
  • 没有全局解释器锁(GlobakInterpreter Lock,GIL),在多线程应用中可以充分利用多个内核。

Jython 的主要缺点是缺少对 C/Python 扩展 API 的支持,因此用 C 语言编写的 Python 扩展在 Jython 中无法运行。这种情况未来可能会发生改变,因为 Jython 3.x 计划支持 C/Python 扩展 API。

Jython 允许人们在复杂应用系统(比如 J2EE)中使用 Python 作为顶层脚本语言,它还将 Java 应用引入到 Python 中,比如说在 Python 程序中可以使用 Apache Jackrabbit(这是一个基于 JCR 的内容仓库 API)。

Jython 最新可用的版本是 Jython 2.7,对应的是 Python 2.7 版,几乎实现了 Python 所有的核心标准库,Jython 3.x 版正在开发中。

IronPython

IronPython 是运行在 .Net 平台上的一款 Python 解释器,可以直接将 Python 代码转换为 .Net 的字节码。

IronPython 将 Python 引入到 .NET 框架中,这个项目受到了微软的支持,因为 IronPython 的主要开发人员都在微软工作。微软提供了一套免费的开发工具,名为 PTVS(Python Tools for Visual Studio,用于Visual Studio 的 Python 工具),可以将 Visual Studio 转换为成熟的 Python IDE,是作为 Visual Studio 的插件发布的,在 GitHub 可以找到其开源代码。

除了 Java,.NET社区是最大的开发者社区之一。毫不夸张地说,IronPython 为推广 Python 语言做出了非常重要的贡献。

虽然 .NET 主要在微软 Windows 系统上运行,但是 IronPython 也可以在 Mac OS X 和 Linux 系统上运行,这一点要感谢 Mono,一个跨平台的开源 .NET 实现。

与 CPython 相比,IronPython 的主要区别或优点如下:

  • 与 Jython 类似,没有全局解释器锁(Global Interpreter Lock,GIL),在多线程应用中可以充分利用多个内核。
  • 用 C# 和其他 .NET 语言编写的代码可以轻松集成到 IronPython 中,反之亦然。
  • 通过 Silverlight,在所有主流 Web 浏览器中都可以运行。

IronPython 的缺点和 Jython 非常类似,也不支持 C/Python 扩展 API。对于想要使用主要基于 C 扩展的 Python 包(例如 NumPy)的开发人员来说,这一点很重要。

IronPython 最新的稳定版本是 2.7.11,与 Python 2.7 兼容。与 Jython 类似,Python 3.x 的实现也在开发中,还没有可用的稳定版本。

PyPy

PyPy 是一款用 Python 编写的 Python 解释器,最大的特点就是执行 Python 代码的速度快。

PyPy 采用了 JIT(Just-in-Time)技术,可以对 Python 代码进行动态编译,显著提高 Python 代码的执行效率。在以下两种场景中,JIT 技术的优势很难得到展现:

  • 如果整个程序运行只有几秒钟,JIT 技术的加速效率不会很明显;
  • 如果大部分的运行时间都花费在执行标准库中的 C 语言代码上,而不是执行 python 代码,JIT 技术也无济于事。

尤其在长时间执行 Python 代码的场景中,PyPy 执行速度快的特点会体现得淋漓尽致

PyPy 和 CPython 的主要区别有以下几个方面:

  • 使用垃圾回收,而不是引用计数。
  • 采用了 JIT 技术,可以显著提高性能。
  • 借鉴了 Stackless Python 在应用层的“无栈”特性。

和其它的 Python 解释器类似,PyPy 也缺乏对 C/Python 扩展 API 的完全官方支持。但它至少通过 CPyExt 子系统为 C 扩展提供了某种程度的支持,虽然文档不完整,功能也尚未完善。此外,社区正在努力将 NumPy 迁移到 PyPy 中。

目前,PyPy 兼容了 Python2.7.18 和 Python 3.7.10,支持大多数常用的 Python 标准库模块。绝大部分 Python 代码都可以在 PyPy 下运行,但是 PyPy 和 CPython 的差异可能会导致 Python 代码在两种解释器下的执行结果不一样。

Stackless Python

Stackless Python 是 CPython 的增强版,对 CPython 做了一些修改,添加了一些新的功能。

Stackless Python 可以直译为“无栈的 Python”“无栈”指的是不再用 “堆栈” 的思想运行 Python 代码,而是用 tasklet(微线程)代替堆栈。和普通线程相比,操作系统上下文切换和任务调度微线程的开销更小,既轻量化又节约资源。

所谓堆栈思想,以 C 语言为例,程序执行时会将函数逐个入栈,函数执行完后依次出栈,函数进出栈遵循“后进先出”的原则。

Stackless Python 算不上是有名的 Python 解释器,但它的实现思想对编程语言社区有很大的影响。Stackless Python 最新可用的版本是 2.7.9 和 3.3.5,分别实现的是 Python 2.7 和 3.3。

Python 解释器有很多版本,但使用最广泛的还是 CPython,本教程讲解 Python 使用的也是 CPython。

作为初学者,大家直接用 Python 官方推荐的 CPython 即可,丝毫不用迟疑,至于其它版本的 Python 解释器,简单了解一下即可。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏
分享
评论 抢沙发
HarryPotter的头像|艾奇编程网

昵称

取消
昵称表情