從原始碼建置#
注意
如果您只是想安裝 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
用於相依性偵測。只有在執行
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 是最簡單的。否則,您將需要以下其中一組編譯器
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
)。
如果在安裝包含 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 Toolkit。
MinGW-w64 有多個二進位檔案來源。我們建議使用 RTools 版本,可以使用 Chocolatey 安裝(請參閱 Chocolatey 安裝說明 這裡)
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 編譯器應如本節所述安裝。
從原始碼建置 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 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 --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 套件。標頭、入口點和其他此類事物可能無法從可編輯安裝中取得。