PyPy 建置於 conda-forge
conda-forge 現在支援 PyPy3.6 作為 conda 環境中的 python 直譯器
支援的平台為:
- Linux-x86_64 (glibc 2.12 或更新版本)
- OSX-x86_64 (OSX 10.9 或更新版本)
- Linux-aarch64 (glibc 2.17 或更新版本)
- Linux-ppc64le (glibc 2.17 或更新版本)
如何使用 PyPy
若要使用 PyPy 建置,您可以執行以下操作:
conda config --set channel_priority strict
conda create -n pypy pypy
conda activate pypy
如果您尚未安裝 conda,可以使用 miniforge-pypy3,它會提供由 pypy 本身驅動的 conda 安裝。
然而,截至本文撰寫時,並非許多 conda 套件可以安裝到此環境中,但可以安裝不依賴 python 版本或直譯器的 noarch 套件。例如,mpmath 是一個沒有任何依賴項的 noarch 套件。
conda install mpmath # succeeds
conda install numpy # fails as of March 10, 2020
更新:截至 2020 年 4 月 10 日,numpy 和 scipy 建置已可運作。
所有 python C 擴充套件都需要針對 PyPy ABI 重新建置。目前正在進行中,並且可以在狀態頁面追蹤進度。
python_abi 套件
作為新增 PyPy 支援以及維持舊版 python 建置運作的一部分,新增了 python_abi 套件。這定義了 python 套件的 abi,任何非 noarch python 套件都會依賴此套件。較舊的 python 下游套件(例如 numpy)已修補其 metadata 以新增 CPython ABI。您可以要求特定的 python ABI。
conda install "python_abi=*=*_cp27mu"
如果您使用的 python 套件來自 defaults 以外的套件,您可以將使用 CPython ABI 建置的 python 擴充套件安裝到 PyPy 建置中,因為它們的 metadata 尚未修補。在這種情況下的解決方案是 hotfix metadata,這僅適用於高流量 conda 頻道,或是使用新的 python 套件重新建置這些套件,並將舊版標記為損壞。
使用較新的套件將重新呈現以下需求,以新增對 python_abi 的依賴。例如:
requirements:
host:
- python 3.6
run:
- python
呈現為:
requirements:
host:
- python 3.6.10 h9d8adfe_1009_cpython
run:
- python >=3.6,<3.7.0a0
- python_abi 3.6 *_cp36m
然而,
requirements:
host:
- python 3.6 *_73_pypy
run:
- python
呈現為:
requirements:
host:
- python 3.6.9 0_73_pypy
run:
- python >=3.6,<3.7.0a0
- python_abi 3.6 *_pypy36_pp73
請注意,PyPy ABI 標籤的結尾有 pp73
,這表示 ABI 僅對 PyPy3.6 7.3.x 系列穩定。
這開啟了新增 python 的偵錯建置以及使用 Python Debug ABI 建置擴充套件的可能性。
關於 PyPy 建置的討論可以在 issue conda-forge/conda-forge.github.io#867 中找到。