从源代码构建#

注意

如果您只是尝试安装 SciPy,我们建议使用二进制文件——详见安装

从源代码构建 SciPy 首先需要设置系统级依赖项(编译器、BLAS/LAPACK 库等),然后才能调用构建过程。构建的目的是为了本地使用而安装 SciPy、开发 SciPy 本身,或者构建可再分发二进制包。您可能还需要自定义构建的某些方面。本指南将涵盖所有这些方面。此外,它还提供了关于 SciPy 构建工作原理的背景信息,并链接到与通用 Python 构建和打包文档相关的最新指南。

系统级依赖项#

SciPy 使用编译代码来提高速度,这意味着您需要在系统上安装编译器和其他一些系统级(即非 Python / 非 PyPI)依赖项才能构建它。

注意

如果您正在使用 Conda,可以跳过本节中的步骤——除了为 Windows 安装编译器或为 macOS 安装 Apple Developer Tools。所有其他依赖项都将通过 mamba env create -f environment.yml 命令自动安装。

如果您想使用系统 Python 和 pip,您将需要

  • C、C++ 和 Fortran 编译器(通常是 gccg++gfortran)。

  • Python 头文件(通常是一个名为 python3-devpython3-devel 的软件包)

  • BLAS 和 LAPACK 库。OpenBLAS 是 SciPy 的默认设置;其他变体包括 ATLASMKL

  • pkg-config 用于依赖项检测。

要安装 SciPy 构建要求,您可以执行

sudo apt install -y gcc g++ gfortran libopenblas-dev liblapack-dev pkg-config python3-pip python3-dev

或者,您可以执行

sudo apt build-dep scipy

此命令将安装构建 SciPy 所需的一切,优点是新依赖项或所需版本的更新由包管理器处理。

要安装 SciPy 构建要求,您可以执行

sudo dnf install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

或者,您可以执行

sudo dnf builddep scipy

此命令将安装构建 SciPy 所需的一切,优点是新依赖项或所需版本的更新由包管理器处理。

要安装 SciPy 构建要求,您可以执行

sudo yum install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

或者,您可以执行

sudo yum-builddep scipy

此命令将安装构建 SciPy 所需的一切,优点是新依赖项或所需版本的更新由包管理器处理。

要安装 SciPy 构建要求,您可以执行

sudo pacman -S gcc-fortran openblas pkgconf

安装 Apple Developer Tools。一个简单的方法是打开终端窗口,输入命令

xcode-select --install

并按照提示操作。Apple Developer Tools 包括 Git、Clang C/C++ 编译器以及可能需要的其他开发实用程序。

请勿使用 macOS 系统 Python。相反,请使用python.org 安装程序或使用 Homebrew、MacPorts 或 Fink 等包管理器安装 Python。

您需要的其他系统依赖项是 Fortran 编译器、BLAS 和 LAPACK 库以及 pkg-config。它们最容易通过Homebrew安装

brew install gfortran openblas pkg-config

要让构建工具找到 OpenBLAS,您必须运行

brew info openblas | grep PKG_CONFIG_PATH

这将给您一个以 export PKG_CONFIG_PATH= 开头的命令,您必须运行它。

注意

从 SciPy 1.14.0 开始,我们增加了对 Accelerate 库(用于 BLAS 和 LAPACK)的支持。它需要 macOS 13.3 或更高版本。要使用 Accelerate 而非 OpenBLAS 进行构建,请参阅选择 BLAS 和 LAPACK 库

