Fact-checked by Grok 2 weeks ago

PyPy

PyPy is a fast, compliant alternative implementation of the Python programming language, written in a subset of Python called RPython and featuring a just-in-time (JIT) compiler that typically achieves speeds around 3x faster than the standard CPython interpreter for Python 3.11, while also reducing memory usage for large-scale applications. The project originated in late 2002 or early 2003 as an initiative by a group of Python developers, including Armin Rigo, initially under names like "Minimal Python" or "ptn," and was first publicly announced in January 2003 on the Python mailing list. Early development involved collaborative sprints starting in 2003 in locations such as Hildesheim and Gothenburg, leading to the implementation of a core interpreter. By 2005, PyPy had bootstrapped itself to generate C code via the RPython translation toolchain, enabling efficient execution. Key advancements followed, including the development of a tracing between 2006 and 2009, which significantly boosted performance; by 2011, PyPy was reported to be up to 4x faster than on certain benchmarks. The project supports versions 2.7 and 3.11, with compatibility for popular libraries such as (supported via cpyext compatibility layer), Twisted, , and CFFI for interfacing with extensions. It also incorporates features for lightweight micro-threads, enabling efficient concurrency in applications handling massive parallelism. PyPy is licensed under the and is actively maintained by a community of core developers through sprints, mailing lists, and contributions, with recent milestones including a full transition to in 2023 and ongoing performance optimizations tracked via speed.pypy.org since 2010. Pre-built binaries are available for multiple platforms, making it accessible for deployment in production environments by organizations seeking enhanced performance without altering code.

Overview

Introduction

PyPy is an open-source implementation of the Python programming language, designed as a fast and compliant alternative to the standard CPython interpreter. It employs just-in-time (JIT) compilation to optimize code execution, enabling significant performance improvements for Python programs. The primary goals of PyPy are to deliver faster runtime performance and better memory efficiency compared to CPython, while ensuring full compatibility with standard Python semantics and the majority of existing libraries. Benchmarks indicate that PyPy achieves an average speedup of approximately 2.8 times over CPython 3.11 across a range of workloads, measured as the inverse of the geometric mean of normalized execution times. This focus on speed makes PyPy particularly valuable for applications requiring high computational efficiency without altering source code. In the broader Python ecosystem, PyPy serves as a versatile alternative interpreter, supporting Python 2.7 and 3.11. It facilitates the development of speed-critical applications through built-in extensions, such as the (cffi), which allows seamless integration with and C++ libraries. PyPy's architecture is constructed using RPython, a restricted subset of Python that serves as a toolchain to generate the interpreter in .

Key Features

PyPy distinguishes itself through its just-in-time (JIT) compilation, which dynamically accelerates the execution of Python bytecode by compiling frequently executed code paths into machine code at runtime, often resulting in significant performance improvements for compute-intensive applications. As of 2025, PyPy provides stable support for 3.11 and Python 2.7, with ongoing efforts to maintain compatibility with evolving language standards while incorporating experimental features from subsequent versions. PyPy offers configurable garbage collection options, with its default incminimark collector being an incremental and generational moving GC designed to minimize pause times, making it suitable for low-latency applications by spreading collection work across multiple steps rather than halting execution entirely. Additionally, PyPy includes robust support for the C Foreign Function Interface (CFFI), a mechanism that allows seamless and efficient calling of C libraries from Python code, offering advantages over CPython's ctypes in terms of performance and ease of use for integrating existing C extensions. These capabilities are underpinned by PyPy's RPython-based architecture, which facilitates the implementation of such optimizations without relying on the C programming language.

Technical Foundations

RPython

