NumPy 1.26.0 版本说明#

NumPy 1.26.0 版本是在 1.25.x 版本周期基础上继续开发的,增加了对 Python 3.12.0 的支持。Python 3.12 弃用了 distutils,因此支持它需要找到 NumPy 之前使用的基于 setup.py/distutils 的构建系统的替代方案。我们选择使用 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 库#

增加了对 macOS 13.3 中更新的 Accelerate BLAS/LAPACK 库的支持,包括 ILP64(64 位整数)支持。这带来了 arm64 支持,并显著提高了常用线性代数运算的性能,最高可达 10 倍。当在构建时选择 Accelerate 时,如果可用,将自动使用 13.3+ 版本。

(gh-24053)

f2pymeson 后端#

编译模式下的 f2py(即 f2py -c)现在接受 --backend meson 选项。对于 Python 3.12 及更高版本,这是默认选项。较旧的版本仍然默认为 --backend distutils

为了支持实际用例,在编译模式下,f2py 使用 --dep 标记一次或多次,这映射到 meson 后端中的 dependency() 调用,并且在 distutils 后端中不执行任何操作。

对于仅作为代码生成器使用 f2py 的用户(即不使用 -c)没有更改。

(gh-24532)

f2pybind(c) 支持#

函数和子程序都可以用 bind(c) 进行注释。f2py 将处理正确的类型映射,并为其他 C 接口保留唯一的标签。

**注意:**bind(c, name = 'routine_name_other_than_fortran_routine') 并非 f2py 绑定故意支持的,因为带有 namebind(c) 旨在保证 CFortran 中的名称相同,而不是 PythonFortran 中的名称相同。

(gh-24555)

改进#

f2pyiso_c_binding 支持#

以前,用户必须定义自己的自定义 f2cmap 文件才能使用 Fortran2003 iso_c_binding 内在模块定义的类型映射。现在 f2py 原生支持这些类型映射。

(gh-24555)

构建系统更改#

在这个版本中,NumPy 已切换到 Meson 作为构建系统,并使用 meson-python 作为构建后端。可以使用标准工具(如 pippypa/build)安装 NumPy 或构建 wheel。支持以下操作:

  • 常规安装:pip install numpy 或(在克隆的仓库中)pip install .

  • 构建 wheel:python -m build(推荐),或 pip wheel .

  • 可编辑安装:pip install -e . --no-build-isolation

  • 通过使用 spin 实现的自定义 CLI 进行开发构建:spin build

所有常规的 pippypa/build 标记(例如,--no-build-isolation)都应按预期工作。

NumPy 特定的构建自定义#

许多 NumPy 特定的构建自定义方法都已更改。控制 BLAS/LAPACK、SIMD、线程和其他此类选项的 NPY_* 环境变量不再受支持,用于选择 BLAS 和 LAPACK 的 site.cfg 文件也不再受支持。取而代之的是,可以通过 pip/build 的 config-settings 接口将命令行标记传递给构建。所有这些标记都列在仓库根目录下的 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:从主分支大规模更新 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:来自主分支的 Dependabot 更新

  • #24342: MAINT:添加回 NPY_RUN_MYPY_IN_TESTSUITE=1

  • #24353: MAINT:从主分支更新 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:清理警告 [跳过 azp][跳过 circle][跳过 travis][跳过…

  • #24460: MAINT:升级到 spin 0.5

  • #24495: BUG:已移除 asv dev,请使用 asv run

  • #24496: BUG:修复由于未更改的自动生成的 inplace 导致的 meson 构建失败…

  • #24521: BUG:修复 git-version 脚本问题,需要 shebang 来运行

  • #24522: BUG:为 git_hash 使用默认赋值 [跳过 ci]

  • #24524: BUG:修复 choose 中的 NPY_cast_info 错误处理

  • #24526: BUG:修复 f2py 中的公共块处理

  • #24541: CI,TYP:将 mypy 升级到 1.4.1

  • #24542: BUG:修复假设长度 f2py 回归

  • #24544: MAINT:协调 fortranobject

  • #24545: TYP:向 numpy.isin 类型规范添加 kind 参数

  • #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:显式声明 dtypegeneric 可哈希

  • #24637: ENH:使用 typing.assert_type 重构类型“揭示”测试

  • #24638: MAINT:将 actions/checkout 从 3.6.0 升级到 4.0.0

  • #24647: ENH:meson 后端用于 f2py

  • #24648: MAINT:重构 Clang 的部分加载解决方法

  • #24653: REL:准备 NumPy 1.26.0rc1 版本发布。

  • #24659: BLD:允许指定长双精度格式以避免运行时…

  • #24665: BLD:修复 random.mtrand 扩展中的错误,不要链接 libnpyrandom

  • #24675: BLD:使用 MSVC 为 Windows 上的 32 位 Python 构建 wheel

  • #24700: BLD:修复交叉编译期间编译器选择问题

  • #24701: BUG:修复 f2py 中复杂值的 data 语句处理

  • #24707: TYP:为 py3.12 缓冲区协议添加注释

  • #24718: DOC:修复 1.26.x 上的一些文档构建问题并更新 spin 文档