从源码构建#

注意

如果您只想安装 NumPy,我们建议您使用二进制文件 - 请参阅 安装 获取详细信息。

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

系统级依赖项#

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

注意

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

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

  • C 和 C++ 编译器(通常是 GCC)。

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

  • BLAS 和 LAPACK 库。OpenBLAS 是 NumPy 的默认值;其他变体包括 Apple Accelerate、MKLATLASNetlib(或“参考”)BLAS 和 LAPACK。

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

  • 只有在运行 f2py 测试时才需要 Fortran 编译器。下面的说明包括一个 Fortran 编译器,但是您可以安全地忽略它。

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

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

或者,您可以执行:

sudo apt build-dep numpy

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

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

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

或者,您可以执行:

sudo dnf builddep numpy

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

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

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

或者,您可以执行:

sudo yum-builddep numpy

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

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

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。

在 macOS >=13.3 上,最简单的构建选项是使用 Accelerate,它已安装并且默认情况下将自动使用。

在较旧的 macOS 版本上,您需要不同的 BLAS 库,最可能是 OpenBLAS,以及 pkg-config 来检测 OpenBLAS。使用 Homebrew 最容易安装这些库。

brew install openblas pkg-config gfortran

在 Windows 上,使用 Fortran 编译器比在其他平台上更棘手,因为 MSVC 不支持 Fortran,并且 gfortran 和 MSVC 不能一起使用。如果您不需要运行 f2py 测试,那么只需使用 MSVC 就最简单。否则,您将需要以下编译器集合之一:

  1. MSVC + Intel Fortran (ifort)

  2. Intel 编译器 (iccifort)

  3. Mingw-w64 编译器 (gccg++gfortran)

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

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

MSVC 安装程序不会将编译器放在系统路径上,并且安装位置可能会更改。要查询安装位置,MSVC 带有一个 vswhere.exe 命令行实用程序。要使 C/C++ 编译器在您使用的 shell 中可用,您需要运行一个 .bat 文件,该文件对应正确的位数和体系结构(例如,对于 64 位 Intel CPU,请使用 vcvars64.bat)。

如果在安装了包含 MSVC v142 包(VS 2019 C++ x86/x64 构建工具)的 Visual Studio 2019+ 版本时使用 Conda 环境,则激活 conda 环境应该会导致找到 Visual Studio 并执行相应的 .bat 文件来设置这些变量。

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

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

有多个 MinGW-w64 二进制文件来源。我们建议使用 RTools 版本,可以使用 Chocolatey 安装(请在此处查看 Chocolatey 安装说明 here

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

注意

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

警告

使用 conda 环境时,由于 Fortran 编译器过时,环境创建可能无法工作。如果发生这种情况,请从 environment.yml 中删除 compilers 条目,然后重试。应按照本节中的说明安装 Fortran 编译器。

从源码构建 NumPy#

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

注意

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

从源码构建以使用 NumPy#

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

# Either install all NumPy 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 compilers openblas meson-python pkg-config

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

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

警告

在 Windows 上,可能会设置 AR、LD 和 LDFLAGS 环境变量,这将导致 pip install 命令失败。这些变量仅适用于 flang,在运行 pip install 之前可以安全地取消设置。

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

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

从源码构建用于 NumPy 开发#

如果您想从源码构建以便处理 NumPy 本身,请首先克隆 NumPy 存储库:

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

然后您需要执行以下操作:

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

  2. 安装所有需要的依赖项(构建、测试、文档和可选依赖项),

  3. 使用 spin 开发人员接口构建 NumPy。

步骤 (3) 始终相同,步骤 (1) 和 (2) 在 conda 和虚拟环境之间有所不同。

要创建一个安装了所有必需和可选依赖项的 numpy-dev 开发环境,请运行:

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

注意

有很多工具可以管理虚拟环境,例如 venvvirtualenv/virtualenvwrapperpyenv/pyenv-virtualenv、Poetry、PDM、Hatch 等等。这里我们使用 Python 标准库中自带的基本工具 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

然后使用以下命令从 PyPI 安装 Python 级依赖项:

python -m pip install -r requirements/all_requirements.txt

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

spin build

这将在代码库内安装 NumPy(默认情况下在 build-install 目录中)。然后,您可以运行测试(spin test)、进入 IPython(spin ipython)或执行其他开发步骤,例如构建 html 文档或运行基准测试。spin 接口是自文档化的,因此请参阅 spin --helpspin <subcommand> --help 以获取详细的指导。

警告

在 Windows 上已激活的 conda 环境中,可能会设置 AR、LD 和 LDFLAGS 环境变量,这将导致构建失败。这些变量仅适用于 flang,并且可以安全地取消设置以进行构建。

IDE 支持和可编辑安装

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

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

要使用可编辑安装,请确保从干净的代码库开始(如果您之前使用 spin 构建过,请运行 git clean -xdf)并正确设置所有依赖项,如本页前面所述。然后执行以下操作:

# Note: the --no-build-isolation is important!
pip install -e . --no-build-isolation

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

更改 NumPy 代码(包括编译代码)时,无需手动重建或重新安装。每次 Python 解释器导入 NumPy 时,NumPy 都会自动重建;有关幕后工作方式的更多详细信息,请参阅 meson-python 文档中关于可编辑安装的内容。

当您运行 git clean -xdf(删除已构建的扩展模块)时,请记住也使用 pip uninstall numpy 卸载 NumPy。

警告

请注意,可编辑安装从根本上来说是不完整的安装。它们唯一保证的是 import numpy 可以工作 - 因此它们适合于处理 NumPy 本身以及处理依赖于 NumPy 的纯 Python 包。可编辑安装可能无法提供头文件、入口点和其他此类内容。

自定义构建#

背景信息#