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现在完全支持数组 API 标准的 v2022.12 version . 请注意,这还不包括标准中可选的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 )
bind(c) 对 f2py 的支持#
函数和子例程都可以用 bind(c) 注释. f2py 将处理正确的类型映射,并为其他 C 接口保留唯一标签.
注意:按照设计, f2py 绑定不接受 bind(c, name = 'routine_name_other_than_fortran_routine') ,因为带有 name 的 bind(c) 旨在保证 C 和 Fortran 中名称相同,而不是在 Python 和 Fortran 中.
( gh-24555 )
改进#
iso_c_binding 对 f2py 的支持#
以前,用户必须定义自己的自定义 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_* 环境变量,也不再支持用于选择 BLAS 和 LAPACK 的 site.cfg 文件.相反,有一些命令行标志可以通过 pip / build 的 config-settings 接口传递给构建.所有这些标志都列在仓库根目录中的 meson_options.txt 文件中.详细的文档将在最终的 1.26.0 版本发布之前提供;目前,请参阅 the SciPy “building from source” docs ,因为大多数构建自定义在 SciPy 中的工作方式与在 NumPy 中的工作方式几乎相同.
构建依赖项#
虽然 NumPy 的运行时依赖项没有改变,但构建依赖项已经改变.因为我们临时 vendor 了 Meson 和 meson-python,所以有几个新的依赖项 - 请参阅 pyproject.toml 的 [build-system] 部分以获取详细信息.
故障排除#
此构建系统更改非常大.如果出现意外问题,仍然可以复制 pyproject.toml.setuppy 到 pyproject.toml 来临时使用基于 setup.py 的构建(在 Python 3.9-3.11 上,而不是 3.12 上).但是,请在 NumPy 问题跟踪器上打开一个包含详细信息的 issue.我们的目标是尽快淘汰 setup.py 构建,因此希望在 1.26.0 发布周期中尽早发现所有潜在的阻碍因素.
贡献者#
总共有 20 人为这个版本做出了贡献.名字旁边标有“+”的人是第一次贡献补丁.
@DWesl
Albert Steppi +
Bas van Beek
Charles Harris
开发者-生态系统-工程
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 个 pull request.
#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 以使用 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 升级到 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: 显式声明
dtype和generic可哈希#24637 : ENH: 使用
typing.assert_type重构 typing “reveal” 测试#24638 : MAINT: 从 3.6.0 升级 actions/checkout 到 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 构建 wheels
#24700 : BLD: 修复交叉编译期间编译器选择的问题
#24701 : BUG: 修复 f2py 中复数值的数据语句处理
#24707 : TYP: 为 py3.12 缓冲协议添加注释
#24718 : DOC: 修复 1.26.x 上的一些文档构建问题并更新 spin docs …