构建 SciPy 需要一套兼容的 C、C++ 和 Fortran 编译器。这在 Windows 上比在其他平台上更麻烦,因为 MSVC 不支持 Fortran,并且 gfortran 和 MSVC 不能一起使用。您将需要以下其中一套编译器

  1. Mingw-w64 编译器(gccg++gfortran)——推荐,因为它最容易安装,也是我们在 SciPy 自己的 CI 和二进制文件中使用的

  2. MSVC + Intel Fortran (ifort)

  3. Intel 编译器(iccifort

与 macOS 和 Linux 相比,在 Windows 上构建 SciPy 稍微困难一些,因为需要设置这些编译器。您不能像在其他平台上那样在命令提示符下简单地调用一行命令。

首先,安装 Microsoft Visual Studio——2019 Community Edition 或任何更新版本都可以(参见 Visual Studio 下载网站)。即使您使用 MinGW-w64 或 Intel 编译器,也需要它,以确保您拥有 Windows 通用 C 运行时(使用 Mingw-w64 时不需要 Visual Studio 的其他组件,如果需要,可以取消选择以节省磁盘空间)。

MinGW-w64 有多个二进制文件来源。我们推荐 RTools 版本,可以通过 Chocolatey 安装(参见 Chocolatey 安装说明此处

choco install rtools -y --no-progress --force --version=4.0.0.20220206

如果出现问题,我们建议使用与 SciPy GitHub Actions CI Windows 作业中使用的完全相同的版本。

MSVC 安装程序不会将编译器添加到系统路径中,并且安装位置可能会更改。要查询安装位置,MSVC 附带一个 vswhere.exe 命令行实用程序。为了使 C/C++ 编译器在您使用的 Shell 中可用,您需要为正确的位数和架构运行一个 .bat 文件(例如,对于 64 位 Intel CPU,使用 vcvars64.bat)。

有关详细指导,请参阅从命令行使用 Microsoft C++ 工具集

与 MSVC 类似,Intel 编译器旨在与您在使用的 Shell 中运行的激活脚本(Intel\oneAPI\setvars.bat)一起使用。这使得编译器在路径上可用。有关详细指导,请参阅开始使用适用于 Windows 的 Intel® oneAPI HPC 工具包

注意

为了找到编译器,编译器应该在系统路径中(即 PATH 环境变量应包含可以找到编译器可执行文件的目录),但 MSVC 除外,当且仅当 PATH 上没有其他编译器时,MSVC 将被自动找到。您可以使用任何 Shell(例如 Powershell、cmd 或 Git Bash)来调用构建。要检查是否如此,请尝试在您使用的 Shell 中调用 Fortran 编译器(例如,gfortran --versionifort --version)。

警告

使用 conda 环境时,可能会因为 Fortran 编译器过时而导致环境创建失败。如果发生这种情况,请从 environment.yml 中删除 compilers 条目,然后重试。Fortran 编译器应按本节所述安装。

从源代码构建 SciPy#

如果您只想从源代码安装一次 SciPy,而不进行任何开发工作,那么推荐的构建和安装方式是使用 pip。否则,推荐使用 conda。

注意

如果您还没有 conda 安装,我们建议使用 Miniforge;任何 conda 版本都可以。

从源代码构建以使用 SciPy#

如果您使用的是 conda 环境,pip 仍然是您调用 SciPy 源代码构建的工具。请务必始终在 pip install 命令中使用 --no-build-isolation 标志,以避免针对 PyPI 的 numpy wheel 进行构建。为此,您必须首先将剩余的构建依赖项安装到 conda 环境中

# Either install all SciPy dev dependencies into a fresh conda environment
mamba env create -f environment.yml

# Or, install only the required build dependencies
mamba install python numpy cython pythran pybind11 compilers openblas meson-python pkg-config

# To build the latest stable release:
pip install scipy --no-build-isolation --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install . --no-build-isolation
# To build the latest stable release:
pip install scipy --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install .

从源代码构建以进行 SciPy 开发#

如果您想从源代码构建以从事 SciPy 本身的工作,请首先克隆 SciPy 存储库

git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init

然后您想执行以下操作

  1. 创建专用的开发环境(虚拟环境或 conda 环境),

  2. 安装所有必需的依赖项(构建,以及测试文档可选依赖项),

  3. 使用我们的 dev.py 开发者接口构建 SciPy。

步骤 (3) 总是相同的,步骤 (1) 和 (2) 在 conda 和虚拟环境之间有所不同

要创建包含所有必需和可选依赖项的 scipy-dev 开发环境,请运行

mamba env create -f environment.yml
mamba activate scipy-dev

注意

有许多工具可以管理虚拟环境,如 venvvirtualenv/virtualenvwrapperpyenv/pyenv-virtualenv、Poetry、PDM、Hatch 等。这里我们使用 Python stdlib 中的基本 venv 工具。您可以使用任何其他工具;我们只需要一个已激活的 Python 环境。

在名为 venv 的新目录中创建并激活一个虚拟环境(请注意,确切的激活命令可能因您的操作系统和 Shell 而异——请参阅 venv 文档中的“venv 的工作原理”)。

python -m venv venv
source venv/bin/activate
python -m venv venv
source venv/bin/activate
python -m venv venv
venv\Scripts\Activate.ps1

然后从 PyPI 安装 Python 级别的依赖项(参见 pyproject.toml

# All dependencies
python -m pip install -r requirements/all.txt

# Alternatively, you can install just the dependencies for certain
# development tasks:

# Build and dev dependencies (for `python dev.py {build, lint, mypy}`)
python -m pip install -r requirements/build.txt -r requirements/dev.txt

# Doc dependencies (for `python dev.py {doc, refguide-check}`)
python -m pip install -r requirements/doc.txt

# Test dependencies (for `python dev.py {test, bench, refguide-check}`)
python -m pip install -r requirements/test.txt

要在已激活的开发环境中构建 SciPy,请运行

python dev.py build

这会将 SciPy 安装在存储库内(默认在 build-install 目录中)。然后您可以运行测试(python dev.py test)、进入 IPython(python dev.py ipython),或者采取其他开发步骤,例如构建 html 文档或运行基准测试。dev.py 接口是自文档化的,因此请参阅 python dev.py --helppython dev.py <subcommand> --help 以获取详细指导。

IDE 支持和可编辑安装

虽然 dev.py 接口是我们推荐的 SciPy 工作方式,但它有一个限制:由于自定义安装位置,使用 dev.py 安装的 SciPy 不会在 IDE 中自动识别(例如,通过“运行”按钮运行脚本,或可视化设置断点)。使用就地构建(或“可编辑安装”)会更好地解决这个问题。

支持可编辑安装。重要的是要理解,在给定的存储库克隆中,您可以使用可编辑安装或 dev.py,但不能同时使用两者。如果您使用可编辑安装,则必须直接使用 pytest 和其他开发工具,而不是使用 dev.py

要使用可编辑安装,请确保您从一个干净的存储库开始(如果您之前使用 dev.py 构建过,请运行 git clean -xdf),并按照本页上方所述正确设置所有依赖项。然后执行

# Note: the --no-build-isolation is important! meson-python will
# auto-rebuild each time SciPy is imported by the Python interpreter.
pip install -e . --no-build-isolation

# To run the tests for, e.g., the `scipy.linalg` module:
pytest scipy/linalg

当更改 SciPy 代码(包括已编译的代码)时,无需手动重新构建或重新安装。当您运行 git clean -xdf(它会删除已构建的扩展模块)时,请记住同时使用 pip uninstall scipy 卸载 SciPy。

有关幕后工作原理的更多详细信息,请参阅 meson-python 关于可编辑安装的文档。

安装静态类型存根#

如果您想安装静态类型存根以帮助开发 SciPy,您可以在开发环境中包含 scipy-stubs 包。它在 PyPI 和 conda-forge 上可用——请参阅 scipy-stubs 安装指南。

自定义构建#

背景信息#