**PyPy**（/ˈpaɪpaɪ/）是一种Python编程语言实现，可用于替代CPython（它是标准实现）。PyPy通常运行得比CPython更快，因为PyPy是一种即时编译器，而CPython是一种解释器。多数Python代码可以很好的运行在PyPy之上，除非代码依赖于CPython扩展，它们在运行于PyPy的时候，要么不工作要么招致一些开销。PyPy在内部使用叫做元跟踪的技术，它将解释器变换成跟踪即时编译器（英语：）。因为解释通常比编译器要容易写，但运行得更慢，这种技术可以更容易的产生出编程语言的高效实现。PyPy的元跟踪工具链叫做RPython。

PyPy不完全兼容于Python（至少最近版本的）生态系统：它的最新发行版本PyPy 3.10、3.9和2.7，分别兼容于相应的CPython版本。

细节和动机
-----

PyPy被构思为使用一种类似于Python的编程语言来书写Python实现。目的是易于辨识出可改进的区域，并使得PyPy更加灵活和易于同CPython进行试验。

PyPy目标是为产生动态语言实现提供通用转换和支持框架，强调了在语言规定和实现方面之间的明晰分离。它还致力于提供规矩的、灵活的和快速的Python编程语言实现，使用上述框架来启用新的高级特征而不需要在其中编码低层细节。

### RPython

PyPy解释器自身是使用叫作RPython（Restricted Python）的Python受限子集书写的。RPython在Python语言上施加了一些约束，使得一个变量的类型可以在编译时间推论出来。

PyPy计划开发了一个工具链来分析RPython代码并将它转译成某种形式的字节码，它可以降低为C。除了C之外还有过其他后端：Java、C#和Javascript，但是它们遭受了软件腐败而已经移除了。PyPy的递归式图标是一个吞噬自己的蛇，因为RPython是用Python解释器转译的。代码还可以不转换的运行来测试和分析，这为动态语言研究提供了很好的试验台。

它允许可插拔的垃圾回收，还有可选的启用Stackless Python特征。最后，它包括了即时编译（JIT）生成器，在解释器源代码中加入一些标注，就能在解释器中建造入即时编译器。生成的JIT编译器是跟踪JIT（英语：）。

RPython现在也用于书写非Python语言实现比如Pixie。

项目状态
----

第一个兼容于CPython v3的PyPy版本是2014年的PyPy v2.3.1。兼容于CPython v3的PyPy解释器叫作PyPy3。

PyPy有着在32-bit/64-bit x86和32-bit/64-bit ARM处理器上的JIT编译支持。它已经夜间测试于Windows、Linux、OpenBSD和Mac OS X之上。PyPy能够运行不依赖于特定于实现特征的纯Python软件。

有叫作CPyExt的针对CPython C API扩展的兼容层，但它是不完全和实验性的。同C共享库交互的较好方式是通过内建的C外界函数接口（英语：）（CFFI）或ctypes库。

### 历史

PyPy可溯源至Psyco计划，它是Python的即时特殊化编译器（英语：），由Armin Rigo在2002年至2010年间开发。最初时，RPython还可以被编译成Java字节码、CIL和JavaScript，但是这些后端由于缺乏价值而被移除了。

PyPy最初是研究和面向开发的项目。在2007年中期达到了开发成熟状态并官方发行了1.0版本，接下来它聚焦于发行更好的CPython兼容性的生产级版本。

### 资助

PyPy在2004年十二月至2007年三月期间由欧盟特殊目标研究计划资助。在2008年六月，PyPy宣布获得资助为Google开源规划的一部份，允诺使PyPy更加兼容于CPython。

註釋
--

1. ↑  .
2. ↑ .  [2020-09-26]. （原始内容存档于2021-03-09）.
3. ↑ . speed.pypy.org.  [2019-12-01]. （原始内容存档于2021-05-10）.
4. ↑  Samuele Pedroni.. March 2007. （原始内容存档于2012-06-30）.
5. ↑ .  [11 October 2013]. （原始内容存档于2021-05-26）.
6. ↑  Our runtime interpreter is "RPython" （页面存档备份，存于）, Coding Guide – PyPy documentation
7. ↑  "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al. 2007.
8. ↑  Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin.. ICOOOLPS '09. doi:10.1145/1565824.1565827.
9. ↑  Timothy Balridge interview （页面存档备份，存于）.
10. ↑  the PyPy team.. PyPy blog. 20 June 2014  [2021-12-19]. （原始内容存档于2017-12-26）.
11. ↑ . pypy.org. 16 October 2019  [2021-03-23]. （原始内容存档于2019-10-16）.
12. ↑ .  [2021-03-20]. （原始内容存档于2021-06-07）.
13. ↑ .  [2021-12-20]. （原始内容存档于2022-04-27）.
14. ↑ .  [2021-03-23]. （原始内容存档于2012-09-10）.

參考文獻
----

* Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: a Step Towards Reconciling Dynamically and Statically Typed OO Languages （页面存档备份，存于）. In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
* Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Tracing the meta-level: PyPy's Tracing JIT Compiler. In Proc. ICOOOLPS, 2009. ACM Press.
* Corbet, Jonathan.. LWN.net. 11 May 2011  [2018-01-06]. （原始内容存档于2017-12-26）.
* von Eitzen, Chris.. The H (Heinz Heise). 21 November 2011  [2018-01-06]. （原始内容存档于2018-02-17）.
* Rose, John.. Oracle developer blog. 2 December 2011  [2018-01-06]. （原始内容存档于2012-05-26）.
*. Decisionstats blog.  [2018-01-06]. （原始内容存档于2018-01-07）.

外部链接
----

* 官方网站 在维基数据上编辑此内容

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
Python |
| --- |
|  |
| 实现 | 
* CircuitPython（英语：）
* CLPython（英语：）
* CPython
* Cython
* Jython
* IronPython
* MicroPython
* Numba
* PyPy
* Python for S60（英语：）
* Psyco
* Stackless Python
* Shed Skin（英语：）
* Unladen Swallow
* *更多……*

 |  |
|  |
| IDE | 
* Boa
* Eclipse
* Eric Python IDE
* IDLE
* SPE（英语：）
* Ninja-IDE
* PyCharm
* PyDev（英语：）
* Aptana（英语：）
* *更多……*

 |
|  |
| 专题 | 
* Web服务器网关接口

 |
|  |
| 
* 软件列表
* Python软件基金会
* PyCon

 |

 |