从源代码构建#
注意
如果您只是想安装 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(或“参考”)BLAS 和 LAPACK。
用于依赖项检测的
pkg-config
。Fortran 编译器仅用于运行
f2py
测试。下面的说明包含了 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 社区版或任何更新的版本都可以(请参阅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
)。
如果在安装了包含 MSVC v142 包(VS 2019 C++ x86/x64 构建工具)的 Visual Studio 2019+ 版本的同时使用 Conda 环境,激活 conda 环境应该会找到 Visual Studio 并执行相应的 .bat 文件来设置这些变量。
有关详细指南,请参阅从命令行使用 Microsoft C++ 工具集。
与 MSVC 类似,Intel 编译器设计为与您在所用 shell 中运行的激活脚本 (Intel\oneAPI\setvars.bat
) 一起使用。这使得编译器可在路径中访问。有关详细指南,请参阅Windows 版 Intel® oneAPI HPC 工具包入门。
MinGW-w64 有多个二进制文件来源。我们推荐 RTools 版本,可以通过 Chocolatey 安装(请参阅 Chocolatey 安装说明此处)
choco install rtools -y --no-progress --force --version=4.0.0.20220206
注意
编译器应该在系统路径中(即,PATH
环境变量应包含可以找到编译器可执行文件的目录)才能被找到,但 MSVC 是个例外,它仅在 PATH
上没有其他编译器时才会自动被找到。您可以使用任何 shell(例如 Powershell、cmd
或 Git Bash)来启动构建。要检查是否如此,请尝试在您使用的 shell 中调用 Fortran 编译器(例如,gfortran --version
或 ifort --version
)。
警告
当使用 conda 环境时,环境创建可能会因为 Fortran 编译器过时而失败。如果发生这种情况,请从 environment.yml
中删除 compilers
条目,然后重试。Fortran 编译器应按本节所述安装。
在 ARM64 上的 Windows 中,可用于构建 NumPy 的编译器选项集是有限的。GCC 和 GFortran 等编译器尚不支持 ARM64 上的 Windows。目前,ARM64 上的 Windows 版 NumPy 构建支持 MSVC 和 LLVM 工具链。在其他平台上使用 Fortran 编译器更为棘手,因为 MSVC 不支持 Fortran,且 gfortran 和 MSVC 不能一起使用。如果您不需要运行 f2py
测试,则简单使用 MSVC 最容易。否则,您将需要以下一组编译器
MSVC + flang (
cl
,flang
)LLVM + flang (
clang-cl
,flang
)
首先,安装 Microsoft Visual Studio——2022 社区版即可(请参阅Visual Studio 下载网站)。确保您已从此处安装了在 WoA 上构建 NumPy 所需的 Visual Studio 组件。
要在 ARM64 上的 Windows 中使用 flang 编译器,请从此处安装 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 是个例外,它仅在 PATH
上没有其他编译器时才会自动被找到。您可以使用任何 shell(例如 Powershell、cmd
或 Git Bash)来启动构建。要检查是否如此,请尝试在您使用的 shell 中调用 Fortran 编译器(例如,flang --version
)。
警告
目前,Conda 环境尚未在ARM64 上的 Windows 上获得官方支持。目前的方法是使用 virtualenv 在 ARM64 上的 Windows 上从源代码构建 NumPy。
从源代码构建 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
然后您需要执行以下操作
创建一个专用的开发环境(虚拟环境或 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
文档中的“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 -m venv venv
.\venv\Scripts\activate
注意
使用 BLAS 和 LAPACK 函数构建 NumPy 需要在运行时使用 OpenBLAS 库。在 ARM64 上的 Windows 中,可以通过为 OpenBLAS 依赖项设置 pkg-config 来实现。ARM64 上的 Windows 版 OpenBLAS 的构建步骤可以在此处找到。
然后使用以下命令从 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 包的工作。头文件、入口点和其他此类内容可能无法从可编辑安装中获得。