从源码构建#
注意
如果您只想安装 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-dev或python3-devel的包)BLAS 和 LAPACK 库。OpenBLAS 是 NumPy 的默认选项;其他变体包括 Apple Accelerate、MKL、ATLAS 和 Netlib(或“Reference”)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,以及用于检测 OpenBLAS 的 pkg-config。这些库最容易使用 Homebrew 进行安装。
brew install openblas pkg-config gfortran
在 Windows 上,Fortran 编译器的使用比其他平台更棘手,因为 MSVC 不支持 Fortran,并且 gfortran 和 MSVC 不能一起使用。如果您不需要运行 f2py 测试,只需使用 MSVC 最简单。否则,您将需要以下一组编译器
MSVC + Intel Fortran (
ifort)Intel 编译器 (
icc,ifort)Mingw-w64 编译器 (
gcc,g++,gfortran)
与 macOS 和 Linux 相比,在 Windows 上构建 NumPy 稍微困难一些,因为需要设置这些编译器。在命令行上无法像在其他平台上那样只调用一个命令行。
首先,安装 Microsoft Visual Studio - 2019 Community Edition 或任何更新的版本都可以(请参阅 Visual Studio 下载站点)。即使您使用 MinGW-w64 或 Intel 编译器,也需要它,以确保您拥有 Windows Universal C Runtime(使用 Mingw-w64 时不需要 Visual Studio 的其他组件,如果需要,可以取消选择以节省磁盘空间)。UCRT 的推荐版本为 >= 10.0.22621.0。
MSVC 安装程序不会将编译器放在系统路径中,并且安装位置可能会更改。要查询安装位置,MSVC 带有一个 vswhere.exe 命令行实用程序。为了使 C/C++ 编译器在您使用的 shell 中可用,您需要运行适用于正确位和体系结构的 .bat 文件(例如,对于 64 位 Intel CPU,使用 vcvars64.bat)。
如果在激活的 conda 环境中安装了包含 MSVC v142 包(VS 2019 C++ x86/x64 构建工具)的 Visual Studio 2019+ 版本,激活 conda 环境应该会找到 Visual Studio 并执行相应的 .bat 文件来设置这些变量。
有关详细指导,请参阅 从命令行使用 Microsoft C++ 工具集。
与 MSVC 类似,Intel 编译器设计用于使用激活脚本(Intel\oneAPI\setvars.bat),您可以在使用的 shell 中运行该脚本。这会将编译器添加到路径中。有关详细指导,请参阅 获取 Intel® oneAPI HPC Toolkit for Windows 的入门指南。
有几个 MinGW-w64 的二进制文件来源。我们推荐 RTools 版本,可以通过 Chocolatey 安装(请在此处查看 Chocolatey 安装说明 here)。
choco install rtools -y --no-progress --force --version=4.0.0.20220206
注意
编译器应该在系统路径中(即 PATH 环境变量应包含可找到编译器可执行文件的目录),以便被找到,MSVC 除外,MSVC 仅当 PATH 中没有其他编译器时才会被自动找到。您可以使用任何 shell(例如,Powershell、cmd 或 Git Bash)来调用构建。要检查这一点,请尝试在您使用的 shell 中调用 Fortran 编译器(例如,gfortran --version 或 ifort --version)。
警告
当使用 conda 环境时,由于 Fortran 编译器过时,环境创建可能会失败。如果发生这种情况,请从 environment.yml 中删除 compilers 条目,然后重试。Fortran 编译器应按照本节中的描述进行安装。
在 Windows on ARM64 上,可用于构建 NumPy 的编译器选项集有限。GCC 和 GFortran 等编译器尚未支持 Windows on ARM64。目前,NumPy 在 Windows on ARM64 上的构建由 MSVC 和 LLVM 工具链支持。Fortran 编译器的使用比其他平台更棘手,因为 MSVC 不支持 Fortran,并且 gfortran 和 MSVC 不能一起使用。如果您不需要运行 f2py 测试,只需使用 MSVC 最简单。否则,您将需要以下编译器集
MSVC + flang (
cl,flang)LLVM + flang (
clang-cl,flang)
首先,安装 Microsoft Visual Studio - 2022 Community Edition 即可(请参阅 Visual Studio 下载站点)。确保您已从 此处 安装了构建 NumPy on WoA 所需的 Visual Studio 组件。
要使用 flang 编译器 for Windows on ARM64,请从此处的 WoA 安装最新 LLVM 工具链。
MSVC 安装程序不会将编译器放在系统路径中,并且安装位置可能会更改。要查询安装位置,MSVC 带有一个 vswhere.exe 命令行实用程序。为了使 C/C++ 编译器在您使用的 shell 中可用,您需要运行适用于正确位和体系结构的 .bat 文件(例如,对于 ARM64 架构的 CPU,使用 vcvarsarm64.bat)。
有关详细指导,请参阅 从命令行使用 Microsoft C++ 工具集。
与 MSVC 类似,LLVM 不会将编译器放在系统路径中。要为 LLVM 编译器设置系统路径,用户可能需要使用 set 命令将编译器添加到系统路径。要检查 LLVM 的 clang-cl 编译器的路径,请尝试在您使用的 shell 中调用 LLVM 的 clang-cl 编译器(clang-cl --version)。
注意
编译器应该在系统路径中(即 PATH 环境变量应包含可找到编译器可执行文件的目录),以便被找到,MSVC 除外,MSVC 仅当 PATH 中没有其他编译器时才会被自动找到。您可以使用任何 shell(例如,Powershell、cmd 或 Git Bash)来调用构建。要检查这一点,请尝试在您使用的 shell 中调用 Fortran 编译器(例如,flang --version)。
警告
目前,Conda 环境在 Windows on ARM64 上尚未得到官方支持。目前的方法是使用 virtualenv 在 Windows on ARM64 上从源码构建 NumPy。
从源码构建 NumPy#
如果您只想从源码一次性安装 NumPy 并且不做任何开发工作,那么推荐的构建和安装方法是使用 pip。否则,推荐使用 conda。
注意
如果您还没有 conda 安装,我们推荐使用 Miniforge;不过任何 conda 版本都可以。
从源码构建以使用 NumPy#
如果您使用 conda 环境,pip 仍然是您用来从源码构建 NumPy 的工具。重要的是,始终将 --no-build-isolation 标志传递给 pip install 命令,以避免构建针对 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
然后您需要执行以下操作
创建一个专用的开发环境(虚拟环境或 conda 环境),
安装所有必需的依赖项(构建,以及测试、文档和可选依赖项),
使用
spin开发者界面构建 NumPy。
步骤 (3) 始终相同,步骤 (1) 和 (2) 在 conda 和虚拟环境之间有所不同。
要创建一个包含所有必需和可选依赖项的 numpy-dev 开发环境,请运行
mamba env create -f environment.yml
mamba activate numpy-dev
注意
有许多工具可以管理虚拟环境,例如 venv、virtualenv/virtualenvwrapper、pyenv/pyenv-virtualenv、Poetry、PDM、Hatch 等。这里我们使用 Python 标准库中包含的基本 venv 工具。您可以使用任何其他工具;我们只需要一个激活的 Python 环境。
在一个名为 venv 的新目录中创建并激活一个虚拟环境(请注意,确切的激活命令可能因您的操作系统和 shell 而异 - 请参阅 venv 文档中的 “Venvs 的工作原理”)。
python -m venv venv
source venv/bin/activate
python -m venv venv
source venv/bin/activate
python -m venv venv
.\venv\Scripts\activate
python -m venv venv
.\venv\Scripts\activate
注意
使用 BLAS 和 LAPACK 函数构建 NumPy 需要运行时 OpenBLAS 库。在 Windows on ARM64 上,这可以通过为 OpenBLAS 依赖项设置 pkg-config 来实现。OpenBLAS for Windows on ARM64 的构建步骤可以在 这里 找到。
然后使用以下命令从 PyPI 安装 Python 级别的依赖项
python -m pip install -r requirements/build_requirements.txt
要在激活的开发环境中构建 NumPy,请运行
spin build
这将把 NumPy 安装在仓库内(默认在 build-install 目录中)。然后您可以运行测试(spin test)、进入 IPython(spin ipython),或执行其他开发步骤,如构建 html 文档或运行基准测试。 spin 界面是自文档化的,因此请参阅 spin --help 和 spin <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 包。从可编辑安装可能无法获得头文件、入口点等。