2023年使用的最佳Python解释器
Python是对脚本语言的定义,它可以以各种方式使用。脚本语言Python采用了许多解释器,每个解释器都是不同的。大量的Python解释器可用,因为它将是2023年增长最快的编程语言。然而,由于它们都迎合了不同的需求,你必须首先决定哪种是最适合你的。
在描述六个最常见的Python解释器之前,让我们首先对解释器有一个基本的了解。
什么是解释器
解释器是一种特殊的计算机软件,根据定义,它执行编码或脚本语言所表达的命令。术语 “直接执行 “指的是不需要首先将指令建立在被翻译的代码中。
Python解释器
在许多出版物和网站上,有人说Python是一种解释性的编程语言。它有一定的合理性。这是由于内部的工作原理,它在很大程度上仍然是抽象的,或者用许多Python开发者和程序员的话来说,是神秘的。与其他编程语言不同,Python 不把它的源代码翻译成机器可读的指令,以便硬件能够理解它。相反,它将源代码转换为一种被称为字节码的格式。
因此,Python的编译作为一种抽象的形式发生了,但与其他编译器如C++和C不同,Python的编译并没有把整个程序还原到处理器或汇编级。此外,请记住,操作码和汇编级指令是不同的。这两者的根本区别在于,汇编语言是为CPU开发的,而字节码是为虚拟机和虚拟机生成的。
Python解释器使用简单,具有以下特点:
- 吸引人的编辑
- 使用在前面提示中初始化的变量
- 使用readline设施,将整个代码写在其中。
- 按Ctrl+P会弹出命令行编辑,并发出哔哔声,让你知道该模式已被激活。
之后,让我们继续对最广泛使用的Python解释器进行快速描述:
CPython
CPython是一个解释器,它提供了一个与C和其他编程语言的外来函数接口。它是用C和Python创建的。它是Python编程语言的默认和最流行的实现。CPython支持最高版本的Python 3.7
与Python包和C扩展模块的最大兼容性是由CPython提供的,它是标准的Python实现。因为它在解释Python代码之前将其变成字节码,所以CPython也可以被归类为编译器。它采用了全局解释器锁(GIL),它的缺点是阻止一个进程的Python线程并发。因此,C语言被用来实现所有的Python编程版本。
需要C语言扩展才能正常工作的Python包只能与CPython一起使用。为了向最大的潜在受众推广应用Python编程语言,他们必须针对CPython。
CPython的特点
- CPython的一个独特之处在于,每个进程都使用一个全局解释器锁(GIL),它可以防止一个以上的线程在一个进程中同时处理Python字节码。这并不是说多线程是无用的;最典型的多线程情况是线程大部分时间都在等待其他进程完成。这可能发生在几个线程照顾各种客户的时候。
- 当第三个线程执行Python代码时,前两个线程可能在等待客户端的响应,第三个线程可能在等待数据库查询的运行。
- 然而,GIL确实意味着CPython不适合使用Python代码来实现可能分散在几个核心上的对CPU有要求的算法的进程。
- 在现实世界的程序中,GIL代表严重障碍的情况是极其不常见的。
- Python通常不用于CPU密集型或时间敏感型进程,因为它是一种天然的迟缓语言。
- Python经常在顶层利用专门的任务,并使用库中的函数。当调用这些底层进程之一时,另一个线程上的Python代码可能仍在运行,因为这些库经常需要用Python编写。
- 用于开展计算成本高的活动的非Python库不在GIL范围内,可以同时运行。
CPython与其他解释器有什么不同?
只有由多任务操作系统控制的不同的 CPython 解释器进程才能使 Python 代码并发运行。这使得并发的 Python 进程之间的通信更加困难。然而,多进程模块稍微缓解了这一点。因此,从Python代码的并发执行中受益的应用程序可以在相对较小的开销下开发。
GIL使构建多线程应用程序更加简单,而不需要利用Python代码的并发执行,并开发CPython。多处理程序必须确保所有的通用代码在没有GIL的情况下是线程安全的。
虽然有几个建议要取消GIL,但人们普遍认为,在大多数情况下,GIL的好处多于坏处;在GIL成为瓶颈的少数情况下,应该围绕多处理框架设计应用程序。
IronPython
IronPython是Python编程语言的.NET框架版本,它同时利用了Python和.NET框架组件。它还可以使Python代码可用于其他.NET框架语言。IronPython支持最高版本的Python 2.7
IronPython支持动态编译,它还包括一个交互式控制台。Python解释器实现了Python脚本和.NET对象之间的交互。IronPython通过Visual Studio的Python工具箱被自然地整合到Visual Studio IDE中。
IronPython对CPython程序员来说可能是不同的,原因如下:
- 企业信誉。在一些企业中,增加新技术是相当具有挑战性的;但是,如果.NET已经很成熟,那么采用IronPython可能就没有必要了。
- 没有全局解释器锁(GlobalInterpreterLock)–由于IronPython缺乏GIL,多线程编程可以利用多核处理器。
- .NET框架的库是巨大的。尤其是用户界面库Windows Forms,非常出色。
- Silverlight!IronPython比CPython更容易扩展(C#是完全托管的,C#类型可以直接在IronPython中使用,没有封装),并且可以直接作为脚本语言纳入.NET应用程序。
Jython
Jython,以前被称为Jpython,是一个基于Java平台的Python实现。Jython是用Java和Python创建的,它将Python代码转换为Java字节码,使Python代码能够在任何配备JVM的平台上执行。
Jython会读取整个高级源代码或指令。接下来是语法阶段,它检查每一行程序的语法,确保指令的格式正确。如果出现问题,它会立即停止翻译并显示错误信息。
对于静态和动态编译,Jython都提供了支持。著名的Python解释器能够导入并使用任何Java类作为Python模块,这是一个重要的特性。Jython_支持_直至Python 2.7版本
如果你需要与纯Java代码库互动或为JVM构建Python代码,你可以把钱放在Jython上。
Jython的用法
- JBoss应用服务器的命令行界面、Oracle Weblogic服务器脚本工具、IBM Rational开发工具和利用wsadmin的IBM WebSphere服务器软件工具都支持Jython脚本。
- Ignition是一个软件设计平台,重点是HMI和SCADA。
- Ghidra是美国国家安全局创建的一个逆向工程工具,允许用Java或Jython构建插件。
- OpenHAB是家庭自动化软件。
- ZK是一个Java Ajax框架,支持用Jython编写的胶合逻辑。
PyPy
一个快速且符合要求的替代Python编程语言实现是PyPy。被称为RPython的限制性静态类型的Python子集被用来实现Python解释器。PyPy支持的版本有:Python 2.7、Python 3.5和Python 3.6。
共同开发的语言RPython被用来构建PyPy。Python的一个子集被称为RPython(受限的Python),它限制了Python语言的执行速度。其速度是使用它而不是CPython的主要理由。特别是,与CPython相比,它的运行速度通常要快4.4倍。PyPy实现了Python 2.7.13和3.6.9。它支持所有的基本语言,并完成了大多数Python 2.7和Python 3.6的测试套件(稍加修改)。大部分经常使用的Python头文件模块都被支持。这表明,在大多数情况下,你的编程语言将执行而不需要任何调整。
PyPy的特点
- PyPy支持CLI、C和JVM后端,并有一个JIT编译器。
- PyPy的主要目标是在提升性能的同时,最大限度地与基准CPython实现兼容。
- 希望提高某些特定Python程序性能的Python程序员利用PyPy。
- 根据PyPy网站,这个流行的Python解释器比CPython快4.4倍。
- 使用元跟踪方法,PyPy通过把解释器变成一个跟踪的JIT(just-in-time)编译器,在运行期间执行包括编译的代码。
- 除了比Python操作更快之外,它还能更好地利用内存。
此外,它与一些最流行的Python库有很好的兼容性。
其中一些是
PyPy的劣势
PyPy 无法运行每一行 Python 代码。Python代码可能需要被修改才能运行。尽管外部的C-API已经在PyPy中重新实现了,但一些C-抽象偶尔会泄露到CPython中并被滥用–甚至可能在用户不知情的情况下被滥用。由于加载和编译字节码所需的时间,必须有一个 “预热 “时间,这将导致应用程序开始执行时出现非常小到非常明显的延迟。执行的性能将受到影响,因为它越小。
一个本地的Python安装几乎可以通过PythonNet与.NET CLR完全集成。其策略与IronPython的做法相反。对于Python编码者来说,在任何代码执行之前,编译阶段已经完成。理解底层结构和平台(操作系统)的Python虚拟机(PVM)在内部转换这些生成的字节码,以便程序可以运行并产生预期的结果。PythonNet 支持从 Python 2.6 到 Python 3.5 的各种版本
PythonNet使得非Windows操作系统上的本地Python部署能够在.NET框架内与Mono一起运行。PythonNet和IronPython可以一起使用,没有任何问题。
Stackless Python
CPython 和其他著名的 Python 解释器的堆栈依赖于 C 语言的调用。有了 Stackless Python 解释器,情况就不同了。Stackless Python 是用 C 和 Python 创建的,就像 CPython 一样。Stackless Python 使用 C 栈,但在函数调用之间被擦除。因此,Python 解释器的栈是独立于 C 调用的。
Stackless Python除了线程之外,还支持连接性、循环线程、预编译文件、轮循计划、任务序列化和tasklets。微线程可以说是Stackless Python最重要的功能。该功能有助于减少由普通操作系统线程带来的开销。Stackless Python支持最高版本的Python 3.7
功能:
- 通过Stackless Python,一个正在执行的程序被划分为微线程,由python解释器而不是操作系统内核控制。
- 由于解释器完全处理任务调度和上下文切换,这有时被称为绿线程的一种。
- 微线程控制几个软件子任务如何在同一个CPU核心上执行。
- 因此,它们是发生异步计算的替代方案,避免了单核应用程序拥有多个线程的费用,因为不需要从用户模式和操作系统中进行模式转换,使CPU利用率下降。
- Stackless Python并没有消除CPython的全局解释器锁,而是采用了多线程和多进程,尽管微线程使得管理单核上子任务的执行变得更加容易。
- 因此,不支持并行;只支持合作式多任务处理(抢占最初是不存在的,但现在以某种形式存在)。
- 在Stackless Python进程之上建立一个进程间通信机制,需要利用多个CPU核心。
- Stackless Python 不能作为扩展或库部署在已经存在的 Python 安装上,因为源代码中有大量的变化。
- 相反,它作为一个完整的Python发行版独立运作。PyPy,一个自我托管的Python解释器和JIT编译器,也被更新以包括Stackless的大部分功能。
Transcrypt
Python是自下而上创建的,考虑到了大规模编程。
Transcrypt支持多继承,局部类和分层模块,实现了一个灵活而可靠的整体结构。Transcrypt中包括一个静态类型验证器、一个linter和一个minifier,以促进大规模项目的高效团队工作。从网络应用到科学计算,Python在后端被广泛使用。现在它也可以在前端使用。Transcrypt在Node.js之上运行,并提供对任何JavaScript库的轻松访问。
Transcrypt不需要专有的添加物,并具有Python所特有的强大而直接的语法。开箱即用,它支持用+、-、*、/等进行矩阵和矢量操作,以及用[i:j:k]进行字符串切分。你的网站加载速度和以前一样快,因为JavaScript目标和Python源代码的大小几乎相同。
好处:
- Transcrypt有清晰的标准语法。
- 它预编译成快速、可理解的JavaScript,可以使用Python源代码的源码图进行调试。
- Transcrypt具有卓越的可扩展性。
- Transcrypt支持一个项目,一种语言。
功能:
- 已经预编译成高度可读、高效格式的JavaScript,其下载单位是千字节而不是MB。
- 纯粹的Python 3.9语法,使用Python的本地分析器。
- 多重继承、装饰器、元类、属性、分层模块、可选的运算符重载、异步/等待等等。
- 需要连续与高质量的互联网插件的宇宙 – 而不是MacBook Python的。
- 逐行生成类似于Python源代码的人类JavaScript,并可选择标记源代码行号。使用集成的源码图直接从Python源码中进行调试。
- 它运行在node.js之上,拥有闪电般快速的Typescript 6代码:for-loop优化、调用缓存、内联JavaScript等。
- 丰富的文档和大量的代码实例 Apache 2.0许可证,Pip-安装后即可使用
与CPython的主要区别
- 网络电池。对任何已经可用的JavaScript库的访问都被优先于在安装中包括几个Python库。一些在浏览器中很重要的库是这一规则的例外,如cmath、datetime、itertools、math、re、random、time和turtle。然而,一般来说,这条规则被打破了。
- Transcrypt旨在让开发者创建全面的、真实世界的在线应用程序,这些应用程序与它们的JavaScript等价物一样专业和快速加载,同时也更容易维护,并提供一个Python式的干净的模块化结构。没有Python代码被评估或执行。同样,这也是这个想法的一个组成部分。为了确保快速的页面加载,transcrypt的代码已经被构建、优化和最小化了。在这方面,它的设计目标从根本上不同于在浏览器中即时编译的工具。
- 周边指的是Transcrypt的所有其他组件。即使一个写得很好的外围拉动请求有相当大的机会获得批准,仍然建议先开一个问题,以允许合作并减少努力的浪费。
放置标准库需要一个特定的位置。尽管Transcrypt主要依赖于浏览器特定的JavaScript库,但一些通用库的可用性将有助于它被Python程序员所接受。因此,我们非常欢迎你在这里做出贡献。我们的设计目标是:90%的完整、快速、微小和可靠,而不是100%的完整、迟缓、巨大和有缺陷。如果你提供一个库,请捐赠一个自动测试(见文档)和一些辅助材料。支持的操作系统是Linux和Windows。
Python 2 或 Python 3?选择哪一个?
- 自2008年Python 3以来,考虑是继续使用更传统的Python 2还是采用最新的Python 3一直是关键。
- 对于刚刚学习Python的人来说,解决方案可能很简单:从最近的和改进的Python 3开始。对于拥有相当大的Python代码库,并且在操作上严重依赖Python的企业或个人来说,这个决定可能会更加复杂。
- 就目前而言,Python 2.7被大多数应用程序所使用。不过,现在切换到Python 3的情况更加频繁。这主要是因为Python 2.7将在2020年内获得安全补丁。
- 如果你正在开发Python 2和Python 3,你可以为它们建立一个新的开源Python库。这是因为有相当数量的Python开发者仍然选择Python 2。你必须使用Python 3来创建新的Python应用程序。
- 因为Python 3.x解释器的每个新版本都提供了更好的错误修复、安全性和标准库模块,建议使用最新的版本。
- 如果你已经有了Python 2代码或一个独特的库,你还需要坚持使用吗?
如果你真正崇拜Python 2,不想转到Python 3,那是可以接受的。但是,请记住,2020年之后,Python 2将不再像现在这样有利可图。因此,与Python 2一起使用Python 3可能是一个好主意。
总结
六种最广泛使用的 Python 解释器的列表是全面的。它们中的任何一个都能为你工作。但是它们中的每一个都有自己的优势。因此,做出明智的决定是最好的,特别是当你在专业领域工作时。我希望本教程已经清楚地概述了Python解释器是由什么组成的。本教程还解释了Python解释器的过程,以实现利用PVM对高级指令的整体编译和理解。对许多Python解释器有一个工作上的理解可能是有益的。因此,最好是多做尝试。