Download and install
We provide binaries for x86, ARM, PPC and s390x running on different operating systems such as Linux, Mac OS X and Windows:
- the Python2.7 compatible release — PyPy2.7 v5.10.0 — (what's new in PyPy2.7?)
- the Python3.5 compatible release — PyPy3.5 v5.10.1 — (what's new in PyPy3.5?).
- 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 5.10.0
- Linux x86 binary (32bit, tar.bz2 built on Ubuntu 12.04 - 16.04) (see  below)
- Linux x86-64 binary (64bit, tar.bz2 built on Ubuntu 12.04 - 16.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)
- FreeBSD x86 and x86_64: see FreshPorts
- Windows binary (32bit) (you might need the VS 2008 runtime library installer vcredist_x86.exe.)
- PowerPC PPC64 Linux binary (64bit big-endian, Fedora 20) (see  below)
- PowerPC PPC64le Linux binary (64bit little-endian, Fedora 21) (see  below)
- s390x Linux binary (tar.bz2 built on Redhat Linux 7.2) (see  below)
- Source (tar.bz2); Source (zip). See below for more about the sources.
- All our downloads, including previous versions. We also have a mirror, but please use only if you have troubles accessing the links above
Python 3.5.3 compatible PyPy3.5 v5.10.1
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.
- Reverse debugger: This version enables debugging your Python programs by going forward and backward in time. See the RevDB documentation.
- Sandboxing: A special safe version. Read the docs about sandboxing. This version is not supported and not actively maintained. You will likely have to fix some issues yourself, or checkout an old version, or otherwise play around on your own. We provide this documentation only for historical reasons. Please do not use in production. For reference, there are some very old, unmaintained binaries for Linux (32bit, 64bit).
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/pypy2-5.10.0/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
There are as yet few distribution-ready packages. We recommend installing pip, which is the standard package manager of Python. It works like it does on CPython as explained in the installation documentation.
If you use your distribution's PyPy package we recommend you install packages into a virtualenv. If you try to build a module and the build process complains about “missing Python.h”, you may need to install the pypy-dev package.
There are two different versions of NumPy for PyPy. For details see this FAQ question.
1. Standard NumPy
Installation works on any recent PyPy (the release above is fine). The currently released numpy 1.13 works except for nditers with the updateifcopy flag. For example, without using a virtualenv:
$ ./pypy-xxx/bin/pypy -m ensurepip $ ./pypy-xxx/bin/pip install cython numpy
(See the general installation documentation for more.)
The “numpy” module can also be installed from our own repository rather than from the official source. This version uses our built-in _numpypy multiarray replacement module, written in RPython. This module is not complete, but if it works it should give correct answers. Its performance is hard to predict exactly. For regular NumPy source code that handles large arrays, it is likely to be slower than the standard NumPy. It is faster on pure python code that loop over ndarrays doing things on an element-by-element basis.
Installation (see the installation documentation for installing 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 again that this version is incomplete: 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 and the FAQ question about the difference between the two.
Building from source
(see more build instructions)
Get the source code. The preferred way is to checkout the current trunk using Mercurial. The trunk usually works and is of course more up-to-date. The following command should run in about 7 minutes nowadays if you have hg >= 3.7 (it is much slower with older versions):
hg clone https://bitbucket.org/pypy/pypy
The trunk contains PyPy 2. For PyPy 3, switch to the correct branch:
# for PyPy 3: switch to the branch of PyPy that implements Python 3.5 hg update py3.5
Alternatively, get one of the following smaller packages for the source at the same revision as the above binaries:
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 CPython 2.7 or PyPy 2, even to build PyPy 3):
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 half an hour to finish the translation, and about 3GB of RAM on a 32-bit system and about 5GB 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, Packaging.
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. (Older versions like 2.6 are out.)
On some 32-bit systems, the address space limit of 2 or 3 GB of RAM can be an issue. More generally you may be just a little bit low of RAM. First note that 2 GB is really not enough nowadays; on Windows you first need to refer to the Windows build instructions. More precisely, translation on 32-bit takes at this point 2.7 GB if PyPy is used and 2.9 GB if CPython is used. There are two workarounds:
1. use PyPy, not CPython. If you don't have any PyPy so far, not even an older version, then you need to build one first, with some parts removed. So, first translate with ...rpython -Ojit targetpypystandalone --withoutmod-micronumpy --withoutmod-cpyext, then copy pypy-c and libpypy_c.so somewhere else, and finally call it with ...pypy-c ../../rpython/bin/rpython -Ojit.
2. if even using PyPy instead of CPython is not enough, try to tweak some internal parameters. Example (slower but saves around 400MB):
PYPY_DONT_RUN_SUBPROCESS=1 PYPY_GC_MAX_DELTA=200MB pypy --jit loop_longevity=300 ../../rpython/bin/rpython -Ojit --source # then read the next point about --source
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, translating with asmgcroot, 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 default shadow stack option instead (for a small 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-41.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
a2431a9e4ef879da1a2b56b111013b4a6efb87d4173a37bf650de47834ac5fe4 pypy2-v5.9.0-linux32.tar.bz2 790febd4f09e22d6e2f81154efc7dc4b2feec72712aaf4f82aa91b550abb4b48 pypy2-v5.9.0-linux64.tar.bz2 ac0676d91dfb388c799ec5c2845f42018a666423376f52f3ae13d61fd2e6f87d pypy2-v5.9.0-linux-armel.tar.bz2 2597b7b21acdef4f2b81074a594157c9450363c74a17f005548c6b102f93cff4 pypy2-v5.9.0-linux-armhf-raring.tar.bz2 b8a20042a3f34486a372ff7c751539b2e16859c0a7ea69d5a73af92f0fdcb25a pypy2-v5.9.0-linux-armhf-raspbian.tar.bz2 94de50ed80c7f6392ed356c03fd54cdc84858df43ad21e9e971d1b6da0f6b867 pypy2-v5.9.0-osx64.tar.bz2 36d6b5158801c8aa4ef5b9d8990ca0a3782a38a04916be5644a33c2a82465101 pypy2-v5.9.0-s390x.tar.bz2 de4bf05df47f1349dbac97233d9277bbaf1ef3331663ea2557fd5da3dbcfd0a7 pypy2-v5.9.0-src.tar.bz2 db42dbed029eeac2da1dfe9bc71d63c934106acbed6bfad8910d2dabb557d9c2 pypy2-v5.9.0-src.zip b61081e24e05b83d8110da1262be19f0094532c6cacc293e318a1c186d926533 pypy2-v5.9.0-win32.zip
ee1980467ac8cc9fa9d609f7da93c5282503e59a548781248fe1914a7199d540 pypy2-v5.10.0-linux32.tar.bz2 da85af9240220179493ad66c857934dc7ea91aef8f168cd293a2d99af8346ee2 pypy2-v5.10.0-linux64.tar.bz2 6fdd55dd8f674efd06f76edb60a09a03b9b04a5fbc56741f416a94a0b9d2ff91 pypy2-v5.10.0-linux-armel.tar.bz2 5ec3617bb9a07a0a0b2f3c8fbe69912345da4696cdb0a2aca7889b6f1e74435c pypy2-v5.10.0-linux-armhf-raspbian.tar.bz2 7e4120f0a83529a6851cbae0ec107dc7085ba8a4aeff4e7bd9da9aadb1ef37a4 pypy2-v5.10.0-osx64.tar.bz2 dab4dccfa71820c4f803f5a82e13f76517bfde5fafe1e5fba6ff58ef2ba318ab pypy2-v5.10.0-s390x.tar.bz2 1209f2db718e6afda17528baa5138177a14a0938588a7d3e1b7c722c483079a8 pypy2-v5.10.0-src.tar.bz2 89304eb886f84b5c65f3f4079445ef018cdb9a6e59ef4ed2095d37248a3fefcc pypy2-v5.10.0-src.zip 350914f9b70404781674f2f188f84d440d9d25da46ed9733b3f98269a510e033 pypy2-v5.10.0-win32.zip 9afa1a36a5fc55ebc3e80576f05f44294f2b0de279862286fe00f5ee139965b1 pypy2-v5.10.0-ppc64.tar.bz2 2c32ccfa80e3e2ec56b4cc848526046d7b0de1f2f1a92b0cedeb414ec76745ab pypy2-v5.10.0-ppc64le.tar.bz2
pypy 3.5-v5.10.0 sha256:
529bc3b11edbdcdd676d90c805b8f607f6eedd5f0ec457a31bbe09c03f5bebfe pypy3-v5.10.0-linux32.tar.bz2 aa4fb52fb858d973dd838dcf8d74f30705e5afdf1150acb8e056eb99353dfe77 pypy3-v5.10.0-linux64.tar.bz2 c2cc529befb3e1f2ef8bd4e96af4a823c52ef2d180b0b3bd87511c5b47d59210 pypy3-v5.10.0-linux-armel.tar.bz2 4e902e0e79f62f2a9049c1c71310ff4fc801011bec4d25082edb5c537d3f15c9 pypy3-v5.10.0-linux-armhf-raspbian.tar.bz2 7e389a103f560de1eead1271ec3a2df9424c6ccffe7cbae8e95e6e81ae811a16 pypy3-v5.10.0-osx64.tar.bz2 f5ced20934fff78e55c72aa82a4703954349a5a8099b94e77d74b96a94326a2c pypy3-v5.10.0-osx64-2.tar.bz2 e0ffec9d033002eb61af488b1f66c319380da8408abd14a3bc202ded4705dc9a pypy3-v5.10.0-s390x.tar.bz2 a6e4cffde71e3f08b6e1befa5c0352a9bcc5f4e9f5cbf395001e0763a1a0d9e3 pypy3-v5.10.0-src.tar.bz2 96cf354fb410599cd5acd21732855e25e742e13eac7dc079c0c02b0625908cb9 pypy3-v5.10.0-src.zip 2d93bf2bd7b1d031b96331d3fde6cacdda95673ce6875d6d1669c4c0ea2a52bc pypy3-v5.10.0-win32.zip
pypy 3.5-v5.10.1 sha256:
a6ceca9ee5dc511de7902164464b88311fec9366c5673d0c00528eda862bbe54 pypy3-v5.10.1-linux32.tar.bz2 75a276e1ee1863967bbacb70c5bff636de200768c0ec90e72f7ec17aace0aefe pypy3-v5.10.1-linux64.tar.bz2 5065e9ad958d06b9612ba974f43997d20168d4245c054dd43270e4b458782282 pypy3-v5.10.1-linux-armel.tar.bz2 203dd595fbad7055340b23326f20c85b0d6c11c4877e3559a437611fc2ac40c2 pypy3-v5.10.1-linux-armhf-raspbian.tar.bz2 52f006611513c995fdebba6e72d394186d4085460408cbbe086e5467bf3fb9b6 pypy3-v5.10.1-osx64.tar.bz2 f5548e06e2fc0c24ec8b6e3c5b09f90081818f7caa3e436dc312592611724713 pypy3-v5.10.1-src.tar.bz2 182378d7aab395ee6cf539fb011ec0e384624282834aaaed4a663972a5aa8797 pypy3-v5.10.1-src.zip 4edf4f021689a529e5a631c5cca72a1a9dc19a6ea2091e64289cdd5b60eaf929 pypy3-v5.10.1-win32.zip 9ce98481cddede40a3357f7462f2c894bb96f178e2e8715d04feda1476ec1563 pypy3-v5.10.1-s390x.tar.bz2