Download and install
We provide binaries for x86 and ARM Linux, Mac OS/X and Windows for:
- the Python2.7 compatible release — PyPy 2.6.1 — (what's new in PyPy 2.6.1?)
- the Python3.2.5 compatible release — PyPy3 2.4.0 — (what's new in PyPy3 2.4.0?).
- the Python2.7 Software Transactional Memory special release — PyPy-STM 2.5.1 (Linux x86-64 only)
“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.
Linux binaries and common distributions
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. There are better solutions:
Python2.7 compatible PyPy 2.6.1
Linux x86 binary (32bit, tar.bz2 built on Ubuntu 12.04 - 14.04) (see  below)
ARM Hardfloat Linux binary (ARMHF/gnueabihf, tar.bz2, Raspbian) (see  below)
Python 3.2.5 compatible PyPy3 2.4.0
- Linux x86 binary (32bit, tar.bz2 built on Ubuntu 10.04.4 LTS) (see  below)
- Linux x86-64 binary (64bit, tar.bz2 built on Ubuntu 12.04 - 14.04) (see  below)
- ARM Hardfloat Linux binary (ARMHF/gnueabihf, tar.bz2, Raspbian) (see  below)
- ARM Hardfloat Linux binary (ARMHF/gnueabihf, tar.bz2, Ubuntu Raring) (see  below)
- ARM Softfloat Linux binary (ARMEL/gnueabi, tar.bz2, Ubuntu Precise) (see  below)
- Mac OS/X binary (64bit)
- Windows binary (32bit) (you might need the VS 2008 runtime library installer vcredist_x86.exe.)
- Source (tar.bz2)
- Source (zip)
- All our downloads, including previous versions. We also have a mirror, but please use only if you have troubles accessing the links above
If your CPU is really, really old, it may be a x86-32 without SSE2. There is untested support for manually translating PyPy's JIT without SSE2 (--jit-backend=x86-without-sse2) but note that your machine is probably low-spec enough that running CPython on it is a better idea in the first place.
: 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, you will probably see: pypy: error while loading shared libraries: …. Unless you want to hack a lot, try out the portable Linux binaries.
This is a special version of PyPy! See the Software Transactional Memory (STM) documentation.
The other versions of PyPy are:
- The most up-to-date nightly binary builds 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.6.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 http://www.python.org/), you need to get it separately, as explained in our FAQ.
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:
pypy -m pip install git+https://bitbucket.org/pypy/numpy.git
Alternatively, the direct way:
git clone https://bitbucket.org/pypy/numpy.git cd numpy pypy setup.py install
If you installed to a system directory, you need to also run this once:
sudo pypy -c 'import numpy'
Note that NumPy support is still a work-in-progress, many things do not work and those that do may not be any faster than NumPy on CPython. For further instructions see the pypy/numpy repository.
Building from source
Get the source code. The following packages contain the source at the same revision as the above binaries:
- pypy-2.6.1-src.tar.bz2 (sources)
Or you can checkout the current trunk using Mercurial (the trunk usually works and is of course more up-to-date):
hg clone https://bitbucket.org/pypy/pypy
Make sure you installed the dependencies. See the list here.
Enter the goal directory:
Run the rpython script. Here are the common combinations of options (works also with python instead of pypy; requires Python 2.x or PyPy 2):
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
Enjoy Mandelbrot :-) It takes on the order of 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.)
If you want to install this PyPy as root, please read the next section.
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.7 here, not CPython 3.x. (CPython 2.6 might or might not work. Older versions are out.)
If RAM usage is a problem (or if you are on Windows, because win32's limit is 2 GB unless you have a 64 bit OS), 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
You can run translations with --source, which only builds the C source files (and prints at the end where). Then you can cd there and execute make. This is another way to reduce memory usage. Note that afterwards, you have to run manually pypy-c .../pypy/tool/build_cffi_imports.py if you want to be able to import the cffi-based modules.
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 some performance price in non-JITted code).
Like other JITs, PyPy doesn't work out of the box on some Linux distributions that trade full POSIX compliance for extra security features. E.g. with PAX, you have to run PyPy with paxctl -cm. This also applies to translation (unless you use CPython to run the translation and you specify --source).
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 package.py script as following:
cd ./pypy/pypy/tool/release/ python package.py --help #for information python package.py --archive-name pypy-my-own-package-name
It is recommended to use package.py because custom scripts will invariably become out-of-date. If you want to write custom scripts anyway, note an easy-to-miss point: some modules are written with CFFI, and require some compilation. If you install PyPy as root without pre-compiling them, normal users will get errors:
- PyPy 2.5.1 or earlier: normal users would see permission errors. Installers need to run pypy -c “import gdbm” and other similar commands at install time; the exact list is in package.py. Users seeing a broken installation of PyPy can fix it after-the-fact if they have sudo rights, by running once e.g. sudo pypy -c "import gdbm.
- PyPy 2.6 and later: anyone would get ImportError: no module named _gdbm_cffi. Installers need to run pypy _gdbm_build.py in the lib_pypy directory during the installation process (plus others; see the exact list in package.py). Users seeing a broken installation of PyPy can fix it after-the-fact, by running pypy /path/to/lib_pypy/_gdbm_build.py. This command produces a file called _gdbm_cffi.pypy-26.so locally, which is a C extension module for PyPy. You can move it at any place where modules are normally found: e.g. in your project's main directory, or in a directory that you add to the env var PYTHONPATH.
Here are the checksums for each of the downloads
2346426786459fdc72ad03fe75a98b35 pypy-2.6.1-freebsd64.tar.bz2 eb265bad9f61029f7a6bc5032d0e5459 pypy-2.6.1-linux64.tar.bz2 45418996d8d81c7d72437d4a6e610fb3 pypy-2.6.1-linux-armel.tar.bz2 980cce0274b0a80d8b2da1242ab323e9 pypy-2.6.1-linux-armhf-raring.tar.bz2 56e80fdb9b3cdec59b4f38af2456c63c pypy-2.6.1-linux-armhf-raspbian.tar.bz2 36c6d0ea043027e49cabb6a31fb3388a pypy-2.6.1-linux.tar.bz2 d6f847a3c2fb795f5f4fbd670459908c pypy-2.6.1-osx64.tar.bz2 7e53f72eeb6d9947fd5db6872213404d pypy-2.6.1-src.tar.bz2 7df9dce6c6d353069463e4ecdf460fbf pypy-2.6.1-src.zip 890465185948f4043c7104c05bf75fe2 pypy-2.6.1-win32.zip
eadbc9790823fc0ae40c943087cd7cb3 pypy3-2.4.0-linux64.tar.bz2 7ab84727da2d5363866907f2f7921d86 pypy3-2.4.0-linux-armel.tar.bz2 83158d3a55ca134b179ef01dc2bb6a30 pypy3-2.4.0-linux-armhf-raring.tar.bz2 b0b81cfa46e970c584bda10feebe1a85 pypy3-2.4.0-linux-armhf-raspbian.tar.bz2 68af7a6ca5948a1448a4b9c839d1472c pypy3-2.4.0-linux.tar.bz2 c6cd12602469446db1dfa1e2bc6c699c pypy3-2.4.0-osx64.tar.bz2 8514f16b1a6262828e824bd8b37607db pypy3-2.4.0-win32.zip 96ba72916114d16904e12562b5d84e51 pypy3-2.4.0-src.tar.bz2 c58015d0d3e08a9f24b93b8edca26d4d pypy3-2.4.0-src.zip
pypy-1.8 sandbox md5:
2c9f0054f3b93a6473f10be35277825a pypy-1.8-sandbox-linux64.tar.bz2 009c970b5fa75754ae4c32a5d108a8d4 pypy-1.8-sandbox-linux.tar.bz2
- pypy-2.6.1 sha1::
- 119148e67e94419e86ba11b6cfab826c093496eb pypy-2.6.1-freebsd64.tar.bz2 20197f670edb3783565bd092c14658fca61c695a pypy-2.6.1-linux64.tar.bz2 033f65def368025f5e051320be233ec60102f143 pypy-2.6.1-linux-armel.tar.bz2 672bc22ad81c471b0d8622e826bf16c522bfbeb0 pypy-2.6.1-linux-armhf-raring.tar.bz2 6c2b1113237da87867b0b06a044b26f506050abc pypy-2.6.1-linux-armhf-raspbian.tar.bz2 1f27ed11398172a45f870cc37cfd0992bf49fba8 pypy-2.6.1-linux.tar.bz2 a7b2dd8380ae96a9a8934e99d898853257c2e7e4 pypy-2.6.1-osx64.tar.bz2 bf0f986bc64b71489983a12f2eb9b504d2ac6fd4 pypy-2.6.1-src.tar.bz2 d4f7e6b7a2e85ea10365be5cadf46bc5d618dab3 pypy-2.6.1-src.zip 38f710c16f06cc4b99ff2b5bda902624711149bb pypy-2.6.1-win32.zip
7d715742f6929351b310a2ca3b924cab35913089 pypy3-2.4.0-linux64.tar.bz2 b33e817f3557f91c434032c9f74e5220fe70036c pypy3-2.4.0-linux-armel.tar.bz2 bb098b72ecc83a0e73c426f364bb6a0974fb9360 pypy3-2.4.0-linux-armhf-raring.tar.bz2 775dc9f8073c4fad7cd220c4b5dd385e7be469e9 pypy3-2.4.0-linux-armhf-raspbian.tar.bz2 c39061f3e5e7a05548eb89c5cbd3ed81a795879f pypy3-2.4.0-linux.tar.bz2 9f01d8c5e18c8c7d54fc6ab77dbf5673a65c2af9 pypy3-2.4.0-osx64.tar.bz2 2efca54daa4c5da23ef577d70006376e13cfb6b8 pypy3-2.4.0-win32.zip 438572443ae6f54eb6122d807f104787c5247e01 pypy3-2.4.0-src.tar.bz2 bd0a91cdda965f42c382bf00f4a2fb8677b929a6 pypy3-2.4.0-src.zip
pypy-1.8 sandbox sha1:
895aaf7bba5787dd30adda5cc0e0e7fc297c0ca7 pypy-1.8-sandbox-linux64.tar.bz2 be94460bed8b2682880495435c309b6611ae2c31 pypy-1.8-sandbox-linux.tar.bz2