Download and install

There are nightly binary builds available. Those builds are not always as stable as the release, but they contain numerous bugfixes and performance improvements. Note that the OS X nightly builds (but not the release) are slightly miscompiled due to buildslave being old. Contributions are welcomed.

Here are the binaries for the current release — PyPy 2.2.1 — (what's new in PyPy 2.2.1? what's new in PyPy 2.2?) for x86 and ARM Linux, Mac OS/X, Windows and the older release — PyPy3 2.1 beta1 — (what's new in PyPy3 2.1 beta1?).

“JIT Compiler” version

These binaries include a Just-in-Time compiler. They only work on x86 CPUs that have the SSE2 instruction set (most of them do, nowadays), or on x86-64 CPUs. They also contain stackless extensions, like greenlets. (This is the official release 2.2.1; for the most up-to-date version see below.)


Note that Linux binaries are dynamically linked, as is usual, and thus might not be usable due to the sad story of linux binary compatibility. This means that Linux binaries are only usable on the distributions written next to them unless you're ready to hack your system by adding symlinks to the libraries it tries to open. In general, we recommend either building from source or downloading your PyPy from your release vendor. Ubuntu (PPA), Debian, Homebrew, MacPorts, Fedora, Gentoo and Arch are known to package PyPy, with various degrees of being up-to-date. You may have more chances trying out Squeaky's portable Linux binaries.

PyPy3 2.1 Beta 1

Note that Linux binaries are dynamically linked, as is usual, and thus might not be usable due to the sad story of linux binary compatibility. This means that Linux binaries are only usable on the distributions written next to them unless you're ready to hack your system by adding symlinks to the libraries it tries to open.

If your CPU is really old, it may not have SSE2. In this case, you need to translate yourself with the option --jit-backend=x86-without-sse2.

[1]: stating it again: the Linux binaries are provided for the distributions listed here. If your distribution is not exactly this one, it won't work, likely: pypy: error while loading shared libraries: …. Unless you want to hack a lot, try out the portable Linux binaries.

Other versions

The other versions of PyPy are:

  • The most up-to-date nightly build with a JIT, if the official release is too old for what you want to do. There are versions for different libc on this site too.
  • Sandboxing: A special safe version. Read the docs about sandboxing. (It is also possible to translate a version that includes both sandboxing and the JIT compiler, although as the JIT is relatively complicated, this reduces a bit the level of confidence we can put in the result.) Note that the sandboxed binary needs a full pypy checkout to work. Consult the sandbox docs for details. (These are old, PyPy 1.8.)


All binary versions are packaged in a tar.bz2 or zip file. When uncompressed, they run in-place. For now you can uncompress them either somewhere in your home directory or, say, in /opt, and if you want, put a symlink from somewhere like /usr/local/bin/pypy to /path/to/pypy-2.2.1/bin/pypy. Do not move or copy the executable pypy outside the tree – put a symlink to it, otherwise it will not find its libraries.

Installing more modules

The recommended way is to install pip, which is the standard package manager of Python. It works like it does on CPython. One practical difference, though, is that it usually comes pre-packaged for you when you get CPython from a place like your Linux distribution. In the case of PyPy (or CPython if you download it from, you need to get it separately, as explained in our FAQ.

Installing NumPy

NumPy is an exception to the rule that most packages work without changes. The “numpy” module needs to be installed from our own repository rather than from the official source.

If you have pip (the command-line assumes that it finds the pip belonging to PyPy, not the one from CPython):

pip install git+

Alternatively, the direct way:

git clone
cd numpy
pypy install

Building from source

  1. Get the source code. The following packages contain the source at the same revision as the above binaries:

    Or you can checkout the current trunk using Mercurial (the trunk usually works and is of course more up-to-date):

    hg clone
  2. Make sure you installed the dependencies. See the list here.

  3. Enter the goal directory:

    cd pypy/pypy/goal
  4. Run the rpython script. Here are the common combinations of options (works also with python instead of pypy):

    pypy ../../rpython/bin/rpython -Ojit targetpypystandalone           # get the JIT version
    pypy ../../rpython/bin/rpython -O2 targetpypystandalone             # get the no-jit version
    pypy ../../rpython/bin/rpython -O2 --sandbox targetpypystandalone   # get the sandbox version
  5. Enjoy Mandelbrot :-) It takes on the order of half an hour to finish the translation, and 2.x GB of RAM on a 32-bit system and 4.x GB on 64-bit systems. (Do not start a translation on a machine with insufficient RAM! It will just swap forever. See notes below in that case.)


  • It is recommended to use PyPy to do translations, instead of using CPython, because it is twice as fast. You should just start by downloading an official release of PyPy (with the JIT). If you really have to use CPython then note that we are talking about CPython 2.5-2.7 here, not CPython 3.x.

  • If RAM usage is a problem (or if you are on Windows, because win32's limit is 2 GB unless you hack a lot), then you can (for now) tweak some parameters via environment variables and command-line options. The following command takes a bit more time, but finishes with only using 3.0 GB of RAM (on Linux 64-bit; probably not much more than 1.6 GB on 32-bit). It should be noted that it is less than with CPython.

    PYPY_GC_MAX_DELTA=200MB pypy --jit loop_longevity=300 ../../rpython/bin/rpython -Ojit targetpypystandalone
  • On Linux, because of asmgcroot, compiling the generated C files is delicate. It requires using gcc with no particularly fancy options. It does not work e.g. with clang, or if you pass uncommon options with the CFLAGS environment variable. If you insist on passing these options or using clang, then you can compile PyPy with the shadow stack option instead (for a small performance price in non-JITted code).


Once PyPy is translated from source the binary package similar to those provided in the section Default (with a JIT Compiler) above could be easily created with script as following:

cd ./pypy/pypy/tool/release/
python ../../.. pypy-my-own-package-name


Here are the checksums for each of the downloads (md5 and sha1):

0127094c36f985f6c2b4ed82be3fb6c8  pypy-2.2.1-linux-armel.tar.bz2
278e0ceb961bd0f49af53a01301601d4  pypy-2.2.1-linux-armhf-raring.tar.bz2
dcb1803b109a43b3a5b166bb1f7c4736  pypy-2.2.1-linux-armhf-raspbian.tar.bz2
86ef92a13faf309f4f413e35c01afcab  pypy-2.2.1-linux.tar.bz2
96732d12957fa3c8e58ded2939631e5f  pypy-2.2.1-linux64.tar.bz2
7ec9f48702323f9e93654ba73dd46720  pypy-2.2.1-src.tar.bz2
040cd25e95f62242c41e9d4e1e1c1166  pypy-2.2.1-osx64.tar.bz2
f6adca4d26f34bef9903cc5347c7d688  pypy3-2.1-beta1-linux64.tar.bz2
d57d0d0d3c49c7cce75440924d8f66b7  pypy3-2.1-beta1-linux-armel.tar.bz2
55b82b199ccf537c7ea5e2f31df78dfe  pypy3-2.1-beta1-linux-armhf-raring.tar.bz2
a43e64557fe27b979a8546a89c05652f  pypy3-2.1-beta1-linux-armhf-raspbian.tar.bz2
9ae9d0b67279c557fb4b7f57c3072d0f  pypy3-2.1-beta1-linux.tar.bz2
36634bf17f0e9852fda7cc6745f2df28  pypy3-2.1-beta1-osx64.tar.bz2
bc2013d1927dc1c0c91228e566abd8da  pypy3-2.1-beta1-src.tar.bz2
2c9f0054f3b93a6473f10be35277825a  pypy-1.8-sandbox-linux64.tar.bz2
009c970b5fa75754ae4c32a5d108a8d4  pypy-1.8-sandbox-linux.tar.bz2
5df9cb5348da032cc1b8190101266be41f969bb3  pypy-2.2.1-linux-armel.tar.bz2
f266f0f5a60db6fcdd4aa2c44aa20bf710736c94  pypy-2.2.1-linux-armhf-raring.tar.bz2
8cd77593762c6f4abaa91278590e927db7c08168  pypy-2.2.1-linux-armhf-raspbian.tar.bz2
287bca3f6b6bcc83453317f38777cb825b964902  pypy-2.2.1-linux.tar.bz2
e4dff744853dacbc471b3d3f8db47897497b8c8d  pypy-2.2.1-linux64.tar.bz2
51acfd6dde38e2f50ef75946326cd75c10d69c4b  pypy-2.2.1-src.tar.bz2
caf13d377fcdced4bfadd4158ba3d18d520396f3  pypy-2.2.1-osx64.tar.bz2
6aa8377a09f79f1ce145537865d80716e40378de  pypy3-2.1-beta1-linux64.tar.bz2
c948aa751500e20df0678695524c6fc5088da39c  pypy3-2.1-beta1-linux-armel.tar.bz2
b316e04cd99abccfcfe7007df7ce78e56feb8889  pypy3-2.1-beta1-linux-armhf-raring.tar.bz2
292851e698dcf2f1f9875198d1617a9f3afde635  pypy3-2.1-beta1-linux-armhf-raspbian.tar.bz2
dff08887a9746b9cbb5cb88e29243f7d1aa7639c  pypy3-2.1-beta1-linux.tar.bz2
4455121f59214332b77d7c93e1d1849d0507d4cb  pypy3-2.1-beta1-osx64.tar.bz2
ea56727de793b71f15f741e600dffd0291b77964  pypy3-2.1-beta1-src.tar.bz2
895aaf7bba5787dd30adda5cc0e0e7fc297c0ca7  pypy-1.8-sandbox-linux64.tar.bz2
be94460bed8b2682880495435c309b6611ae2c31  pypy-1.8-sandbox-linux.tar.bz2