RPython, or Restricted Python, is a statically analyzable subset of the Python programming language, specifically designed to enable translation into lower-level languages such as C through a dedicated toolchain. This subset is defined not by a formal grammar but by the capabilities of the RPython translation framework, which performs static analysis to infer types and behaviors at translation time. As a result, RPython facilitates the implementation of dynamic language interpreters, with PyPy serving as its primary application. Key restrictions in RPython ensure static analyzability and preclude runtime dynamism that could hinder type inference. For instance, dynamic features like __import__ and eval are prohibited, and all variables must have a single, consistent type at each point in the control flow graph, preventing mixtures such as integers and strings in the same variable. Object usage is limited, with constraints on string methods, no support for variable-length tuples, and dictionaries requiring fixed key types; control structures avoid runtime definitions of classes or functions, and generators are restricted to avoid complex yielding patterns. These limitations make RPython a proper subset of Python, emphasizing predictability over full expressiveness. The translation process begins with RPython source code, which the toolchain annotates to infer types and construct flow graphs representing the program's control flow. Annotation occurs at import time, followed by specialization that optimizes the code based on the inferred types, and culminates in backend code generation, typically producing C code that can be compiled to machine code. Backends support various architectures, including x86, ARM64, PPC64, and RISC-V (as of 2025), with options to enable just-in-time (JIT) compilation for runtime performance enhancements. This pipeline allows RPython programs to be executed interpretively on standard CPython during development for debugging purposes. For PyPy, RPython's design enables the Python interpreter to be written in Python itself, promoting , easier maintenance, and targeted optimizations without sacrificing the benefits of a compiled backend. This approach separates the language specification from its implementation details, allowing iterative improvements to core components like garbage collection and object models. RPython originated in early 2003 as part of the PyPy project, introduced at EuroPython 2003 with an initial focus on via annotated object spaces to enable Python-to-C translation. It gained momentum through an EU-funded effort starting in December 2004, evolving into a robust . Current implementations continue to support diverse backends, ensuring portability across platforms like , Windows, and macOS.

Just-In-Time Compilation

PyPy employs a tracing just-in-time (JIT) compiler that generates native machine code from frequently executed code paths, known as hot code, by recording execution traces during runtime. This approach optimizes the Python interpreter loop by focusing on linear sequences of operations that represent typical program behavior, rather than attempting to compile the entire program statically. The JIT is automatically generated from the RPython-based interpreter using a meta-tracing toolchain, enabling it to adapt to Python's dynamic nature without manual annotations beyond simple hints. The core algorithms revolve around tracing loops and bridges to handle . Loop traces capture operations within a single iteration of a hot in the interpreter, identifying stable patterns such as repeated execution; once a loop warms up through repeated interpretations, tracing begins to build an optimized . Bridge traces connect disparate execution paths, such as when a loop exits to a different branch, ensuring continuity without full re-tracing. To manage Python's dynamism—like object types or —the JIT inserts , which are conditional checks at trace boundaries; if a guard fails (e.g., due to an unexpected value), the trace aborts, and execution falls back to the interpreter, potentially initiating a new from that point. Optimization techniques are applied post-tracing based on runtime profiles observed during execution. These include inlining short functions directly into traces to eliminate call overhead, to precompute invariant expressions (e.g., simplifying arithmetic on known constants), and to reduce branching in repetitive sequences. Such transformations leverage the trace's linear structure for aggressive backend optimizations, like tailored to the traced path. In experimental extensions, the infrastructure has supported (STM) to enable parallel execution of CPU-bound threads by isolating transactional regions and resolving conflicts at commit points, though active development of this feature has ceased. The is configurable via command-line flags passed to the PyPy , such as pypy --jit=off to disable it entirely or --jit=threshold=100 to adjust the iteration count before tracing starts. A warmup phase is inherent, during which the interpreter runs unoptimized code to profile hot paths and build initial traces, typically requiring several iterations before is produced and gains materialize. Despite its strengths, the tracing incurs overhead for short-running programs, where the warmup and tracing costs outweigh benefits before the program terminates. It is inherently tied to PyPy's interpreter loop structure, limiting its applicability to non-interpreter code paths and requiring careful hinting for optimal trace formation in complex scenarios.

Development and History

Origins and Milestones

