从源代码构建#

备注

如果你只是想安装 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 <OpenMathLib/OpenBLAS>`__ 是 NumPy 的默认库;其他变体包括 Apple Accelerate、MKLATLAS`Netlib <https://www.netlib.org/lapack/index.html>`__(或”参考”)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 开发者工具.一个简单的方法是 打开一个终端窗口,输入命令:

xcode-select --install

并按照提示操作.Apple 开发者工具包括 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. 英特尔编译器 (icc, ifort)

  3. Mingw-w64 编译器 (gcc, g++, gfortran)

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

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

MSVC 安装程序不会将编译器放在系统路径上,并且安装位置可能会改变.要查询安装位置,MSVC 提供了一个 vswhere.exe 命令行工具.为了让 C/C++ 编译器在您使用的 shell 中可用,您需要运行一个 .bat 文件以获得正确的位数和架构(例如,对于 64 位 Intel CPU,使用 vcvars64.bat).

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

类似于 MSVC,Intel 编译器设计为使用一个激活脚本(Intel\oneAPI\setvars.bat),在你使用的 shell 中运行.这使得编译器在路径中可用.有关详细指导,请参阅 在 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编译器应按照本节所述进行安装.

从源代码构建 NumPy#

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

备注

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

从源代码构建以使用 NumPy#

如果你使用的是conda环境,``pip`` 仍然是你用来调用NumPy源码构建的工具.重要的是,始终在 pip install 命令中使用 --no-build-isolation 标志,以避免针对PyPI上的 numpy 轮子进行构建.为了使其工作,你必须首先将剩余的构建依赖项安装到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
# 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. 安装所有需要的依赖项(build,以及 testdocoptional 依赖项)

  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 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

然后从 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 <子命令> --help 获取详细指导.

IDE 支持与可编辑安装

虽然 spin 接口是我们推荐的工作方式,但它有一个限制:由于自定义安装位置,使用 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 包上工作.头文件、入口点和其他此类内容可能无法从可编辑安装中获得.

自定义构建#

背景信息#