从源代码构建#
备注
如果您只想安装 NumPy,我们建议使用二进制文件 - 有关详细信息,请参见 Installation .
从源代码构建 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.一个简单的方法是 open a terminal window ,输入命令:
xcode-select --install
并按照提示操作.Apple Developer Tools 包括 Git,Clang C/C++ 编译器和其他可能需要的开发实用程序.
不要使用 macOS 系统 Python.相反,使用 the python.org installer 或像 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 download site ).即使您使用 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 文件来设置这些变量.
有关详细指导,请参阅 Use the Microsoft C++ toolset from the command line .
与 MSVC 类似,Intel 编译器也设计为与激活脚本 ( Intel\oneAPI\setvars.bat ) 一起使用,您需要在使用的 shell 中运行该脚本. 这使得编译器在路径上可用. 有关详细指导,请参阅 Get Started with the 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 例外,仅当 PATH 上没有其他编译器时,MSVC 才会自动被找到. 您可以使用任何 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 Community Edition 就可以(请参阅 Visual Studio download site ). 确保您已从 here 安装了在 WoA 上构建 NumPy 所需的 Visual Studio 组件.
要使用用于 ARM64 上的 Windows 的 flang 编译器,请从 here 安装最新的 WoA LLVM 工具链.
MSVC 安装程序不会将编译器放在系统路径上,并且安装位置可能会更改. 要查询安装位置,MSVC 带有一个 vswhere.exe 命令行实用程序. 并且要使 C/C++ 编译器在您正在使用的 shell 中可用,您需要为正确的位数和架构运行一个 .bat 文件(例如,对于基于 ARM64 的 CPU,请使用 vcvarsarm64.bat ).
有关详细指导,请参阅 Use the Microsoft C++ toolset from the command line .
与 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 环境尚未在 Windows on ARM64 上得到正式支持.目前的方法是使用 virtualenv 在 Windows on ARM64 上从源代码构建 NumPy.
从源代码构建 NumPy#
如果你只想从源代码安装 NumPy 一次,而不进行任何开发工作,那么推荐的构建和安装方法是使用 pip .否则,推荐使用 conda.
备注
如果你还没有 conda 安装,我们建议使用 Miniforge;但是任何 conda 版本都可以使用.
从源代码构建以使用 NumPy#
如果你正在使用 conda 环境, pip 仍然是你用来调用 NumPy 的 from-source 构建的工具. 始终在 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 stdlib 一部分的 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
python -m venv venv
.\venv\Scripts\activate
备注
使用 BLAS 和 LAPACK 函数构建 NumPy 需要运行时 OpenBLAS 库. 在 Windows on ARM64 中,可以通过为 OpenBLAS 依赖项设置 pkg-config 来完成此操作. 可以在 ` 此处 <http://www.openmathlib.org/OpenBLAS/docs/install/#windows-on-arm>`__ 找到 Windows on ARM64 的 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 包.头文件,入口点和其他此类内容可能无法从可编辑安装中使用.