The PyPy project originated in late 2002 and early 2003, initiated by a group of developers on a who aimed to create a interpreter written in itself, free from the constraints of CPython's C implementation. Initially referred to as "Minimal Python" or "ptn," the project was renamed PyPy, with Armin Rigo emerging as a key founder and visionary for its just-in-time () compilation approach. The first development sprint occurred in , , in 2003, organized by Holger Krekel, marking the beginning of collaborative efforts. By May 2003, during the Gothenburg sprint organized by Laura Creighton and Jacob Halén, the core interpreter had been implemented and successfully ran a simple program. Early progress focused on the interpreter using RPython, a restricted subset of designed for translation to other languages. In July 2005, PyPy achieved its first translation to , though it executed a basic computation like 6 * 7 approximately 200 times slower than . The project's emphasis initially prioritized innovative features like advanced techniques over full compatibility with CPython's ecosystem, leading to challenges in adopting C extensions and maintaining parity with standard libraries. In 2006, Armin Rigo proposed the meta-JIT concept based on partial evaluation, laying the groundwork for performance enhancements. This evolved into multiple prototypes, culminating in the first viable in with the adoption of a tracing-based approach via meta-tracing, which showed promising speedups on benchmarks. By 2010, the launch of speed.pypy.org by Miquel Torres provided ongoing performance tracking against . PyPy reached a significant milestone in 2011 with full support for 2.7, achieving up to 4 times the speed of on select workloads by the end of the Eurostars project. Community engagement grew through sprints and presentations, including Armin Rigo's talks at EuroPython and PyCon events, which highlighted PyPy's progress and fostered contributions. A major shift occurred in 2014 with the stable release of PyPy3 2.3.1 on June 20, introducing compatibility with 3.2.5 syntax and , addressing the community's transition from Python 2 while overcoming compatibility hurdles in the cpyext emulation layer for C extensions like those in and . Recent developments have emphasized broader 3 support and architectural enhancements. In , PyPy began integrating features toward Python 3.11 compatibility, culminating in beta support by early 2025 and full release in PyPy 7.3.20 on , 2025, including stdlib alignment with 3.11.13. ARM64 JIT support, initially added in 2019, has benefited from general improvements in 2024, such as those in PyPy 7.3.17 that enhanced operations across platforms including ARM64. As of November 2025, efforts on Python 3.13 compatibility continue in early stages, focusing on syntax updates and library integration, with no full release announced yet, to maintain PyPy's edge.

Funding and Support

PyPy's development began as a volunteer-driven open-source in 2002–2003, but early financial challenges prompted the team to seek external support. Initial came through participation in programs from 2005 to 2006 under the Python Software Foundation's umbrella, which provided stipends for student contributors working on core features. More substantially, between December 2004 and March 2007, the project received a €1.3 million grant from the European Union's Sixth Framework Programme as a Specific Targeted Research , distributed among seven small-to-medium enterprises and the University of Düsseldorf to enable full-time and collaborative sprints. This EU was pivotal in scaling the project from a proof-of-concept to a viable interpreter. Subsequent grants sustained momentum, including a Eurostars project from 2009 to 2011 that awarded over €0.5 million to partners like merlinux, OpenEnd, and the University of specifically for advancing the just-in-time compiler. In the 2010s, provided $200,000 through its Open Source Support program in 2016–2017 to accelerate Python 3.5 compatibility, addressing a backlog of new language features. Corporate contributions also played a key role through consulting arrangements via Baroque Software, a firm founded by PyPy contributors in 2007. Since 2018, PyPy has relied increasingly on community donations facilitated by the , transitioning in 2020 to Open Collective as its fiscal host to streamline transparent funding for maintenance and releases. This model supports a core team of approximately 10–15 developers, who handle ongoing work through sponsorships and occasional bug bounties for critical fixes, though no formal bounty program exists. The PyPy team has operated without a dedicated non-profit foundation, instead leveraging these platforms for . These funding sources have directly impacted the project's longevity, enabling sustained biannual releases and full-time commitments that tied into milestones like JIT maturation, though post-2020 funding gaps have posed challenges amid rising maintenance costs and volunteer reliance.

Performance and Compatibility

Benchmarks and Comparisons

