Source / download.html

<!DOCTYPE html>
	<title>PyPy :: Download and install</title>
	<meta http-equiv="content-language" content="en" />
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<meta name="author" content="PyPy Team" />
	<meta name="description" content="PyPy" />
	<meta name="copyright" content="MIT" />
	<meta name="document-rating" content="general" />
	<link rel="stylesheet" type="text/css" media="screen" title="default" href="css/site.css" />
	<link rel="alternate" type="application/rss+xml" title="RSS Feed for PyPy" href="" />
  <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" />
	<script type="text/javascript" src=""></script>
	<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
	<script type="text/javascript" src=""></script>
  <script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
  <script type="text/javascript" src="js/detect.js"></script>
  <script type="text/javascript" src="js/script2.js?bust=1"></script>
<script type="text/javascript">
	var _gaq = [['_setAccount', 'UA-7778406-3'], ['_trackPageview']];
	if (document.location.protocol !== 'file:') {
		(function() {
			var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
			ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '';
			(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
<div id="body-outer"><div id="body-inner"><div id="body" class="clearfix">
<div id="header">
	<div id="menu-follow">
		<div><a href="" title="Follow the conversation on Twitter"><img src="" alt="Follow the conversation on Twitter" width="14px" height="14px" /></a></div>
    <div><a href=""><img src="" width="14px" height="14px" /></a></div>
		<div><a href="" title="Subscribe to the RSS Feed"><img src="" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div>
	<div id="logo"><a href=""><img src="image/pypy-logo.png" alt="PyPy" height="110px" /></a></div>
	<hr class="clear-left" />
	<div id="menu-sub"><a href="index.html">Home</a><span class="menu-sub-sep"> | </span><a href="features.html">Features</a><span class="menu-sub-sep"> | </span><a href="download.html">Download</a><span class="menu-sub-sep"> | </span><a href="compat.html">Compatibility</a><span class="menu-sub-sep"> | </span><a href="performance.html">Performance</a><span class="menu-sub-sep"> | </span><a href="">Dev Documentation</a><span class="menu-sub-sep"> | </span><a href="">Blog</a><span class="menu-sub-sep"> | </span><a href="people.html">People</a><span class="menu-sub-sep"> | </span><a href="contact.html">Contact</a><span class="menu-sub-sep"> | </span><a href="py3donate.html">Py3k donations</a><span class="menu-sub-sep"> | </span><a href="numpydonate.html">NumPy donations</a><span class="menu-sub-sep"> | </span><a href="tmdonate.html">STM/AME donations</a></div>
	<hr class="clear" />
<div id="content">
<div id="main">
<h1 class="title">Download and install</h1>
<p class="download-menu">There are <a class="reference external" href="">nightly binary builds</a> available. Those builds are not always
as stable as the release, but they contain numerous bugfixes and
performance improvements.</p>
<p>Here are the various binaries of <strong>PyPy 1.8</strong> that we provide for x86 Linux,
Mac OS/X or Windows.</p>
<ul class="download-menu simple">
<li><a class="reference internal" href="#default-with-a-jit-compiler">Default (with a JIT Compiler)</a></li>
<li><a class="reference internal" href="#other-versions">Other versions</a></li>
<li><a class="reference internal" href="#installing">Installing</a> (optional)<ul>
<li><a class="reference internal" href="#linux-libraries">Linux libraries</a></li>
<li><a class="reference internal" href="#building-from-source">Building from source</a></li>
<li><a class="reference internal" href="#packaging">Packaging</a></li>
<li><a class="reference internal" href="#checksums">Checksums</a></li>
<div class="section" id="jit-compiler-version">
<span id="default-with-a-jit-compiler"></span><h1>&ldquo;JIT Compiler&rdquo; version</h1>
<p>These binaries include a Just-in-Time compiler.  They only work on
x86 CPUs that have the <a class="reference external" href="">SSE2</a> instruction set (most of
them do, nowadays), or on x86-64 CPUs. They also contain <a class="reference external" href="">stackless</a>
extensions, like <a class="reference external" href="">greenlets</a>.
(This is the official release 1.8;
for the most up-to-date version see below.)</p>
<ul class="simple">
<li><a class="reference external" href="">Linux binary (32bit)</a> (<a class="reference internal" href="#openssl0-9-8-notes">openssl0.9.8 notes</a>)</li>
<li><a class="reference external" href="">Linux binary (64bit)</a> (<a class="reference internal" href="#openssl0-9-8-notes">openssl0.9.8 notes</a>)</li>
<li><a class="reference external" href="">Mac OS/X binary (64bit)</a></li>
<li><a class="reference external" href="">Windows binary (32bit)</a> (you need the <a class="reference external" href=";id=5555">VS 2010 runtime libraries</a>)
<em>note: the zip file contains the wrong version, msvcrt90.dll :-(</em></li>
<p>If your CPU is really old, it may not have SSE2.  In this case, you need
to <a class="reference internal" href="#translate">translate</a> yourself with the option <tt class="docutils literal"><span class="pre">--jit-backend=x86-without-sse2</span></tt>.</p>
<div class="section" id="other-versions">
<span id="other-versions-without-a-jit"></span><h1>Other versions</h1>
<p>The other versions of PyPy are:</p>
<ul class="simple">
<li>The most up-to-date <a class="reference external" href="">nightly build</a> with a JIT, if the official
release is too old for what you want to do.</li>
<li>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 <tt class="docutils literal">pypy <span class="pre">--jit</span> off</tt>.)</li>
<li>Sandboxing: A special safe version.  Read the docs about <a class="reference external" href="features.html#sandboxing">sandboxing</a>.
(It is also possible to <a class="reference internal" href="#translate">translate</a> 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.) <strong>Note that the sandboxed binary needs a full pypy checkout
to work</strong>. Consult the <a class="reference external" href="">sandbox docs</a> for details<ul>
<li><a class="reference external" href="">Linux binary (64bit)</a></li>
<li><a class="reference external" href="">Linux binary (32bit)</a></li>
<p>These versions are not officially part of the release 1.8, which focuses
on the JIT.  You can find prebuilt binaries for them on our
<a class="reference external" href="">nightly build</a>, or <a class="reference internal" href="#translate">translate</a> them yourself.</p>
<div class="section" id="installing">
<p>All binary versions are packaged in a <tt class="docutils literal">tar.bz2</tt> or <tt class="docutils literal">zip</tt> file.  When
uncompressed, they run in-place.  For now you can uncompress them
either somewhere in your home directory or, say, in <tt class="docutils literal">/opt</tt>, and
if you want, put a symlink from somewhere like
<tt class="docutils literal">/usr/local/bin/pypy</tt> to <tt class="docutils literal"><span class="pre">/path/to/pypy-1.8/bin/pypy</span></tt>.  Do
not move or copy the executable <tt class="docutils literal">pypy</tt> outside the tree &ndash; put
a symlink to it, otherwise it will not find its libraries.</p>
<div class="section" id="linux-libraries">
<span id="openssl0-9-8-notes"></span><h1>Linux libraries</h1>
<p>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
<a class="reference external" href="">openssl-0.9.8*.tar.gz from sources</a> and install it with <tt class="docutils literal">./config
shared; make; make install</tt>.</p>
<div class="section" id="building-from-source">
<span id="translate"></span><h1>Building from source</h1>
<ol class="arabic">
<li><p class="first">Get the source code.  The following packages contain the source at
the same revision as the above binaries:</p>
<ul class="simple">
<li><a class="reference external" href="">pypy-1.8-src.tar.bz2</a> (sources, Unix line endings)</li>
<li><a class="reference external" href=""></a> (sources, Unix line endings too, sorry)</li>
<p>Or you can checkout the current trunk using <a class="reference external" href="">Mercurial</a> (the trunk
usually works and is of course more up-to-date):</p>
<pre class="literal-block">
hg clone
<li><p class="first">Make sure you <strong>installed the dependencies.</strong>  See the list <a class="reference external" href="">here</a>.</p>
<li><p class="first">Enter the <tt class="docutils literal">goal</tt> directory:</p>
<pre class="literal-block">
cd pypy/pypy/translator/goal
<li><p class="first">Run the <tt class="docutils literal"></tt> script.  Here are the common combinations
of options (works also with <tt class="docutils literal">python</tt> instead of <tt class="docutils literal">pypy</tt>):</p>
<pre class="literal-block">
pypy -Ojit                # get the JIT version
pypy -O2                  # get the no-jit version
pypy -O2 --sandbox        # get the sandbox version
pypy -Ojit --backend=cli  # only for branch/cli-jit
<li><p class="first">Enjoy Mandelbrot <tt class="docutils literal"><span class="pre">:-)</span></tt>  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.)</p>
<li><p class="first">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.</p>
<li><p class="first">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.</p>
<pre class="literal-block">
PYPY_GC_MAX_DELTA=200MB pypy --jit loop_longevity=300 ./ -Ojit
<li><p class="first">Because of <tt class="docutils literal">asmgcroot</tt>, 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 <tt class="docutils literal">CFLAGS</tt> environment variable.  You can also try to
compile PyPy with the <a class="reference external" href="">shadow stack</a> option.</p>
<div class="section" id="packaging">
<p>Once PyPy is translated from source the binary package similar to those provided in the section <a class="reference internal" href="#default-with-a-jit-compiler">Default (with a JIT Compiler)</a> above could be easily created with <tt class="docutils literal"></tt> script as following:</p>
<pre class="literal-block">
cd ./pypy/pypy/tool/release/
python ../../.. pypy-my-own-package-name
<div class="section" id="checksums">
<p>Here are the checksums for each of the downloads (md5 and sha1):</p>
<pre class="literal-block">
3b81363ccbc042dfdda2fabbf419e788  pypy-1.8-linux64.tar.bz2
c4a1d11e0283a390d9e9b801a4633b9f  pypy-1.8-linux.tar.bz2
1c293253e8e4df411c3dd59dff82a663  pypy-1.8-osx64.tar.bz2
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
895aaf7bba5787dd30adda5cc0e0e7fc297c0ca7  pypy-1.8-sandbox-linux64.tar.bz2
be94460bed8b2682880495435c309b6611ae2c31  pypy-1.8-sandbox-linux.tar.bz2
4ff684619671d6076879eff88343184d7656c699  release-1.8.tar.bz2 (source)
<div id="sidebar">