<!DOCTYPE html> <html> <head> <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="http://feeds.feedburner.com/PyPyStatusBlog" /> <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.8.14.custom.css" /> <script type="text/javascript" src="http://use.typekit.com/hdt8sni.js"></script> <script type="text/javascript">try{Typekit.load();}catch(e){}</script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></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> </head> <body> <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') + '.google-analytics.com/ga.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga); })(); } </script> <div id="body-outer"><div id="body-inner"><div id="body" class="clearfix"> <div id="header"> <div id="menu-follow"> <div><a href="http://search.twitter.com/search?q=%23pypy" title="Follow the conversation on Twitter"><img src="http://static.ampify.it/icon.twitter.gif" alt="Follow the conversation on Twitter" width="14px" height="14px" /></a></div> <div><a href="http://bitbucket.org/pypy/pypy"><img src="http://www.selenic.com/hg-logo/logo-droplets-25.png" width="14px" height="14px" /></a></div> <div><a href="http://feeds.feedburner.com/PyPyStatusBlog" title="Subscribe to the RSS Feed"><img src="http://static.ampify.it/icon.rss.png" alt="Subscribe to the RSS Feed" width="14px" height="14px" /></a></div> </div> <div id="logo"><a href="http://pypy.org"><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="http://speed.pypy.org">Performance</a><span class="menu-sub-sep"> | </span><a href="http://doc.pypy.org">Dev Documentation</a><span class="menu-sub-sep"> | </span><a href="http://morepypy.blogspot.com">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></div> <hr class="clear" /> </div> <div id="content"> <div> <div id="main"> <h1 class="title">Download and install</h1> <p class="download-menu">There are <a class="reference external" href="http://buildbot.pypy.org/nightly/trunk/">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.5</strong> that we provide for x86 Linux, Mac OS/X or Windows.</p> <ul class="download-menu simple"> <li>Download<ul> <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> </ul> </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="#checksums">Checksums</a></li> </ul> <div class="section" id="jit-compiler-version"> <span id="default-with-a-jit-compiler"></span><h1>“JIT Compiler” 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="http://en.wikipedia.org/wiki/SSE2">SSE2</a> instruction set (most of them do, nowadays), or on x86-64 CPUs. (This is the official release 1.5; for the most up-to-date version see below.)</p> <ul class="simple"> <li><a class="reference external" href="https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-linux.tar.bz2">Linux binary (32bit)</a></li> <li><a class="reference external" href="https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-linux64.tar.bz2">Linux binary (64bit)</a></li> <li><a class="reference external" href="https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-osx64.tar.bz2">Mac OS/X binary (64bit)</a></li> <li><a class="reference external" href="https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-win32.zip">Windows binary (32bit)</a> (BETA!) (you may need to install the <a class="reference external" href="http://www.microsoft.com/downloads/en/details.aspx?familyid=A7B7A05E-6DE6-4D3A-A423-37BF0912DB84">VS 2010 runtime libraries</a>)</li> </ul> <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> <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="http://buildbot.pypy.org/nightly/trunk/">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.</li> <li>Stackless: Provides <a class="reference external" href="http://www.stackless.com/">Stackless</a> extensions, as well as <a class="reference external" href="http://codespeak.net/svn/greenlet/trunk/doc/greenlet.txt">greenlets</a>. It is not possible right now to combine Stackless features with the JIT.</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.)</li> </ul> <p>These versions are not officially part of the release 1.5, which focuses on the JIT. You can find prebuilt binaries for them on our <a class="reference external" href="http://buildbot.pypy.org/nightly/trunk/">nightly build</a>, or <a class="reference internal" href="#translate">translate</a> them yourself.</p> </div> <div class="section" id="installing"> <h1>Installing</h1> <p>All 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.5/bin/pypy</span></tt>. Do not move or copy the executable <tt class="docutils literal">pypy</tt> outside the tree – put a symlink to it, otherwise it will not find its libraries.</p> </div> <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="https://bitbucket.org/pypy/pypy/downloads/pypy-1.5-src.tar.bz2">pypy-1.5-src.tar.bz2</a> (sources, Unix line endings)</li> <li>pypy-1.5-src.zip (sources, Windows line endings) not available</li> </ul> <p>Or you can checkout the current trunk using <a class="reference external" href="http://mercurial.selenic.com/">Mercurial</a> (the trunk usually works and is of course more up-to-date):</p> <pre class="literal-block"> hg clone http://bitbucket.org/pypy/pypy </pre> </li> <li><p class="first">Make sure you installed the dependencies. See the list <a class="reference external" href="http://pypy.readthedocs.org/en/latest/getting-started-python.html#translating-the-pypy-python-interpreter">here</a>.</p> </li> <li><p class="first">Enter the <tt class="docutils literal">goal</tt> directory:</p> <pre class="literal-block"> cd pypy/pypy/translator/goal </pre> </li> <li><p class="first">Run the <tt class="docutils literal">translate.py</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 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 </pre> </li> <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 GB of RAM on a 32-bit system and 4 GB on 64-bit systems. (Do not start a translation on a machine with insufficient RAM! It will just swap forever.)</p> </li> </ol> <p>Notes:</p> <ul class="simple"> <li>It is recommended to use PyPy to do translations, instead of using CPython, because it is twice as fast. (Using CPython would lower the memory requirement down to 1.2 GB on 32-bit, 2.4 GB on 64-bit.) You should just start by downloading an official release of PyPy (with the JIT).</li> <li>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="http://pypy.readthedocs.org/en/latest/config/translation.gcrootfinder.html">shadow stack</a> option.</li> </ul> </div> <div class="section" id="checksums"> <h1>Checksums</h1> <p>Here are the checksums for each of the downloads (md5 and sha1):</p> <pre class="literal-block"> 08a2c95163c95f91772abb8bf5f8b9cb pypy-1.5-linux.tar.bz2 32392b7986eb34cd657d5b6c5d242cc7 pypy-1.5-linux64.tar.bz2 b1417916bc01ebb9f95c666f5e397fb5 pypy-1.5-osx64.tar.bz2 b6cc12bed5e7243ed44aa3430eb14885 pypy-1.5-win32.zip cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2 b79b317f8736e9bdbf5647fe43258f722c2936f4 pypy-1.5-linux.tar.bz2 ad3fd4d454e14514d226809fb8b1cd86455ea1b0 pypy-1.5-linux64.tar.bz2 84922083fd5e52ff679718ea70ed5a74a5a048ad pypy-1.5-osx64.tar.bz2 a328dbd273c30526588496108c53c0eec7a23e98 pypy-1.5-win32.zip 0ebcecaa4c725bf1a48272033d9f429b8a82b7e1 pypy-1.5-src.tar.bz2 </pre> </div> </div> <div id="sidebar"> <ul> <li> <div class="sidepic"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_s-xclick" /> <input type="hidden" name="hosted_button_id" value="J268ZTLRE2BW8" /> <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" /> <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" /> </form> </div> </li> <li> <div class="sidepic"> <script type="text/javascript"> function validateAmount(amount){ if(amount.value.match( /^[0-9]+(\.([0-9]+))?$/)){ return true; }else{ alert('You must enter a valid donation.'); amount.focus(); return false; } } </script> <form action="https://checkout.google.com/cws/v2/Donations/622836985124940/checkoutForm" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" onSubmit="return validateAmount(this.item_price_1)" target="_top"> <input name="item_name_1" type="hidden" value="PyPy Directed Donation via Software Freedom Conservancy, Inc." /> <input name="item_description_1" type="hidden" value="This is a donation to the Software Freedom Conservancy, Inc. The donation will be directed for the PyPy project." /> <input name="item_quantity_1" type="hidden" value="1" /> <input name="item_currency_1" type="hidden" value="USD" /> <input name="item_is_modifiable_1" type="hidden" value="true" /> <input name="item_min_price_1" type="hidden" value="5.0" /> <input name="item_max_price_1" type="hidden" value="25000.0" /> <input name="_charset_" type="hidden" value="utf-8" /> <table cellpadding="5" cellspacing="0" width="1%"> <tr> <td align="right" nowrap="nowrap" width="1%">$ <input id="item_price_1" name="item_price_1" onfocus="this.style.color='black'; this.value='';" size="11" style="color:grey;" type="text" value="Enter Amount" /> </td> <td align="left" width="1%"> <input alt="Donate" src="https://checkout.google.com/buttons/donateNow.gif?merchant_id=622836985124940&w=115&h=50&style=white&variant=text&loc=en_US" type="image" /> </td> </tr> </table> </form> </div> </li> <li> <div class="sidepic"> <a id="main_download" href="download.html">Download PyPy</a> </div> </li> </ul> </div> </div> </div> </div></div></div> </body> </html>