工具链路线图

使用SciPy库需要(或可选地依赖)其他几个库才能运行,主要的依赖项是Python和NumPy。它需要更多的库和工具来构建库或文档。

当然,工具和库本身不是静电。本文旨在提供一份指南,说明随着时间的推移,本网站将如何使用这些动态依赖关系。

SciPy的目标是与其依赖库和工具的多个版本兼容。强迫用户群在每个版本中升级到其他组件将会极大地降低SciPy的价值。然而,保持与非常旧的工具/库的向后兼容性会对可以合并较新的功能和功能施加限制。SciPy采取了一种有点保守的方法,在主要平台上保持与Python和NumPy的几个主要版本的兼容性。(这本身可能会施加进一步的限制。有关示例,请参阅C编译器部分。)

  • 首先,也是最重要的,SciPy是一个Python项目,因此它需要一个Python环境。

  • 需要安装BLAS和LAPACK数字库。

  • 需要针对C、C++、Fortran代码的编译器,也需要针对Cython和Pythran的编译器(后者目前已选择退出)

  • Python环境需要 NumPy 要安装的软件包。

  • 测试需要 pytest Python包。

  • 生成文档需要 matplotlib Sphinx包以及PyData主题,以及LaTeX安装。

用于构建CPython的工具对构建SciPy所使用的工具有一些影响。它对文档中使用的示例也有影响(例如,函数的文档字符串),因为这些示例只能使用所有支持的配置中存在的功能。

构建Science Py

Python版本

SciPy与Python的多个版本兼容。当放弃对较旧的Python版本的支持时,SciPy将从NEP 29中获得指导 10. 已取消对编号为1.3和更高版本的SciPy版本的Python 2.7支持,但在1.2.x版本中仍可用,该版本是一个长期支持版本 1, 2.

日期

支持 Python

2018

Py2.7、Py3.4+(SciPy 1.2.x是支持Python 2.7的最后一个版本)

2019

Py3.5+(但未删除特定于Py2.7的代码)

2020

Py3.6+(允许删除特定于Py2.7的代码)

2021

Py3.7+

NumPy

SciPy依赖于NumPy,但是SciPy的发布并不与NumPy的发布捆绑在一起。SciPy尝试与NumPy的至少4个先前版本兼容。特别是,SciPy不能仅仅依赖最新NumPy的特性,而需要使用这4个版本中的通用特性来编写。 1, 3.

下表显示了适用于每个主要Python版本的NumPy版本。

SciPy版本

Python版本

NumPy版本

1.2

2.7,>=3.4,<=3.7

>=1.8.2,<=1.16.x

1.4

>=3.5,<=3.8

>=1.13.3,<=1.17.3

1.5

>=3.6,<=3.9

>=1.14.5,<=1.19.3

1.6

>=3.7,<=3.9

>=1.16.5,<=1.20.x

1.7.0/1

>=3.7,<3.10

>=1.16.5,<1.23.0

1.7.2-x

>=3.7,<3.11

>=1.16.5,<1.24.0

1.8

>=3.8,<3.11

>=1.17.3,<1.24.0

在特定情况下,例如特定的体系结构,这些需求可能会有所不同。请检查发行说明和元包 oldest-supported-numpy 了解更多信息。 18, 19.

编译器

构建SciPy需要C、C++、Fortran编译器,以及Python转换程序Cython和Pythran(从1.7.0版开始,后者是可选择退出的依赖项)。

为了保持与大量平台和设置的兼容性,特别是在无法使用官方轮子(或其他发行渠道,如 Python 或Conda-Forge)的情况下,SciPy保持与旧编译器的兼容性。

官方版本

目前,SciPy车轮正在建造如下:

站台

蔚蓝基映像 14

编译器

评论

Linux(夜间)

ubuntu-18.04

GCC 4.8%

看见 azure-pipelines.yml

Linux(版本)

ubuntu-18.04

GCC 7.5

内置独立回购 15

OSX

macOS-10.14

LLVM 11.0

内置独立回购 15

窗口

VS2017-Win2016

Visual Studio 2017(15.9)

看见 azure-pipelines.yml

请注意,OSX车轮是额外的供应商gfortran 4.8,请参见 15.

C编译器

SciPy与大多数现代C编译器兼容(特别是 clang )。除了担心与非标准平台的兼容性之外,出于与ABI兼容的原因,Windows版本的SciPy必须使用与CPython本身相同版本的Microsoft Visual C++编译器,这是一个长期存在的限制 6, 7, 8, 9.

随着“通用C运行时”的引入 16 自Visual Studio 2015发布以来,此限制已取消。有关更多上下文,请参阅Steve Dower(CPython-on-Windows核心开发人员成员)对此主题的解释 17.

使用MS Visual Studio9.0(不支持C99)构建Python2.7意味着SciPy中的C代码必须符合语言和标准库的早期C90标准。随着针对SciPy 1.3.x的Python2.7的删除,编译器不再对C90施加限制。对于GCC版本小于5的版本,显式 -std=c99 如果在SciPy代码中使用C99功能,则可能必须由用户添加。

就C语言标准而言,值得注意的是,C11具有可选功能 12 (例如原子、线程),其中一些(VLA和复杂类型)在C99标准中是必需的。C17(有时称为C18)可以被认为是对C11的错误修复,因此通常可以完全跳过C11。

由于可用的编译器支持,SciPy在使用更高级的语言功能方面受到了限制,尤其是Microsoft花了很长时间才符合C99/C11/C17,但是从MS Visual Studio16.8开始支持C11/C17 11 (虽然没有C11可选功能)。

因此,是否使用C90以外的C特性取决于是否更新了SciPy的windows工具链,以及检查所有最低支持的编译器版本对所需特性的编译器支持。简而言之:

