NumPy 1.26.0 Release Notes#
NumPy 1.26.0 版本是 1.25.x 发布周期的延续,并增加了对 Python 3.12.0 的支持。Python 3.12 放弃了 distutils,因此支持它需要为 NumPy 使用的 setup.py/distutils 构建系统找到替代方案。我们选择使用 Meson 构建系统,这是 NumPy 支持它的第一个版本。这也是第一个支持 Cython 3.0 并保留 0.29.X 兼容性的版本。支持这两个升级是一个大型项目,在此版本中触及了 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)
f2py 的 Meson 后端#
f2py 的编译模式(即 f2py -c)现在接受 --backend meson 选项。这是 Python 3.12 及更高版本的默认选项。旧版本仍将默认为 --backend distutils。
为了在实际用例中支持这一点,在编译模式下,f2py 接受一个或多个 --dep 标志,该标志映射到 Meson 后端的 dependency() 调用,而在 distutils 后端则不做任何操作。
对于仅作为代码生成器(即不使用 -c)的用户,f2py 没有变化。
(gh-24532)
f2py 的 bind(c) 支持#
函数和子例程都可以用 bind(c) 进行注解。f2py 将处理正确的类型映射,并为其他 C 接口保留唯一的标签。
注意: f2py 绑定默认不支持 bind(c, name = 'routine_name_other_than_fortran_routine'),因为带有 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或(在克隆的仓库中)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 特定的构建定制方式已发生变化。NPY_* 环境变量(用于控制 BLAS/LAPACK、SIMD、线程等选项)不再受支持,用于选择 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: 从 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: 修复 recent 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 中的公共块处理
#24541: CI,TYP: 将 mypy 升级到 1.4.1
#24542: BUG: 修复 f2py 中的假定长度回归
#24544: MAINT: 统一 fortranobject
#24545: TYP: 向 numpy.isin 类型规范添加 kind 参数
#24561: BUG: 修复掩码和非掩码结构化数组之间的比较
#24590: CI: 从 DLL 列表中排除 Cygwin 上的导入库。
#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: 向
np.clip添加缺失的casting关键字#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 升级到 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: 为 32 位 Python 在 Windows 上构建 wheel,使用 MSVC
#24700: BLD: 修复交叉编译期间的编译器选择问题
#24701: BUG: 修复 f2py 中 data stmt 对复数值的处理
#24707: TYP: 为 py3.12 缓冲区协议添加注解
#24718: DOC: 修复 1.26.x 上的一些文档构建问题并更新 spin 文档…