源代码构建#
注意
如果您只是尝试安装 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 编译器(通常是
gcc
、g++
和gfortran
)。Python 头文件(通常是一个名为
python3-dev
或python3-devel
的包)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
注意
export PKG_CONFIG_PATH="/opt/homebrew/opt/openblas/lib/pkgconfig"
可能需要在构建系统检测 OpenBlas 时使用。
注意
从 SciPy >=1.2.0 开始,我们不支持针对 BLAS 和 LAPACK 的系统 Accelerate 库进行编译。它不支持足够新的 LAPACK 接口。计划于 2023 年进行此项更改,原因是 macOS 13.3 对 Accelerate 进行了重大升级,解决了所有已知问题。
需要兼容的 C、C++ 和 Fortran 编译器集来构建 SciPy。由于 MSVC 不支持 Fortran 而 gfortran 和 MSVC 不能一起使用,因此这在 Windows 上比在其他平台上更棘手。您将需要以下编译器集之一
Mingw-w64 编译器 (
gcc
、g++
、gfortran
) - 推荐,因为它最容易安装,而且是我们用于 SciPy 自身 CI 和二进制文件的文件MSVC + 英特尔 Fortran (
ifort
)英特尔编译器 (
icc
、ifort
)
与 macOS 和 Linux 相比,在 Windows 上构建 SciPy 稍微困难一些,因为需要设置这些编译器。在命令提示符中无法像在其他平台上那样只调用一条命令。
首先,请安装 Microsoft Visual Studio - 2019 社区版或任何更新版本都可以正常运行(请参阅 Visual Studio 下载网站)。即使使用 MinGW-w64 或 Intel 编译器,也有必要安装此程序,以确保安装 Windows Universal 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 Windows CI 作业 中所用的版本完全相同的版本。
MSVC 安装程序不会将编译器放在系统路径中,并且安装位置可能会发生变化。要查询安装位置,MSVC 配备了一个 vswhere.exe
命令行实用程序。而且,要在所使用的 Shell 中使 C/C++ 编译器可用,需要针对正确的二进制位数和架构运行 .bat
文件(例如,对于 64 位 Intel CPU,请使用 vcvars64.bat
)。
有关详细指南,请参阅 从命令行使用 Microsoft C++ 工具集。
类似于 MSVC,英特尔编译器设计为与激活脚本 (Intel\oneAPI\setvars.bat
) 一起使用,你可以在所使用的 Shell 中运行此脚本。这样就能将编译器置于路径中。有关详细指南,请参阅 适用于 Windows 的英特尔® oneAPI HPC 工具包入门。
注意
编译器应位于系统路径中(即 PATH
环境变量应包含可找到编译器可执行文件的目录),以便可以找到它们,除了 MSVC,如果且仅当 PATH
中没有其他编译器时,才会自动找到 MSVC。您可以使用任何 shell(例如 Powershell、cmd
或 Git Bash)来调用构建。若要检查情况是否如此,请尝试在您使用的 shell 中调用 Fortran 编译器(例如 gfortran --version
或 ifort --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
然后您需要执行以下操作
创建专用开发环境(虚拟环境或 conda 环境),
安装所有必需的依赖项(构建以及 测试、文档和可选依赖项),
使用我们的
dev.py
开发人员界面构建 SciPy。
第 (3) 步始终相同,第 (1) 步和第 (2) 步在 conda 和虚拟环境之间不同
若要创建一个已安装所有必需和可选依赖项的 scipy-dev
开发环境,请运行
mamba env create -f environment.yml
mamba activate scipy-dev
注意
有多种工具可以管理虚拟环境,例如 venv
、virtualenv
/virtualenvwrapper
、pyenv
/pyenv-virtualenv
、Poetry、PDM、Hatch 等。这里我们使用 Python 标准库的一部分,即基本的 venv
工具。你可以使用任何其他工具;我们只需要一个已激活的 Python 环境。
在名为 venv
的新目录中创建并激活一个虚拟环境(注意,准确的激活命令可能因你的操作系统和 shell而异,请参阅 venv
文档中的“How venvs work”)。
python -m venv venv
source venv/bin/activate
python -m venv venv
source venv/bin/activate
python -m venv venv
.\venv\Scripts\activate
然后,使用以下命令从 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
这将在存储库内(默认情况下在 build-install
目录中)安装 SciPy。然后,你可以运行测试(python dev.py test
)、进入 IPython(python dev.py ipython
),或采取其他开发步骤,例如构建 HTML 文档或运行基准测试。dev.py
接口是自文档化的,因此请参阅 python dev.py --help
和 python 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 文档。