This is an old revision of the document!
The development for lang/pypy is done at GitHub.
Packages
Pkgng packages for all supported FreeBSD versions will be provided in due course.
Building
Building PyPy can be done using the Ports Collection or directly from source. The former is recommended. See below for detailed discussions on the various aspects of building PyPy.
To install PyPy from ports:
# make -C /usr/ports/lang/pypy install
Instances
Custom Instances
Memory Requirements
Building PyPy requires a lot of memory. Most systems are not capable of building PyPy, if this applies to your system please consider using a package as listed above. PyPy is also capable of building itself which, thanks to the JIT, is faster than using Python but also uses more memory. This behaviour is a port option, dependent on ${LOCALBASE}/bin/pypy being present.
By default PyPy builds all instances in parallel which stacks the required memory (i.e. each build will use the maximum memory listed below). If your system has sufficient memory to build one PyPy instance but not multiple instances use the build flag -DDISABLE_MAKE_JOBS to build the PyPy instances in series.
The PyPy port checks if your system has sufficient memory and refuses to build if it detects insufficient memory. This behaviour can be overwritten with the build flag -DPYPY_IGNORE_MEMORY. Each extra level of optimisation requires more memory when building PyPy, with the JIT taking the most memory, so consider using a lower level of optimisation if memory is a limitation and disabling the memory checks however the primary reason to use PyPy is for the JIT and the associated performance improvements.
The following memory requirements were determined using sh -c "rm -f /tmp/stop; (while [ ! -f /tmp/stop ]; do ps -o rss,comm | grep -R '(python|pypy)'; sleep 1; done) | sort -n | tail -n 1" on an x86_64 system:
| Translator | 32-bit | 64-bit |
|---|---|---|
| python2.7 | 2.1GiB | 4.3GiB |
| pypy2.0 | 2.4GiB | 5.5GiB |
| System | 0.2GiB | 0.4GiB |
See ${PORTSDIR}/lang/pypy/Makefile for more accurate figures.
Compilation Time
PyPy takes a long time to build. The “translation” phase of building PyPy can take most of the time however using only a single core per instance. If concurrency is disables, via -DDISABLE_MAKE_JOBS then the compilation phase can also take a signification amount of time.
The following times are based on an Intel Core i7-2600:
| Translator | Phase | 32-bit | 64-bit |
| python2.7 | Translation | 79 mins | 180 mins |
| Compilation | ?? mins | ?? mins | |
| Total | ??? mins | ??? mins | |
| pypy2.0 | Translation | 34 mins | 90 mins |
| Compilation | ?? mins | ?? mins | |
| Total | ??? mins | ??? mins |
Building without port
See instructions provided by the PyPy project on building PyPy directly from source.
Status
TODO
- Detect MAKE_JOBS_NUMBER and use min(MAKE_JOBS_NUMBER, COUNT(PYPY_INST)) when detecting memory requirements.
- Make a pypy-devel port (of nightlies, for fixing pypy on FreeBSD)
- Make a jitviewer port (depends pn flask pygments simplejson Jinja2 Werkzeug)
- Support valgrind
- Properly check sandbox support and create sandbox VM-thing
- Integrate PyPy into bsd.python.mk