Download and install
Here are the various binaries of PyPy 1.8 that we provide for x86 Linux, Mac OS/X or Windows.
“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 1.8; for the most up-to-date version see below.)
- Linux binary (32bit) (openssl0.9.8 notes)
- Linux binary (64bit) (openssl0.9.8 notes)
- Mac OS/X binary (64bit)
- Windows binary (32bit) (you need the VS 2010 runtime libraries) note: the zip file contains the wrong version, msvcrt90.dll :-(
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.
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.
- No JIT: A version without the JIT. Consumes a bit less memory and may be faster on short-running scripts. (Note that a similar effect can be obtained by running pypy --jit off.)
- 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
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-1.8/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.
Linux binaries require a system with the correct set of libraries. Right now one problem is OpenSSL, which some distributions distribute in version 0.9.8 and others in version 1.0.0. The binaries require 0.9.8. If you can't install it in your distribution, pick it the latest openssl-0.9.8*.tar.gz from sources and install it with ./config shared; make; make install.
Building from source
Get the source code. The following packages contain the source at the same revision as the above binaries:
- pypy-1.8-src.tar.bz2 (sources, Unix line endings)
- pypy-1.8-src.zip (sources, Unix line endings too, sorry)
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 translate.py script. Here are the common combinations of options (works also with python instead of pypy):
pypy translate.py -Ojit # get the JIT version pypy translate.py -O2 # get the no-jit version pypy translate.py -O2 --sandbox # get the sandbox version pypy translate.py -Ojit --backend=cli # only for branch/cli-jit
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 ./translate.py -Ojit
Because of asmgcroot, compiling the generated C files containing the JIT is delicate. It requires using either MSVC or 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. You can also try to compile PyPy with the shadow stack option.
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 ../../.. pypy-my-own-package-name
Here are the checksums for each of the downloads (md5 and sha1):
3b81363ccbc042dfdda2fabbf419e788 pypy-1.8-linux64.tar.bz2 c4a1d11e0283a390d9e9b801a4633b9f pypy-1.8-linux.tar.bz2 1c293253e8e4df411c3dd59dff82a663 pypy-1.8-osx64.tar.bz2 1af8ee722721e9f5fd06b61af530ecb3 pypy-1.8-win32.zip 2c9f0054f3b93a6473f10be35277825a pypy-1.8-sandbox-linux64.tar.bz2 009c970b5fa75754ae4c32a5d108a8d4 pypy-1.8-sandbox-linux.tar.bz2 661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2 (source) a6bb7b277d5186385fd09b71ec4e35c9e93b380d pypy-1.8-linux64.tar.bz2 089f4269a6079da2eabdeabd614f668f56c4121a pypy-1.8-linux.tar.bz2 15b99f780b9714e3ebd82b2e41577afab232d148 pypy-1.8-osx64.tar.bz2 77a565b1cfa4874a0079c17edd1b458b20e67bfd pypy-1.8-win32.zip 895aaf7bba5787dd30adda5cc0e0e7fc297c0ca7 pypy-1.8-sandbox-linux64.tar.bz2 be94460bed8b2682880495435c309b6611ae2c31 pypy-1.8-sandbox-linux.tar.bz2 4ff684619671d6076879eff88343184d7656c699 release-1.8.tar.bz2 (source)