Conda now supports PyPy builds

conda-forge now supports PyPy3.6 as the python interpreter in a conda environment

Supported platforms are,

  • Linux-x86_64 (glibc 2.12 or newer)
  • OSX-x86_64 (OSX 10.9 or newer)
  • Linux-aarch64 (glibc 2.17 or newer)
  • Linux-ppc64le (glibc 2.17 or newer)

How to use PyPy

To use the PyPy builds you can do the following,

conda config --set channel_priority strict
   conda create -n pypy pypy
   conda activate pypy

However as of the writing of this post, not many conda packages can be installed into this environment, but noarch packages which do not depend on the python version nor the interpreter can be installed. For eg, mpmath is a noarch package without any dependencies.

conda install mpmath    # succeeds
   conda install numpy     # fails as of March 10, 2020

All python C extensions needs to be rebuilt for the PyPy ABI. This is currently on the way and can be tracked at thestatus page.

python_abi Package

As part of adding support for PyPy and to keep the older python builds working, a python_abi package was added. This defines the abi for the python package and any non-noarch python packages will have a dependency on this package. Older python downstream packages like numpy had their metadata patched to add a CPython ABI. You can ask for a specific python ABI.

conda install "python_abi=*=*_cp27mu"

If you are using python packages from packages other than defaults, you will be able to install python extensions built with CPython ABI into PyPy builds as their metadata have not been patched. Solution in this case is to hotfix the metadata which is available to only high volume conda channel or to rebuild those packages with the new python packages and mark the older ones as broken.

Using the newer packages will rerender the following requirement to add a dependency on python_abi. For eg,

requirements:
  host:
   - python 3.6
  run:
   - python

is rendered as,

requirements:
  host:
   - python 3.6.10 h9d8adfe_1009_cpython
  run:
   - python >=3.6,<3.7.0a0
   - python_abi 3.6 *_cp36m

whereas,

requirements:
  host:
   - python 3.6 *_73_pypy
  run:
   - python

is rendered as,

requirements:
  host:
   - python 3.6.9 0_73_pypy
  run:
   - python >=3.6,<3.7.0a0
   - python_abi 3.6 *_pypy36_pp73

Note that the PyPy ABI tag has pp73 at the end which indicates that the ABI is stable only for PyPy3.6 7.3.x series.

This opens up the possibility of adding debug builds of python and building extension packages using the Python Debug ABI.

Discussion on the PyPy builds can be found in the issue conda-forge/conda-forge.github.io#867

Isuru Fernando (@isuruf)

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章