This is a quick guide to running your [python/django] project on PyPy, the fast JIT-based Python interpreter (and optionally benchmark re: cPython)
Install PyPy
Follow the clearly detailed instructions in: http://pypy.readthedocs.org
For example, for 32-bit linux I used:
$ wget https://bitbucket.org/pypy/pypy/downloads/pypy-1.8-linux.tar.bz2 $ tar xvf pypy-1.8-linux.tar.bz2
This will create a folder named pypy-1.8
, which matches Python 2.7.2:
$ ./pypy-1.8/bin/pypy --version Python 2.7.2 (0e28b379d8b3, Feb 09 2012, 19:41:19) [PyPy 1.8.0 with GCC 4.4.3]
Create your virtual environment
Install distribute and pip for pypy:
NOTE: These instructions no longer work.
http://python-distribute.org is a domain for sale.
$ # wget http://python-distribute.org/distribute_setup.py ## OBSOLETE $ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py $ ./pypy-1.8/bin/pypy distribute_setup.py $ ./pypy-1.8/bin/pypy get-pip.py
Make sure you have at least virtualenv 1.6, else it won’t work with PyPy:
$ virtualenv --version 1.6.4
Install virtualenvwrapper, and create a new virtual environment for your projectx:
$ ./pypy-1.8/bin/pip install virtualenvwrapper $ mkvirtualenv --no-site-packages --distribute --python=/path/to/pypy-1.8/bin/pypy projectx-pypy $ python --version Python 2.7.2 (0e28b379d8b3, Feb 09 2012, 19:41:19) [PyPy 1.8.0 with GCC 4.4.3]
Now we have a virtual environment named projectx-pypy
based on pypy
that we can use as just any other virtualenv.
Setup your project
Install your project’s requirements as usual:
$ workon projectx-pypy $ pip install -r requirements.txt -r test-requirements.txt
Benchmark if desired
Now I can easily compare timings between cPython and PyPy. I created another identical virtualenv based on cPython (2.7.2) and run the same tests (one testcase replicated 100000 times using nose test generators, just to have something time consuming and CPU-intensive).
PyPy:
$ workon projectx-pypy $ nosetests ... ---------------------------------------------------------------------- Ran 100000 tests in 8.624s
cPython:
$ workon projectx $ nosetests ... ---------------------------------------------------------------------- Ran 100000 tests in 38.180s
Of course this is not a representative sample, but just a simple test. In this one case, PyPy takes approximately 20% the execution time of cPython. Not bad, huh?
The PyPy people have more comprehensive benchmarks in their speed center.
So give PyPy a try, and share your results.
Thanks for these instructions. Searched quite a bit on google but did not find instructions that were as clear.
Here’s another example of why piping curl/wget into your shell is dangerous. The instruction to wget http://python-distribute.org/distribute_setup.py and execute it points to an expired domain that’s for sale!! Thankfully it just 404s, for now…
Thanks, you are totally right. These instructions are three years old, so I’m sure that there are much better ways to install PyPy by now. At the time of writing, it was not that trivial.