NumPy 1.26.0 發行說明#
NumPy 1.26.0 版本是 1.25.x 版本週期的延續,並加入了 Python 3.12.0 的支援。Python 3.12 捨棄了 distutils,因此,為了支援 Python 3.12,必須為 NumPy 原本使用的 setup.py/distutils 建置系統尋找替代方案。我們選擇改用 Meson 建置系統,而這是第一個支援 Meson 的 NumPy 版本。這也是第一個除了保留 0.29.X 相容性之外,還支援 Cython 3.0 的版本。支援這兩項升級是一項大型專案,此版本中已修改超過 100 個檔案。變更日誌並未完整記錄所有工作,特別感謝 Ralf Gommers、Sayed Adel、Stéfan van der Walt 和 Matti Picus,他們在主要開發分支中完成了大部分工作。
此版本的重點如下
Python 3.12.0 支援。
Cython 3.0.0 相容性。
使用 Meson 建置系統
更新的 SIMD 支援
f2py 修復、meson 和 bind(x) 支援
支援更新的 Accelerate BLAS/LAPACK 函式庫
此版本支援的 Python 版本為 3.9-3.12。
新功能#
在 numpy.array_api
中支援 Array API v2022.12#
numpy.array_api
現在完整支援陣列 API 標準的 v2022.12 版本。請注意,這尚不包含標準中選用的fft
擴充功能。
(gh-23789)
支援更新的 Accelerate BLAS/LAPACK 函式庫#
已加入對更新的 Accelerate BLAS/LAPACK 函式庫的支援,包括 macOS 13.3 中的 ILP64 (64 位元整數) 支援。這帶來了 arm64 支援,以及常用線性代數運算高達 10 倍的顯著效能提升。如果在建置時選取 Accelerate,則在可用時會自動使用 13.3+ 版本。
(gh-24053)
f2py
的 meson
後端#
編譯模式中的 f2py
(即 f2py -c
) 現在接受 --backend meson
選項。這是 Python 3.12
及更新版本的預設選項。舊版本仍預設為 --backend distutils
。
為了在實際使用案例中支援此功能,在編譯模式中,f2py
接受一次或多次 --dep
旗標,該旗標會對應到 meson
後端中的 dependency()
呼叫,並且在 distutils
後端中不會執行任何動作。
對於僅將 f2py
用作程式碼產生器 (即不含 -c
) 的使用者而言,沒有任何變更。
(gh-24532)
f2py
的 bind(c)
支援#
函式和副程式都可以使用 bind(c)
註解。f2py
將處理正確的類型對應,並為其他 C
介面保留唯一標籤。
注意: bind(c, name = 'routine_name_other_than_fortran_routine')
不會被 f2py
綁定接受,這是設計使然,因為帶有 name
的 bind(c)
旨在僅保證 C
和 Fortran
中的名稱相同,而不是 Python
和 Fortran
中的名稱相同。
(gh-24555)
改進#
f2py
的 iso_c_binding
支援#
先前,使用者必須定義自己的自訂 f2cmap
檔案,才能使用 Fortran2003 iso_c_binding
內建模組定義的類型對應。這些類型對應現在已由 f2py
原生支援
(gh-24555)
建置系統變更#
在此版本中,NumPy 已切換至 Meson 作為建置系統,並以 meson-python 作為建置後端。安裝 NumPy 或建置 wheel 可以使用標準工具 (例如 pip
和 pypa/build
) 完成。以下是支援的項目
常規安裝:
pip install numpy
或 (在複製的 repo 中)pip install .
建置 wheel:
python -m build
(建議) 或pip wheel .
可編輯安裝:
pip install -e . --no-build-isolation
透過使用 spin 實作的自訂 CLI 進行開發建置:
spin build
。
所有常規 pip
和 pypa/build
旗標 (例如,--no-build-isolation
) 應如預期般運作。
NumPy 特定的建置自訂#
許多 NumPy 特定的建置自訂方式已變更。不再支援控制 BLAS/LAPACK、SIMD、執行緒和其他此類選項的 NPY_*
環境變數,也不再支援用於選取 BLAS 和 LAPACK 的 site.cfg
檔案。取而代之的是,可以使用透過 pip
/build
的 config-settings 介面傳遞至建置的命令列旗標。這些旗標都列在 repo 根目錄中的 meson_options.txt
檔案中。詳細文件將在最終 1.26.0 版本發行前提供;目前請參閱 SciPy「從原始碼建置」文件,因為大多數建置自訂在 SciPy 中的運作方式幾乎與 NumPy 相同。
建置依賴性#
雖然 NumPy 的執行階段依賴性沒有變更,但建置依賴性已變更。由於我們暫時供應商 Meson 和 meson-python,因此有幾個新的依賴性 - 請參閱 pyproject.toml
的 [build-system]
區段以取得詳細資訊。
疑難排解#
此建置系統變更相當大。如果發生非預期的問題,仍然可以使用以 setup.py
為基礎的建置作為暫時的解決方法 (在 Python 3.9-3.11 上,而非 3.12 上),方法是將 pyproject.toml.setuppy
複製到 pyproject.toml
。但是,請在 NumPy 問題追蹤器中開啟包含詳細資訊的問題。我們的目標是盡快逐步淘汰 setup.py
建置,因此希望在 1.26.0 版本週期初期發現所有潛在的阻礙。
貢獻者#
總共有 20 人為此版本做出貢獻。名稱旁邊有「+」號的人是第一次貢獻修補程式。
@DWesl
Albert Steppi +
Bas van Beek
Charles Harris
Developer-Ecosystem-Engineering
Filipe Laíns +
Jake Vanderplas
Liang Yan +
Marten van Kerkwijk
Matti Picus
Melissa Weber Mendonça
Namami Shanker
Nathan Goldbaum
Ralf Gommers
Rohit Goswami
Sayed Adel
Sebastian Berg
Stefan van der Walt
Tyler Reddy
Warren Weckesser
合併的提取請求#
此版本總共合併了 59 個提取請求。
#24305: MAINT: 為開發準備 1.26.x 分支
#24308: MAINT: 從 main 大量更新 numpy 1.26 的檔案
#24322: CI: 修復 1.26.x 分支上的 wheel 建置
#24326: BLD: 將 openblas 更新至較新版本
#24327: TYP: 縮減
_NestedSequence.__getitem__
簽章#24328: BUG: 修復 choose 參考計數洩漏
#24337: TST: 修復在沒有 BLAS/LAPACK 的建置中執行測試套件
#24338: BUG: random: 修復 dirichlet 產生 nan 的問題。
#24340: MAINT: 來自 main 的 Dependabot 更新
#24342: MAINT: 加回 NPY_RUN_MYPY_IN_TESTSUITE=1
#24353: MAINT: 從 main 更新
extbuild.py
。#24356: TST: 修復最近 setuptools 中已棄用的 distutils 測試…
#24375: MAINT: 將 cibuildwheel 更新至 2.15.0 版
#24381: MAINT: 修復 codespaces setup.sh 腳本
#24403: ENH: 供應商 meson 以支援多目標建置
#24404: BLD: 供應商 meson-python 以使用 SIMD 進行 Windows 建置…
#24405: BLD, SIMD: meson CPU 調度器實作
#24406: MAINT: 移除 versioneer
#24409: REL: 準備 NumPy 1.26.0b1 版本。
#24453: MAINT: 釘住 sphinx 的較高版本。
#24455: ENH: 將前綴新增至 _ALIGN 巨集
#24456: BUG: 清理警告 [skip azp][skip circle][skip travis][skip…
#24460: MAINT: 升級至 spin 0.5
#24495: BUG:
asv dev
已移除,請使用asv run
。#24496: BUG: 修復因未變更的原位自動產生而導致的 meson 建置失敗…
#24521: BUG: 修復 git-version 腳本的問題,需要 shebang 才能執行
#24522: BUG: 為 git_hash 使用預設指派 [skip ci]
#24524: BUG: 修復 choose 中的 NPY_cast_info 錯誤處理
#24526: BUG: 修復 f2py 中的 common block 處理
#24541: CI,TYP: 將 mypy Bump 至 1.4.1
#24542: BUG: 修復假定的長度 f2py 迴歸
#24544: MAINT: 協調 fortranobject
#24545: TYP: 將 kind 引數新增至 numpy.isin 類型規格
#24561: BUG: 修復遮罩和未遮罩結構化陣列之間的比較
#24590: CI: 從 Cygwin 上的 DLL 清單中排除匯入函式庫。
#24591: BLD: 修復
_umath_linalg
依賴性#24594: MAINT: 停止在 ppc64le 上測試。
#24602: BLD: meson-cpu: 修復沒有功能的平台上的 SIMD 支援
#24606: BUG: 將 Cython
binding
指令變更為 “False”。#24613: ENH: 採用新的 macOS Accelerate BLAS/LAPACK 介面,包括…
#24614: DOC: 更新建置文件以使用 Meson
#24615: TYP: 將遺失的
casting
關鍵字新增至np.clip
#24616: TST: 將 cython 測試從 setup.py 轉換為 meson
#24617: MAINT: 修復
fromnumeric.pyi
#24622: BUG, ENH: 修復
iso_c_binding
類型對應並修復bind(c)
…#24629: TYP: 允許
binary_repr
接受任何實作的物件…#24630: TYP: 明確宣告
dtype
和generic
可雜湊#24637: ENH: 使用 typing.assert_type 重構類型「reveal」測試
#24638: MAINT: 將 actions/checkout 從 3.6.0 Bump 至 4.0.0
#24647: ENH:
f2py
的meson
後端#24648: MAINT: 重構 Clang 的部分載入因應措施
#24653: REL: 準備 NumPy 1.26.0rc1 版本。
#24659: BLD: 允許指定 long double 格式以避免執行階段…
#24665: BLD: 修復 random.mtrand 擴充功能中的錯誤,請勿連結 libnpyrandom
#24675: BLD: 使用 MSVC 建置 Windows 上 32 位元 Python 的 wheel
#24700: BLD: 修復交叉編譯期間編譯器選取的問題
#24701: BUG: 修復 f2py 中複數值的資料陳述式處理
#24707: TYP: 為 py3.12 緩衝區協定新增註解
#24718: DOC: 修復 1.26.x 上的一些文件建置問題,並更新 spin 文件…