PyPy's performance is evaluated using standardized benchmark suites such as the PyPerformance suite, which focuses on real-world Python workloads including CPU-bound tasks like numerical computations and string processing. According to public benchmarks on speed.pypy.org, PyPy 3.11 achieves a geometric mean speedup of approximately 2.8 times over CPython 3.11 across a diverse set of tests, with individual benchmarks showing variations from marginal improvements to significant accelerations. This average aligns with broader reports indicating PyPy's overall efficiency gains, though results depend on the workload's characteristics. In CPU-bound scenarios, PyPy demonstrates substantial speedups, often reaching 7-10 times faster than for tasks involving tight loops and intensive computations, such as algorithmic simulations or . For instance, in benchmarks like those from the PyPerformance suite, PyPy excels in pure code execution, where its just-in-time () compiler optimizes hot code paths, leading to up to 50 times improvement in select cases like calls or operations. However, these gains are most pronounced after the JIT has warmed up, typically requiring 1-10 seconds depending on the application's complexity. Compared to , PyPy is faster for long-running, loop-heavy applications but exhibits slower startup times due to JIT initialization overhead. It also outperforms legacy implementations like and IronPython in terms of modern 3 support and raw execution speed on standard hardware, as Jython's JVM integration and IronPython's .NET focus limit their compatibility with recent features and yield lower JIT efficiencies for pure code. In contrast, tools like Numba serve as complementary accelerators for numerical and scientific , where Numba's LLVM-based can achieve even higher speedups on vectorized operations, but PyPy provides broader applicability without requiring annotations. Several factors influence PyPy's performance profile. The JIT warmup time, often 1-10 seconds, delays initial execution but enables sustained speedups in long-running applications like servers or simulations, whereas short scripts may run slower overall. Memory usage tends to be higher than CPython's—up to 3-4 times in some cases—due to tracing JIT artifacts and garbage collection overhead, though this is mitigated in steady-state workloads. PyPy's tracing-based JIT contributes to these traits by focusing optimizations on frequently executed paths, making it less ideal for one-off scripts but highly effective for persistent processes. As of 2025, PyPy's integration of 3.11 features has yielded measurable improvements. Public tools like speed.pypy.org provide ongoing benchmark tracking, allowing comparisons across PyPy releases and against , with data updated from runs on the PyPerformance suite.

Compatibility with

PyPy strives to maintain full compatibility with the semantics of , the of , ensuring that pure code runs identically in most cases. It passes the vast majority of CPython's test suites, demonstrating high adherence to language standards. As of 2025, PyPy supports 2.7 as a legacy version and 3.9, 3.10, and 3.11 for modern usage, though it typically lags slightly behind the newest releases, such as 3.12. PyPy does not yet support 3.12, released in October 2023, and typically follows releases with a delay. For handling C extensions, PyPy provides the cpyext compatibility layer, which emulates the C to allow many existing extensions to run, albeit with reduced performance compared to native execution due to the overhead of the emulation. For optimal performance, PyPy recommends using alternatives like CFFI () or , which integrate more efficiently with PyPy's compiler and avoid the slowdowns associated with cpyext. These approaches enable faster execution of extension modules while maintaining compatibility. Despite its strong overall compatibility, PyPy has known incompatibilities with certain C-heavy libraries, such as , where the reliance on intricate C interactions can lead to failures or incomplete support. Platform-specific issues also arise on Windows, including problems with loading certain .pyd extension modules and occasional bugs in ctypes handling. To migrate to PyPy, developers should use the pypy3 for Python 3 execution, which serves as a drop-in replacement for the standard python3 interpreter in most scenarios. For custom builds or troubleshooting incompatibilities, testing with translation flags during the build process—such as enabling specific optimization options—helps verify and resolve edge cases. While extension compatibility may introduce performance trade-offs compared to , as explored in benchmarks, the focus here remains on functional adherence.

Usage and Ecosystem

Installation and Usage

