状态numpy.distutils
和迁移建议#
numpy.distutils
已在 NumPy 中弃用1.23.0
。 Python 3.12 中它将被删除;对于 Python <= 3.11,它直到 Python 3.12 发布 2 年后(2025 年 10 月)才会被删除。
警告
numpy.distutils
仅测试过,较新的版本可能会崩溃。有关详细信息,请参阅numpy.distutils 与 setuptools 的交互。setuptools < 60.0
迁移建议#
有几个构建系统是迁移的不错选择。假设您已经在包中编译了代码(如果没有,您有几个不错的选择,例如 Poetry、Hatch 或 PDM 提供的构建后端)并且您希望使用设计良好、现代且可靠的构建系统,我们建议:
Meson和meson-python构建后端
如果您有适度的需求(仅简单的 Cython/C 扩展;不需要 Fortran、BLAS/LAPACK、嵌套setup.py
文件或 的其他功能
)并且到目前为止numpy.distutils
已经满意,您也可以考虑切换到.请注意, 的大多数功能
不太可能移植到.numpy.distutils
setuptools
numpy.distutils
setuptools
转向介子#
SciPy 在 1.9.0 版本中已迁移到 Meson 和 meson-python。在此过程中,Meson 的 Python 支持和功能对等方面的剩余问题numpy.distutils
得到了解决。注意:奇偶校验意味着一个大的超集(因为 Meson 是一个很好的通用构建系统);仅缺少一些 BLAS/LAPACK 库选择细节。 SciPy 使用了几乎所有提供的功能numpy.distutils
,因此如果 SciPy 成功地以 Meson 作为构建系统进行了发布,那么就不会有任何阻碍进行迁移,并且 SciPy 将成为其他正在迁移的包的一个很好的参考。有关 SciPy 迁移的更多详细信息,请参阅:
在 1.26 版本中,NumPy 将迁移到 Meson。
转向 CMake / scikit-build #
下一代 scikit-build 称为scikit-build-core。在下面scikit-build
使用旧版本的地方setuptools
,重写则没有。与 Meson 一样,CMake 是一个很好的通用构建系统。
搬到setuptools
#
对于仅numpy.distutils
出于历史原因使用并且实际上不使用超出setuptools
支持范围的功能的项目,迁移到setuptools
可能是花费最少精力的解决方案。为了评估这一点,以下功能numpy.distutils
不存在
:setuptools
嵌套
setup.py
文件Fortran 构建支持
BLAS/LAPACK 库支持(OpenBLAS、MKL、ATLAS、Netlib LAPACK/BLAS、BLIS、64 位 ILP 接口等)
支持其他一些科学库,例如 FFTW 和 UMFPACK
更好的 MinGW 支持
每个编译器构建标志自定义(例如-O3和SSE2标志是默认值)
一个简单的用户构建配置系统,请参见site.cfg.example
SIMD 内在函数支持
最广泛使用的功能是嵌套setup.py
文件。此功能setuptools
将来可能仍会被移植(不过它需要志愿者,请参阅gh-18588了解状态)。仅使用该功能的项目可以setuptools
在完成后转移。如果项目仅使用几个setup.py
文件,则将这些文件的所有内容简单地聚合到一个setup.py
文件中然后移动到setuptools
.这涉及删除所有Configuration
实例并Extension
改为使用。例如,:
from distutils.core import setup
from distutils.extension import Extension
setup(name='foobar',
version='1.0',
ext_modules=[
Extension('foopkg.foo', ['foo.c']),
Extension('barpkg.bar', ['bar.c']),
],
)
有关更多详细信息,请参阅 setuptools 文档
numpy.distutils
与# 的互动setuptools
建议使用。较新的版本可能有效,但不保证有效。原因是60.0 启用了 的供应商副本,包括影响.setuptools < 60.0
setuptools
distutils
numpy.distutils
如果您仅使用简单的 Cython 或 C 扩展,并且很少使用
numpy.distutils
嵌套文件之外的功能setup.py
(其最流行的功能,请参阅 参考资料Configuration
),那么最新版本setuptools
可能会继续工作。如果出现问题,您还可以尝试SETUPTOOLS_USE_DISTUTILS=stdlib
避免setuptools
.
无论您做什么,建议对您的setuptools
构建要求设置上限,pyproject.toml
以避免将来出现损坏 - 请参阅
对于下游包作者。