PyPy 1.7发布

On 2011年11月22日, in soft, by netoearth

用Python语言实现的Python解释器PyPy发布了1.7版。新版的特性主要集中在性能改进上,速度大大提升。根据基准测试结果,PyPy 1.7平均比PyPy 1.6快30%,在某些测试项目甚至速度是后者的20倍之多。除此之外,新版改进了栈式存储和NumPy支持,不过支持并不完整,以及大量bug修正,等等。

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.

Here are the various binaries of PyPy 1.7 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 SSE2instruction set (most of them do, nowadays), or on x86-64 CPUs. (This is the official release 1.7; for the most up-to-date version see below.)

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.

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.
  • No JIT: A version without the JIT. Consumes a bit less memory and may be faster on short-running scripts.
  • Stackless: Provides Stackless extensions, as well as greenlets. It is not possible right now to combine Stackless features with the JIT.
  • Sandboxing: A special safe version. Read the docs about sandboxing. (It is also possible totranslate 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.)

These versions are not officially part of the release 1.7, which focuses on the JIT. You can find prebuilt binaries for them on our nightly build, or translate them yourself.

Installing

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.7/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.

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 https://bitbucket.org/pypy/pypy
  2. Make sure you installed the dependencies. See the list here.
  3. Enter the goal directory:
    cd pypy/pypy/translator/goal
  4. 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 -O2 --stackless      # get the stackless version
    pypy translate.py -Ojit --backend=cli  # only for branch/cli-jit
  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.)

Notes:

  • 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.

Packaging

Once PyPy is translated from source the binary package similar to those provided in the sectionDefault (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

Checksums

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

ceb8dfe7d9d1aeb558553b91b381a1a8  pypy-1.7-linux64.tar.bz2
8a6e2583902bc6f2661eb3c96b45f4e3  pypy-1.7-linux.tar.bz2
ff979054fc8e17b4973ffebb9844b159  pypy-1.7-osx64.tar.bz2
d364e3aa0dd5e0e1ad7f1800a0bfa7e87250c8bb  pypy-1.7-linux64.tar.bz2
68554c4cbcc20b03ff56b6a1495a6ecf8f24b23a  pypy-1.7-linux.tar.bz2
cedeb1d6bf0431589f62e8c95b71fbfe6c4e7b96  pypy-1.7-osx64.tar.bz2
Tagged with:  

Comments are closed.