从源代码构建#

备注

如果你只是想安装 SciPy,我们建议使用二进制文件 - 详情请参阅 安装

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

系统级依赖项#

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

备注

如果你使用的是 Conda,你可以跳过本节中的步骤——除了为 Windows 安装编译器或为 macOS 安装 Apple 开发者工具。所有其他依赖项将由 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 开发者工具。一个简单的方法是 打开一个终端窗口,输入命令:

xcode-select --install

并按照提示操作。Apple 开发者工具包括 Git、Clang C/C++ 编译器,以及其他可能需要的开发工具。

不要使用 macOS 系统自带的 Python。相反,请使用 python.org 安装程序 或通过 Homebrew、MacPorts 或 Fink 等包管理器安装 Python。

你需要的其他系统依赖包括 Fortran 编译器、BLAS 和 LAPACK 库,以及 pkg-config。使用 Homebrew 安装它们最为简便:

brew install gfortran openblas pkg-config

备注

export PKG_CONFIG_PATH="/opt/homebrew/opt/openblas/lib/pkgconfig" 可能需要用于使构建系统检测到 OpenBlas。

备注

自 SciPy >=1.2.0 起,我们不支持针对系统 Accelerate 库编译 BLAS 和 LAPACK。它不支持足够新的 LAPACK 接口。这计划在 2023 年改变,因为 macOS 13.3 引入了对 Accelerate 的重大升级,解决了所有已知问题。

构建 SciPy 需要一组兼容的 C、C++ 和 Fortran 编译器。这在 Windows 上比在其他平台上更复杂,因为 MSVC 不支持 Fortran,并且 gfortran 和 MSVC 不能一起使用。你需要以下编译器组合之一:

  1. Mingw-w64 编译器 (gcc, g++, gfortran) - 推荐使用,因为它最容易安装,也是我们用于 SciPy 自身 CI 和二进制文件的工具

  2. MSVC + Intel Fortran (ifort)

  3. 英特尔编译器 (icc, ifort)

与 macOS 和 Linux 相比,在 Windows 上构建 SciPy 稍微困难一些,这是由于需要设置这些编译器。不能像在其他平台上那样,只需在命令提示符中调用一行命令。

首先,安装 Microsoft Visual Studio - 2019 社区版或任何更新的版本都可以(参见 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 命令行工具。为了在使用中的 shell 中使 C/C++ 编译器可用,您需要运行一个针对正确位数和架构的 .bat 文件(例如,对于 64 位 Intel CPU,使用 vcvars64.bat)。

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

与MSVC类似,Intel编译器设计为与一个激活脚本(Intel\oneAPI\setvars.bat)一起使用,该脚本在您使用的shell中运行。这使得编译器在路径中可用。有关详细指导,请参阅 Intel® oneAPI HPC Toolkit for Windows 入门指南

备注

编译器应位于系统路径中(即,PATH 环境变量应包含可以找到编译器可执行文件的目录),以便能够被找到,MSVC 除外,如果 PATH 上没有其他编译器,它将被自动找到。你可以使用任何 shell(例如,Powershell、cmd 或 Git Bash)来调用构建。要检查是否是这种情况,请尝试在你使用的 shell 中调用 Fortran 编译器(例如,gfortran --versionifort --version)。

警告

在使用conda环境时,由于Fortran编译器过时,环境创建可能会失败。如果发生这种情况,请从``environment.yml``中移除``compilers``条目,然后重试。Fortran编译器应按照本节所述进行安装。

从源代码构建 SciPy#

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

备注

如果你还没有安装 conda,我们推荐使用 Mambaforge;不过任何 conda 版本都可以。

从源代码构建以使用 SciPy#

如果你使用的是conda环境,pip 仍然是你用来调用SciPy源码构建的工具。重要的是,始终在 pip install 命令中使用 --no-build-isolation 标志,以避免针对PyPI上的 numpy 轮子进行构建。为了使其工作,你必须首先将剩余的构建依赖项安装到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 文档中的 “虚拟环境的工作原理”)。

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

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

# 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 <子命令> --help 以获取详细指导。

IDE 支持与可编辑安装

虽然 dev.py 接口是我们推荐的工作方式,但它有一个限制:由于自定义安装位置,使用 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 文档。

自定义构建#

背景信息#