PyPy can be obtained through prebuilt binaries available for major platforms, including (x86_64 and ARM64), macOS (ARM64 and x86_64), and Windows (64-bit), downloadable from the official PyPy website at pypy.org. These binaries support versions 2.7 and 3.11, with compatibility noted for specific operating systems like 7+ for and macOS 10.15+ for x86_64 builds. Nightly builds, which include the latest bug fixes and improvements but may be less stable, are also provided for these platforms. For source builds, the PyPy repository can be cloned using from , followed by installing build dependencies and running the translation process with a driver interpreter to compile the executable. Installation methods vary by platform and preference. On , PyPy can be installed via distribution package managers such as apt (e.g., sudo apt install pypy3), which may require additional packages like pypy3-dev for compiling extensions. For macOS, Homebrew provides signed packages (e.g., brew install pypy3), ensuring compatibility and ease of updates as of recent releases. Note that conda-forge discontinued new PyPy package builds in late 2024, though older environments may still function. For containerized deployments, official images are available on Docker Hub, supporting Linux-based environments and various architectures for quick setup in production or testing scenarios. After unpacking binaries or completing installation, can be bootstrapped if needed using pypy -m ensurepip to enable package management. The latest stable release as of July 2025 is PyPy 7.3.20, which includes fixes for subtle bugs in ctypes and other modules. Basic usage involves invoking the interpreter directly to run scripts. For example, after extraction, scripts can be executed with ./pypy3.11-v7.3.20-linux64/bin/pypy3 script.py or, once added to the , simply pypy3 script.py for Python 3-compatible code. Virtual environments are supported through tools like virtualenv, where a PyPy-specific environment is created with virtualenv -p /path/to/pypy/bin/pypy myenv and activated via source myenv/bin/activate, ensuring isolated dependencies. Configuration options are primarily set at translation time for custom builds. The Just-In-Time (JIT) compiler is enabled by default in standard binaries but can be explicitly included during source using the --jit flag to optimize for performance. Garbage collection tuning, such as selecting the incremental minimal mark-sweep collector, is configured with --gc=incminimark during , which is the default for most builds and balances memory usage with low pause times. Runtime adjustments, like disabling the for , can be achieved via environment variables such as PYPYLOG=jit-logging:disabled. Common troubleshooting steps address platform-specific issues. On Windows, the SSL module may require a certificate store; users can install the certifi package and set SSL_CERT_FILE to its location (e.g., via import certifi; os.environ['SSL_CERT_FILE'] = certifi.where()) to resolve verification failures during operations. Additionally, if is absent or outdated post-installation, running pypy -m ensurepip --upgrade installs or updates it along with setuptools and . For compatibility during setup, PyPy aligns closely with CPython's , though some C extensions may need recompilation.

Notable Applications and Projects

In scientific computing, PyPy's compatibility with through a c-extension layer allows it to accelerate numerical simulations and workflows. Researchers at the Árni Magnússon Institute for Icelandic Studies utilized PyPy in their pipeline for Icelandic, developing open-source tools for tokenization, vocabulary lookup, and n-gram analysis on large corpora. Other notable projects leverage PyPy for specialized domains. Telecom provider PortaOne employs PyPy in its core processing engine, handling over one billion phone calls monthly with a performance boost over since switching in 2014; this includes real-time billing and routing optimized via PyPy's . In version control, while itself is written in , PyPy's historical use of for its repository management highlights compatibility in distributed systems tools. Developers have implemented custom runtimes for using PyPy, enabling faster execution for CPU-intensive data processing tasks despite longer cold starts due to larger package size, as the JIT warms up efficiently in serverless contexts. In game development, the pygame_cffi library adapts for PyPy, delivering 2-5x speedups in loop-heavy scripts for 2D games, making it suitable for prototyping titles on resource-constrained platforms like the . These examples underscore PyPy's role in reducing without altering application logic. Community-driven projects further illustrate PyPy's ecosystem integration. The Hypothesis property-based testing library runs natively on PyPy, supporting randomized test generation for robust . For AI and ML pipelines, PyPy provided support for via c-extension compatibility up to 2023, enabling faster model training and inference in prototyping phases where pure code dominates.

