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 版本.这也是第一个支持 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 现在完全支持 v2022.12 版本 的数组 API 标准.请注意,这尚未包括标准中的可选 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)

bind(c)f2py 的支持#

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

注意: bind(c, name = 'routine_name_other_than_fortran_routine') 的设计意图是不被 f2py 绑定所支持,因为 bind(c) 加上 name 的目的是保证在 CFortran 中名称相同,而不是在 PythonFortran 中.

(gh-24555)

改进#

iso_c_bindingf2py 的支持#

之前,用户必须定义自己的自定义 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 的配置设置接口传递命令行标志来构建.这些标志都在仓库根目录下的 meson_options.txt 文件中列出.详细的文档将在最终的 1.26.0 版本发布前提供;目前请参阅 SciPy 的”从源代码构建”文档,因为大多数构建自定义在 SciPy 中的工作方式几乎与在 NumPy 中相同.

构建依赖项#

虽然 NumPy 的运行时依赖没有改变,但构建依赖已经改变.因为我们暂时提供 Meson 和 meson-python,所以有几种新的依赖 - 详情请参见 pyproject.toml 文件的 [build-system] 部分.

故障排除#

这个构建系统的更改非常大.如果遇到意外问题,仍然可以通过将 pyproject.toml.setuppy 复制到 pyproject.toml 来使用基于 setup.py 的构建作为临时解决方案(在 Python 3.9-3.11 上,不是 3.12).不过,请在 NumPy 问题跟踪器上详细说明并打开一个问题.我们的目标是在尽可能短的时间内逐步淘汰 setup.py 构建,因此希望在 1.26.0 版本周期早期看到所有潜在的障碍.

贡献者#

总共有20人参与了这次发布.名字后面带有”+”的人首次贡献了补丁.

  • @DWesl

  • 阿尔伯特·斯佩皮 +

  • Bas van Beek

  • 查尔斯·哈里斯

  • 开发者-生态系统-工程

  • Filipe Laíns +

  • Jake Vanderplas

  • 梁燕 +

  • Marten van Kerkwijk

  • Matti Picus

  • Melissa Weber Mendonça

  • Namami Shanker

  • Nathan Goldbaum

  • Ralf Gommers

  • Rohit Goswami

  • 赛义德·阿德尔

  • 塞巴斯蒂安·伯格

  • 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: 修复选择引用计数泄漏

  • #24337: TST: 修复在没有 BLAS/LAPACK 的构建中运行测试套件

  • #24338: BUG: 随机: 修复狄利克雷生成 nan 的问题.

  • #24340: MAINT: 从主分支的 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 中的公共块处理

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

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

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

  • #24647: ENH: f2pymeson 后端

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

  • #24653: REL: 准备发布 NumPy 1.26.0rc1.

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

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

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

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

  • #24701: BUG: 修复 f2py 中复杂值的数据 stmt 处理

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

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