解释器
因为python语言从规范到解释器都是开源的,理论上只要水平够高都可以编写自己的解释器来运行python代码,所以目前有相当多类型的解释器。
Cpython(有GIL锁)
官方的解释器,下载安装好python环境后自带的,是用c语言写的,命令行使用python命令其实就是默认启动cpython解释器。一般情况下称呼的python就是指Cpython, 为了区别其他语言及避免歧义通常称为CPython。
- 用C语言实现的Pyhon,应用最广泛
- 把Python代码编译成中间态的字节码,然后由虚拟机解释
- 适合开源项目以及依赖C扩展包的项目
- GIL(全局锁)使Python在多线程效能上表现不佳, GIL 只在Cpython有
- 无法支持JIT(即时编译)使Python执行速度较差
如果您正在写开源的Python代码,并希望有尽可能广泛的用户,用CPython是最好的。使用依赖C扩展的包,CPython是您唯一的选择。所有版本的Python语言都用C实现,因为CPython是参考实现。
PyPy(无GIL锁,STM方式解决了GIL锁问题,目前比CPython的速度快超过5倍 )
是用RPython实现的解释器。RPython是Python的子集, 具有静态类型。对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
- 支持JIT(即时编译), 速度性能上得到了提升
- 支持多重后端(C, CLI即命令行界面, JVM即java虚拟机)
- PyPy旨在提高性能,同时保持最大兼容性(参考CPython的实现)
Jpython(无GIL锁)
是一个将python代码编译成java字节码的实现,运行在JVM (Java Virtual Machine) 上。另外,它可以像是用Python模块一样,导入 并使用任何Java类。如果您需要与现有的Java代码库对接或者基于其他原因需要为JVM编写Python代码,那么 Jython是最好的选择。
IronPython(无GIL锁)
IronPython 是一个针对 .NET 框架的Python实现。它可以用Python和.NET的framework库,也能将Python代码暴露给给.NET框架中的其他语言。Python Tools for Visual Studio 直接集成了 IronPython到Visual Studio开发环境中,使之成为Windows开发者的理想选择。
- 可以用Python和.NET的famework库
- 也能将Python代码暴露给给.NET框架中的其他语言
- 适合Windows环境的开发
PythonNet
是一个近乎无缝集成的, 提供给本机已安装的Python .NET公共语言运行时(CLR)包
- 与IronPython互补
- 可以在除外IronPython的环境中无冲突运行
Ipython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。