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