• 选择一个 Python 解释器(3 vs 2)
    • Python的现状 (2 vs 3)
    • 建议
    • 所以…. 3?
    • 实现
      • CPython
      • PyPy
      • Jython
      • IronPython
      • PythonNet

    选择一个 Python 解释器(3 vs 2)

    https://farm5.staticflickr.com/4265/34484834733_5b80f65ab1_k_d.jpg

    Python的现状 (2 vs 3)

    当选择Python解释器的时候,一个首先要面对的问题是:“我应该选择Python 2还是Python 3?” 答案并不像人们想象的那么明显。

    现状的基本要点如下:

    • 如今大部分生产应用使用 Python 2.7。
    • Python 3 已准备好用于生产应用的部署。
    • Python 2.7 直到 2020 前只会得到必要的安全更新 [1]。
    • “Python” 涵盖了 Python 3 和 Python 2。

    建议

    注解

    使用 Python 3高度 优先于 Python 2。如果您发现自己 仍然 在生产环境中使用 Python 2,请考虑升级您的应用程序和基础设施。如果您正在使用 Python 3,恭喜您 —— 您确实有很好的品味。—Kenneth Reitz

    那我直言不讳:

    • 将 Python 3 用于新的 Python 应用程序。
    • 如果您是第一次学习 Python,熟悉 Python 2.7 将是非常有用的,但学习 Python 3 更有用。
    • 两者都学。它们都是 “Python”。
    • 已经构建的软件通常依赖于 Python 2.7。
    • 如果您正在编写一个新的开源 Python 库,最好同时为 Python 2 和 3 编写。若新库只支持 Python 3 会是一项政治声明,并将疏远您的许多用户。这不是一个问题 —— 慢慢地,在未来三年内,这种情况会减少。

    所以…. 3?

    如果您想选择一种Python的解释器,您又不是固执己见的人,我推荐您用最新的Python 3.x,因为每个版本都带来了新的改进了的标准库模块、安全性以及bug修复。进步就是进步。

    鉴于此,如果您有一个强有力的理由只用Python 2,比如Python 3 没有足够能替代的Python 2的特有库,或者您(像我)非常喜而且受Python 2启发。

    查看 Can I Use Python 3? 来看看是否有您依赖的软件阻止您用Python 3。

    延伸阅读

    写 能够同时兼容Python 2.6,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实现的解释器。RPython是Python的子集,具有静态类型。这个解释器的特点是即时编译,支持多重后端(C, CLI, JVM)。

    PyPy旨在提高性能,同时保持最大兼容性(参考CPython的实现)。

    如果您正在寻找提高您的Python代码性能的方法,值得试一试PyPy。在一套的基准测试下,它目前比CPython的速度快超过5倍 。

    PyPy支持Python 2.7。PyPy3 [2],发布的Beta版,支持Python 3。

    Jython

    Jython 是一个将Python代码编译成Java字节码的实现,运行在JVM (Java Virtual Machine) 上。另外,它可以像是用Python模块一样,导入并使用任何Java类。

    如果您需要与现有的Java代码库对接或者基于其他原因需要为JVM编写Python代码,那么Jython是最好的选择。

    Jython现在支持到Python 2.7 [3]。

    IronPython

    IronPython 是一个针对 .NET 框架的Python实现。它可以用Python和.NET framework的库,也能将Python代码暴露给给.NET框架中的其他语言。

    Python Tools for Visual Studio 直接集成了IronPython到Visual Studio开发环境中,使之成为Windows开发者的理想选择。

    IronPython支持Python 2.7 [4]。

    PythonNet

    Python for .NET 是一个近乎无缝集成的,提供给本机已安装的Python .NET公共语言运行时(CLR)包。它采取与IronPython(见上文)相反的方法,与其说是竞争,不如说是互补。

    PythonNet与Mono相结合使用,通过.NET框架,能使Python在非windows系统上(如OS X和Linux)完成操作。它可以在除外IronPython的环境中无冲突运行。

    PythonNet支持Python 2.3到2.7 [5]。

    |[1]|https://www.python.org/dev/peps/pep-0373/#id2

    |[2]|http://pypy.org/compat.html

    |[3]|https://hg.python.org/jython/file/412a8f9445f7/NEWS

    |[4]|http://ironpython.codeplex.com/releases/view/81726

    |[5]|http://pythonnet.github.io/readme.html

    原文: http://pythonguidecn.readthedocs.io/zh/latest/starting/which-python.html