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.9</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)</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.9;
for the most up-to-date version see below.)</p>
<ul class="simple">
<li><a class="reference external" href="">Linux binary (32bit)</a></li>
<li><a class="reference external" href="">Linux binary (64bit)</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.9, 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.9/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="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.9-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">
201d2cce2557e40c784473b471ee1b6b  pypy-1.9-linux64.tar.bz2
1a08c88642434fc2e0e4256d351f48db  pypy-1.9-linux.tar.bz2
aad9c4b7b827583e37fe8ae0f7cfe0ff  pypy-1.9-osx64.tar.bz2
2c9f0054f3b93a6473f10be35277825a  pypy-1.8-sandbox-linux64.tar.bz2
009c970b5fa75754ae4c32a5d108a8d4  pypy-1.8-sandbox-linux.tar.bz2
f92c0171a9578a3e4a0f74947ec596ab  release-1.9.tar.bz2 (source)
1c06cc5c35fa17e59acb51e11cdc9b03 (source)
51be6b7b802a5239a759e04ae9595082e17c4c70  pypy-1.9-linux64.tar.bz2
1bc5d2467039b954f9b7395b3ee1b8407ce1c057  pypy-1.9-linux.tar.bz2
825e15724419fbdb6fe215eeea044f9181883c90  pypy-1.9-osx64.tar.bz2
895aaf7bba5787dd30adda5cc0e0e7fc297c0ca7  pypy-1.8-sandbox-linux64.tar.bz2
be94460bed8b2682880495435c309b6611ae2c31  pypy-1.8-sandbox-linux.tar.bz2
4f060f4fab0f07bbc7de0ac8f95275eb08d726a3  release-1.9.tar.bz2 (source)
c3af78c96d73d46e3a6d16d3cd548d9ea48a1820 (source)
<div id="sidebar">
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.