Python 解释器选择
Python的状态(版本 3 和版本 2)
选择 Python 解释器时,总会出现一个令人窘迫的问题:“我应该选择Python 2 还是 Python 3”? 答案比人们想象的要复杂的多。
大致的基本情况如下:
- 今天大多数生产应用程序都在使用 Python 2.7。
- Python 3 已经可以在今天的应用程序上生产部署。
- Python 2.7 只会在 2020 年之前获得必要的安全更新[[6]](https://www.python.org/dev/peps/pep-0373/)。
- Python 包含了 Python 3 和 Python 2。
建议
注意:使用 Python 3 比 Python 2 更 受青睐。如果直到现在你仍然在产品中使用 Python 2 的话,可以考虑一下升级你的产品和基础设施。如果你使用的是 Python 3,那么,恭喜 —— 你是个有优秀品位的人。 ——
Kenneth Reitz
我开门见山:
- 在新的 Python 应用中使用 Python 3。
- 如果你第一次学习 Python,熟悉下 Python 2.7 会很有帮助,但还是没有学 Python 3 的帮助大。
- 两个都学。它们都是 "Python" 。
- 现存的软件大多数都依赖于 Python 2.7。
- 如果你在写一个新的 Python 库,最好同时支持 Python 2 和 3 。 对于一个你希望被广泛支持的新库,只支持 Python 3 其实是一个政治声明,它会挑拨许多你的用户。这其实也不是什么问题 —— 因为慢慢的,在接下来的三年里,情况会变得没那么糟糕。
那么考虑使用 3 么?
如果你正在选择一个 Python 解释器使用,由于每个版本会带来新特性和改进的标准库模块,还有安全和漏洞修复,我推荐你使用最新的 Python 3.x。
举一些只使用 Python 2 的理由,例如先前存在的代码库,一个 Python 2 独有的库,简单/熟悉,或者你对它喜爱有加并且深受它启发。这些都没有什么坏处。
查看 Can I Use Python 3? 来看看是否有你所依赖的软件会阻止你采用 Python 3。
有时候有可能需要你 写出能同时运行在 Python 2.6,Python 2.7,以及 Python 3 上的代码 。编写软件的种类决定了这一过程从繁琐到困难;另外如果你是初学者可以把这点先放一边,你有其他更重要的事情需要操心哈。还有注意 Python 2.6 即将走向尽头,将会被开发者弃用,所以除非因为报酬,要不然你不用写出兼容 2.6 的代码。
实现
当人们谈及 Python
时,他们通常指的是这门语言以及它的 CPython 实现。 Python
实质上是一种语言规范,它可以用不同的方式来实现。
CPython
CPython 是 Python 实现的标准,使用 C 语言编写。它将 Python 代码编译为中间字节码,然后使用一个虚拟机去解释该字节码。 CPython 提供了对 Python 包和 C 扩展模块的最高级别的兼容性。
如果你正在写开源的 Python 代码,并且希望覆盖最广泛的受众,那么 CPython 是最好的选择。如果要使用依赖于 C 扩展的函数,那么 CPython 是你唯一的选择。
Python 语言的所有版本都是用 C 实现的,因为 CPython 是实现的标准。
PyPy
PyPy 是一个用 RPython 实现的 Python 解释器, RPython 是 Python 语言的受限静态类型子集。该解释器的特性是拥有一个即时(JIT)编译器以及支持多种后端(C,CLI,JVM)。
PyPy 的目标是在提高性能的同时,对 CPython 实现标准提供最大的兼容性。
假如你正在搜寻提升你 Python 代码性能的法门,那么 PyPy 值得一试。 在一套基准测试中,它目前 比 CPython 快 5 倍以上。
PyPy 支持 Python 2.7。PyPy3 [1] beta 版的目标是 Python 3。
Jython
Jython 是 Python 的一种实现,它将 Python 代码编译成 Java 字节码,然后在 JVM(Java 虚拟机)中运行。此外,它还能像使用 Python 模块一样引入并使用任何 Java 类。
如果你需要与现存的 Java 库进行交互,或者有其他必要的理由来写运行在 JVM 上的 Python 代码,那么 Jython 是最佳选择。
Jython 目前支持 Python 2.7。 [2]
IronPython
IronPython 是 Python 的 .NET 框架实现。它能同时使用 Python 和 .NET 框架的库,还能把 Python 代码暴露给 .NET 框架里的其他语言。
Visual Studio 的 Python 工具 直接把 IronPython 整合进了 Visual Studio 开发环境,使得其成为 Windows 开发者的理想选择。
IronPython 支持 Python 2.7。 [3]
PythonNet
Python for .NET 是一个为 Python 本地安装和 .NET 公共语言运行库(CLR)提供无缝整合的软件包。这与 IronPython(见上方)采用的方式恰恰相反,与其说是竞争,不如说是补充。
Pythonnet 在如 OS X 和 Linux 等非 Windows 操作系统上启用本地 Python 安装的时候,需要结合 Mono 才能在 .NET 框架里使用。它能毫无冲突的运行在包括 IronPython 里。