References

  1. [1]
    PyPy
    A fast, compliant alternative implementation of Python. Download PyPy. What is PyPy? Documentation (external link)Download · PyPy documentation · PyPy Sponsors and Consultants · Performance
  2. [2]
    Frequently Asked Questions - PyPy documentation
    PyPy is a reimplementation of Python in Python, using the RPython translation toolchain. PyPy tries to find new answers about ease of creation, flexibility, ...
  3. [3]
    The First 15 Years of PyPy — a Personal Retrospective
    Sep 9, 2018 · PyPy is a Python interpreter written in Python, which is where the name comes from. It also has an automatically generated JIT compiler.
  4. [4]
  5. [5]
  6. [6]
    PyPy has moved to Git, GitHub
    Dec 29, 2023 · PyPy has moved its canonical repo and issue tracker from https://foss.heptapod.net/pypy/pypy to https://github.com/pypy/pypy.
  7. [7]
    PyPy Speed
    - **PyPy Performance vs CPython**:
  8. [8]
    Download and Install - PyPy
    We provide pre-compiled binaries for many platforms and OSes. Note: Our nightly binary builds have the most recent bugfixes and performance improvements.
  9. [9]
    The RPython Toolchain - Read the Docs
    To start with we describe the process of translating an RPython program into C (which is the default and original target). The RPython translation toolchain ...
  10. [10]
    PyPy 1.2: Just-in-Time Compilation
    The focus of this release is the introduction of a new transformation, the JIT Compiler Generator, and its application to the Python interpreter. Socially, PyPy ...
  11. [11]
    PyPy v7.3.20: release of python 2.7, 3.11, released 2025-07-04
    Jul 4, 2025 · The PyPy team is proud to release version 7.3.20 of PyPy after the previous release on Feb 26, 2025. The release fixes some subtle bugs in ctypes and ...
  12. [12]
    PyPy's sandboxing features
    PyPy offers sandboxing at a level similar to OS-level sandboxing (eg SECCOMP on Linux), but implemented in a fully portable way.
  13. [13]
    Application-level Stackless features - PyPy documentation
    PyPy can expose to its user language features similar to the ones present in Stackless Python: the ability to write code in a massively concurrent style.Theory · Application Level Interface · Continulets
  14. [14]
    Garbage collector documentation and configuration
    PyPy's default garbage collector is called incminimark - it's an incremental, generational moving collector. Here we hope to explain a bit how it works.
  15. [15]
    Fixing a Bug in PyPy's Incremental GC
    Mar 26, 2024 · The GC is incremental because every collection step will only trace a limited number of gray objects, before giving control back to the program.
  16. [16]
    What's new in PyPy2.7 5.7 - PyPy documentation
    The Cling-backend brings support for modern C++ (11, 14, etc.), dynamic template instantiations, and improved integration with CFFI for better performance.<|separator|>
  17. [17]
    Goals and Architecture Overview - PyPy documentation
    PyPy's Python Interpreter is written in RPython and implements the full Python language. This interpreter very closely emulates the behavior of CPython. It ...Pypy Python Interpreter · Layers · Rpython
  18. [18]
    RPython Language - Read the Docs
    RPython is a restricted subset of Python that is amenable to static analysis. ... PyPy has the advantage that it is runnable on standard CPython. That ...
  19. [19]
    Frequently Asked Questions — RPython Documentation
    PyPy's RPython is the implementation language for dynamic language interpreters. However, PyPy also provides a robust sandboxed Python Interpreter.
  20. [20]
    A report from the first day at EuroPython - LWN.net
    Jun 25, 2003 · We can use PyPy as an experimentation base for differents ways to do profiling, memory management, data structures. The project started early ...
  21. [21]
    Motivating JIT Compiler Generation — RPython Documentation
    The PyPy JIT started out as a metaprogrammatic, non-language-specific equivalent of Psyco. A different kind of prior art are self-hosting JIT compilers such as ...
  22. [22]
    Tracing the meta-level: PyPy's tracing JIT compiler
    In this paper we show how to guide tracing JIT compilers to greatly improve the speed of bytecode interpreters. One crucial point is to unroll the bytecode ...
  23. [23]
    Software Transactional Memory - PyPy documentation
    This page is about pypy-stm, a special in-development version of PyPy which can run multiple independent CPU-hungry threads in the same process in parallel.
  24. [24]
    JIT help - PyPy documentation
    This avoids JIT compilation of rare paths even on long-running programs. ... print this page. The pypyjit module can be used to control the JIT from inside pypy.
  25. [25]
    First results of the JIT - PyPy
    Sep 27, 2009 · If the executable also contains a JIT, we call it pypy-c-jit. Carl Friedrich Bolz-Tereick wrote on 2009-10-05 15:48: Ben Scherrey: 64bit ...Missing: prototype | Show results with:prototype
  26. [26]
    PyPy3 2.3.1 - Fulcrum | PyPy
    Jun 20, 2014 · The first stable release of PyPy3: support for Python 3! · The stdlib has been updated to Python 3.2.5 · Additional support for the u'unicode' ...
  27. [27]
    PyPy v7.3.20 release
    Jul 4, 2025 · PyPy v7.3.20: release of python 2.7, 3.11¶ ... The PyPy team is proud to release version 7.3.20 of PyPy after the previous release on Feb 26, 2025 ...
  28. [28]
    PyPy JIT for Aarch64
    Jul 25, 2019 · This port brings PyPy's high-performance just-in-time compiler to the AArch64 platform, also known as 64-bit ARM.
  29. [29]
    PyPy v7.3.17 release
    Aug 28, 2024 · PyPy v7.3.17 includes a new RISC-V JIT backend, improved REPL, better integer JIT optimizations, and supports Python 2.7 and 3.10.Missing: ARM64 | Show results with:ARM64
  30. [30]
    Historical release notes - PyPy documentation
    PyPy v7.3.17: release of python 2.7 and 3.10, released 2024-08-28 · PyPy v7.3.16: release of python 2.7, 3.9, and 3.10, released 2024-04-23 ...
  31. [31]
    The Python Performance Benchmark Suite — Python Performance ...
    Other Python Benchmarks: CPython: speed.python.org uses pyperf, pyperformance and Codespeed (Django web application). PyPy: speed.pypy.org uses PyPy benchmarks.
  32. [32]
    python/pyperformance: Python Performance Benchmark Suite - GitHub
    The pyperformance project is intended to be an authoritative source of benchmarks for all Python implementations. The focus is on real-world benchmarks, ...Missing: CPython | Show results with:CPython
  33. [33]
    What is PyPy? Faster Python without pain - InfoWorld
    Aug 2, 2023 · On the (geometric) average, PyPy speeds up Python by about 4.7 times over Python 3.7, with some tasks accelerated 50 times or more. While JIT ...
  34. [34]
    Is Python Really That Slow? - miguelgrinberg.com
    Nov 18, 2024 · But overall, PyPy still runs at speeds that are much closer to Node than to CPython. Almost 18 times faster than Python 3.13, which is amazing.
  35. [35]
    Performance | PyPy
    PyPy's runtime is generally not as optimized as CPython's and we expect those functions to take somewhere between the same time as CPython to twice as long.
  36. [36]
    PyPy warmup improvements
    Sep 9, 2015 · Under this cryptic name is the biggest JIT refactoring we've done in a couple years, mostly focused on the warmup time and memory impact of PyPy ...
  37. [37]
    Speed Comparison: Putting Pyston and PyPy to the Test
    Aug 25, 2016 · Prior to the JIT “warming up”, PyPy performed significantly worse than the standard CPython implementation.Missing: factors | Show results with:factors<|separator|>
  38. [38]
    What's the deal with CPython, Pypy, MicroPython, Jython...?
    Jun 27, 2023 · Jython is Python for the Java Virtual Machine. It can run from inside Java code, and even import and use Java classes. The main benefit is the ...
  39. [39]
    Numba vs PyPy 3 - Python Interpreters Benchmarks
    Each chart bar shows, for one unidentified benchmark, how much the fastest Numba program used compared to the fastest PyPy 3 program.
  40. [40]
    PyPy memory usage increasing over time - Stack Overflow
    Mar 12, 2015 · PyPy is known to use more baseline memory than CPython, and this number is known to increase over time, as the JIT compiles more and more machine code.pypy memory usage grows forever? - Stack OverflowPyPy significantly slower than CPython - Stack OverflowMore results from stackoverflow.comMissing: factors | Show results with:factors
  41. [41]
    Warmup improvements: more efficient trace representation - PyPy
    Apr 7, 2016 · As we can see, the overall warmup benchmarks got up to 90% faster with JIT time dropping by up to 2.5x. We have more optimizations in the ...Missing: factors | Show results with:factors
  42. [42]
    Towards PyPy3.11 - an update
    Jan 4, 2025 · We are steadily working towards a Python 3.11 interpreter, which will be part of the upcoming PyPy 7.3.18 release.
  43. [43]
    Python compatibility - PyPy
    The goal of this page is to point out some of the differences between running python with PyPy and with CPython
  44. [44]
    Differences between PyPy and CPython
    PyPy uses a special strategy to optimize dictionaries whose keys are instances of user-defined classes which do not override the default __hash__ , __eq__ and ...
  45. [45]
    Writing extension modules for pypy - PyPy documentation
    PyPy's implementation is not strictly 100% compatible with CPython, but close enough for most cases. More (but older) information is available here. Also, ...
  46. [46]
    Make TensorFlow compatible with PyPy · Issue #252 - GitHub
    Nov 17, 2015 · The trick to make it work is to rename the generated _pywrap_tensorflow.so to _pywrap_tensorflow.pypy-XX.so, where XX is the pypy version code.
  47. [47]
    Issues · pypy/pypy - GitHub
    Loading of any *,pyd fails on Windows - PyPy PyPy 7.3.20 Windows x64. Status ... Footer. © 2025 GitHub, Inc. Footer navigation. Terms · Privacy · Security ...
  48. [48]
    PyPy is a very fast and compliant implementation of the Python ...
    Welcome to PyPy! PyPy is an interpreter that implements the Python programming language, based on the RPython compiler framework for dynamic language ...PyPy · Issues 720 · Wiki
  49. [49]
    Building PyPy from Source
    For building PyPy, we recommend installing a pre-built PyPy first (see Downloading and Installing PyPy). It is possible to build PyPy with CPython, but it will ...<|control11|><|separator|>
  50. [50]
    Downloading and Installing PyPy
    The quickest way to start using PyPy is to download a prebuilt binary for your OS and architecture. You may be able to use either use the most recent release.
  51. [51]
  52. [52]
    pypy - Official Image - Docker Hub
    PyPy is a Python interpreter and just-in-time compiler. PyPy focuses on speed, efficiency and compatibility with the original CPython interpreter. PyPy started ...
  53. [53]
    PyPy Python interpreter options
    General translation options¶ ; -b –backend: Backend to use for code generation ; –cc: Specify compiler to use for compiling generated C ; –continuation: enable ...<|control11|><|separator|>
  54. [54]
    Configuration Options for PyPy - PyPy documentation
    This directory contains documentation for the many configuration options that can be used to affect PyPy's behaviour.Missing: disable flags
  55. [55]
    JIT hooks - PyPy documentation
    There are several hooks in the pypyjit module that may help you with understanding what pypy's JIT is doing while running your program.Missing: flags | Show results with:flags
  56. [56]
    Natural Language Processing for Icelandic with PyPy: A Case Study
    Feb 6, 2022 · The project focuses on collecting data and developing open source software for a range of core applications, such as tokenization, vocabulary lookup, n-gram ...Missing: studies | Show results with:studies
  57. [57]
    Guest Post: How PortaOne uses PyPy for high-performance ...
    Aug 29, 2024 · Improving our performance with PyPy¶. We started with CPython and then in 2014 switched to PyPy because it was faster. Here's an exact quote ...
  58. [58]
    A Pypy Runtime for AWS Lambda
    Dec 11, 2018 · Running Pypy on AWS Lambda as a custom runtime is possible and not very complicated. There is a clear advantage over CPython when it comes to long-running ...
  59. [59]
    pygame_cffi: pygame on PyPy
    Mar 26, 2014 · One solution to making pygame games run faster on PyPy, and eventually on the Raspberry Pi, comes in the form of pygame_cffi.
  60. [60]
    hypothesis - PyPI
    Hypothesis is the property-based testing library for Python. With Hypothesis, you write tests which should pass for all inputs in whatever range you describe.
  61. [61]
    PyPy 5.0
    Use hypothesis in test creation, which is great for randomizing tests. Bug Fixes. Backport always using os.urandom for uuid4 from cpython and fix the JIT as ...