CPython

MS Visual C++

C标准版

2.7、3.0、3.1、3.2

9.0

C90

3.3、3.4

10.0

C90和一些C99

3.5,3.6

14.0

C90&C99的大部分

3.7、3.8、3.9

15.7

取决于用于构建SciPy的MSVC版本

C和C++语言标准

本网站的C和C++语言标准通常是指导方针,而不是官方决定。在试图预测较新标准的采用时间表时尤其如此。

日期

C/C++标准版

<=2018

C90

2019

C90适用于旧代码,C99适用于新代码

2020

C99

2020

C++11

2021

C++14

C11、C17、C++17、C++20

对于C,C11/C17支持将在 vmImage 对于构建,SciPy升级到 windows-2019 (兼容当前支持的CPython版本,只需执行即可)。这是因为GCC和LLVM支持当前使用的最旧版本的所有相关C11功能,而C17只是C11的一个错误修复,如上所述。

在C++方面,由于取消了对Python2.7的支持,所以C++11可以通用。对于C++14,从Visual Studio 15.9(<->_msc_ver19.16)开始,Windows不再是一个限制(请参阅 8) 完全支持(与C++17相同),请参见 4. 但是,使用C++14仍然需要将GCC的最低要求提高到5.x,而使用C++17将需要GCC>=7 4. 对C++20的编译器支持仍在大力开发中。

注解

开发人员注意:C99的一些特性对科学编程很有用,特别是对IEEE754的更好支持 5. SciPy有一个很小的包含文件 scipy/_lib/_c99compat.h 其提供对一些功能的访问。与一起使用 <numpy/npy_math.h>

功能

解决方法

isnan(), isinf(), isfinite()

使用 sc_isnan()sc_isinf()sc_isfinite()

NAN

使用 NPY_NAN (是这样的 差不多了 等效)

内联函数

创建静电函数并将其放入包含的.h文件中

挡路中段变量声明

在挡路顶部声明变量

Fortran编译器

通常,任何维护良好的编译器都可能适用,并且可以用来构建SciPy。

工具

版本

Gfortran

>=4.8.0

Ifort

最新版本

法兰

最新版本

Cython编译器

SciPy始终需要最新的Cython编译器。

工具

工具版本

SciPy版本

Cython

>=0.29.13

1.4.1

Cython

>=0.29.18

1.5.0

OpenMP支持

出于各种原因 13, SciPy不能与内置OpenMP支持一起分发。当使用可选的Pythran支持时,可以在从源代码构建时生成启用OpenMP的并行代码。

其他类库

可以使用符合BLAS/LAPACK接口的任何库。已知OpenBLAS、ATLAS、MKL、BLIS和参考Netlib库可以正常工作。

类库

最低版本

LAPACK

3.4.1

BLAS

OpenBLAS、MKL或ATLAS的最新版本。不再支持加速BLAS。

还有一些额外的可选依赖项。

类库

版本

URL

mpath

最近

http://mpmath.org/

SCRICKIT-umfpack

最近

https://pypi.org/project/scikit-umfpack/

此外,Scipy还支持与其他库的交互。该测试套件有其他兼容性测试,在安装这些测试时会运行这些测试:

工具

版本

URL

pydata/稀疏

最近

https://github.com/pydata/sparse/

测试和标杆

测试和基准测试需要以下最新版本:

工具

版本

URL

最火的

最近

https://docs.pytest.org/en/latest/

ASV(空速)

最近

https://asv.readthedocs.io/

构建文档

工具

版本

狮身人面像

无论最新版本如何工作。>=2.0。

PyData Sphinx主题

无论最新版本如何工作。>=0.6.1。

狮身人面像-面板

无论最新版本如何工作。>=0.5.2。

数字多克

无论最新版本如何工作。>=0.8.0。

Matplotlib

通常建议>=2.0。

LaTeX

最近的分发,例如 TeX Live 2016

[The numpydoc package is also used, but that is currently packaged in doc/sphinxext.]

注解

开发人员注意事项:的版本 numpymatplotlib 必填项对Python文档字符串中的示例有影响。示例必须能够在用于构建文档的环境中以及任何受支持的版本中执行 numpy/matplotlib 用户可以在此版本的SciPy中使用。

包装

最新版本的:

工具

版本

URL

安装工具

最近

https://pypi.org/project/setuptools/

车轮

最近

https://pythonwheels.com

多重构建

最近

https://github.com/matthew-brett/multibuild

发布SciPy版本分发 包含有关制作和分发SciPy版本的信息。

参考文献

1(1,2)

https://docs.scipy.org/doc/scipy/reference/release.1.2.0.html

2

https://python3statement.org

3

https://docs.scipy.org/doc/numpy/release.html

4(1,2)

https://en.cppreference.com/w/cpp/compiler_support

5

https://en.wikipedia.org/wiki/IEEE_754-1985

6

https://blogs.msdn.microsoft.com/vcblog/2013/07/19/c99-library-support-in-visual-studio-2013/

7

https://pythondev.readthedocs.io/windows.html#python-and-visual-studio-version-matrix

8(1,2)

https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering

9

https://wiki.python.org/moin/WindowsCompilers

10

https://numpy.org/neps/nep-0029-deprecation_policy.html

11

https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/

12

https://en.wikipedia.org/wiki/C11_%28C_standard_revision%29#Optional_features

13

https://github.com/scipy/scipy/issues/10239

14

https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted

15(1,2,3)

https://github.com/MacPython/scipy-wheels

16

https://docs.microsoft.com/en-gb/cpp/windows/universal-crt-deployment

17

https://discuss.python.org/t/toolchain-upgrade-on-windows/6377/4

18

https://scipy.github.io/devdocs/release.html

19

https://github.com/scipy/oldest-supported-numpy