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现在完全支持 v2022.12 版本的数组 API 标准。请注意,这尚不包括标准中可选的- fft扩展。
(gh-23789)
支持更新的 Accelerate BLAS/LAPACK 库#
已添加对 macOS 13.3 中更新的 Accelerate BLAS/LAPACK 库的支持,包括 ILP64(64 位整数)支持。这带来了 arm66 支持,并显著提高了常用线性代数操作的性能,最高可达 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 接口保留唯一的标签。
注意: 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 作为构建后端。可以使用 pip 和 pypa/build 等标准工具安装 NumPy 或构建 wheel。支持以下操作:
- 常规安装: - 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 特定的构建定制方式都已更改。控制 BLAS/LAPACK、SIMD、线程以及其他此类选项的 NPY_* 环境变量不再受支持,site.cfg 文件也无法再用于选择 BLAS 和 LAPACK。相反,现在有可以通过 pip/build 的配置设置接口传递给构建的命令行标志。所有这些标志都列在仓库根目录的 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: 修复 distutils 测试在最近 setuptools 中弃用后的问题… 
- #24375: MAINT: 更新 cibuildwheel 到版本 2.15.0 
- #24381: MAINT: 修复 codespaces setup.sh 脚本 
- #24403: ENH: 捆绑 meson 以支持多目标构建 
- #24404: BLD: 捆绑 meson-python 以使 Windows 构建支持 SIMD… 
- #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 提升到 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: 明确声明 - 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 扩展中的 bug,不链接 libnpyrandom 
- #24675: BLD: 使用 MSVC 为 Windows 上的 32 位 Python 构建 wheel 
- #24700: BLD: 修复交叉编译期间编译器选择问题 
- #24701: BUG: 修复 f2py 中复杂值的 data stmt 处理 
- #24707: TYP: 为 py3.12 缓冲区协议添加注解 
- #24718: DOC: 修复 1.26.x 上的一些文档构建问题并更新 spin docs…