從原始碼建置#

注意

如果您只是想安裝 SciPy,我們建議使用二進位檔案 - 有關詳細資訊,請參閱安裝

從原始碼建置 SciPy 需要先設定系統層級的依賴項(編譯器、BLAS/LAPACK 程式庫等),然後調用建置程序。建置的目的是為了在本機使用而安裝 SciPy、開發 SciPy 本身,或建置可重新發佈的二進位套件。並且可能需要自訂建置的各個方面。本指南將涵蓋所有這些方面。此外,它還提供有關 SciPy 建置工作原理的背景資訊,並連結到最新的通用 Python 建置與封裝相關文件指南。

系統層級的依賴項#

SciPy 為了提高速度而使用編譯過的程式碼,這表示您需要編譯器和其他一些系統層級(即,非 Python / 非 PyPI)的依賴項,才能在您的系統上建置它。

注意

如果您使用 Conda,您可以跳過本節中的步驟 - 除了為 Windows 安裝編譯器或為 macOS 安裝 Apple 開發者工具。所有其他依賴項將由 mamba env create -f environment.yml 命令自動安裝。

如果您想使用系統 Python 和 pip,您將需要

  • C、C++ 和 Fortran 編譯器(通常是 gccg++gfortran)。

  • Python 標頭檔(通常是名為 python3-devpython3-devel 的套件)

  • BLAS 和 LAPACK 程式庫。OpenBLAS 是 SciPy 的預設選項;其他變體包括 ATLASMKL

  • pkg-config 用於依賴項偵測。

若要安裝 SciPy 建置需求,您可以執行

sudo apt install -y gcc g++ gfortran libopenblas-dev liblapack-dev pkg-config python3-pip python3-dev

或者,您可以執行

sudo apt build-dep scipy

此命令會安裝建置 SciPy 所需的一切,其優點是套件管理器會處理新的依賴項或所需版本的更新。

若要安裝 SciPy 建置需求,您可以執行

sudo dnf install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

或者,您可以執行

sudo dnf builddep scipy

此命令會安裝建置 SciPy 所需的一切,其優點是套件管理器會處理新的依賴項或所需版本的更新。

若要安裝 SciPy 建置需求,您可以執行

sudo yum install gcc-gfortran python3-devel openblas-devel lapack-devel pkgconfig

或者,您可以執行

sudo yum-builddep scipy

此命令會安裝建置 SciPy 所需的一切,其優點是套件管理器會處理新的依賴項或所需版本的更新。

若要安裝 SciPy 建置需求,您可以執行

sudo pacman -S gcc-fortran openblas pkgconf

安裝 Apple 開發者工具。一個簡單的方法是開啟終端機視窗,輸入命令

xcode-select --install

並按照提示操作。Apple 開發者工具包含 Git、Clang C/C++ 編譯器,以及其他可能需要的開發實用工具。

不要使用 macOS 系統 Python。而是使用 python.org 安裝程式或像 Homebrew、MacPorts 或 Fink 這樣的套件管理器來安裝 Python。

您需要的其他系統依賴項是 Fortran 編譯器、BLAS 和 LAPACK 程式庫,以及 pkg-config。使用 Homebrew 安裝它們最容易

brew install gfortran openblas pkg-config

為了讓建置工具找到 OpenBLAS,您必須執行

brew info openblas | grep PKG_CONFIG_PATH

這會給您一個以 export PKG_CONFIG_PATH= 開頭的命令,您必須執行它。

注意

從 SciPy 1.14.0 開始,我們新增了對 Accelerate 程式庫以支援 BLAS 和 LAPACK。它需要 macOS 13.3 或更高版本。若要使用 Accelerate 而不是 OpenBLAS 進行建置,請參閱選擇 BLAS 和 LAPACK 程式庫

建置 SciPy 需要一組相容的 C、C++ 和 Fortran 編譯器。在 Windows 上比在其他平台上更棘手,因為 MSVC 不支援 Fortran,而且 gfortran 和 MSVC 無法一起使用。您將需要以下其中一組編譯器

  1. Mingw-w64 編譯器(gccg++gfortran)- 推薦,因為它最容易安裝,而且是我們用於 SciPy 自己的 CI 和二進位檔案的版本

  2. MSVC + Intel Fortran (ifort)

  3. Intel 編譯器(iccifort

與 macOS 和 Linux 相比,在 Windows 上建置 SciPy 稍微困難一些,因為需要設定這些編譯器。無法像在其他平台上那樣,在命令提示字元上直接呼叫單行指令。

首先,安裝 Microsoft Visual Studio - 2019 Community Edition 或任何更新的版本都可以(請參閱Visual Studio 下載網站)。即使您使用 MinGW-w64 或 Intel 編譯器,也需要這樣做,以確保您擁有 Windows Universal C Runtime(當使用 Mingw-w64 時,Visual Studio 的其他組件不是必需的,如果需要,可以取消選擇以節省磁碟空間)。

MinGW-w64 有多個二進位檔案來源。我們建議使用 RTools 版本,可以使用 Chocolatey 安裝(請參閱 Chocolatey 安裝說明此處

choco install rtools -y --no-progress --force --version=4.0.0.20220206

如果遇到問題,我們建議使用與Windows 的 SciPy GitHub Actions CI 作業中使用的完全相同的版本。

MSVC 安裝程式不會將編譯器放在系統路徑中,而且安裝位置可能會變更。若要查詢安裝位置,MSVC 隨附了 vswhere.exe 命令列公用程式。為了讓 C/C++ 編譯器在您使用的 shell 中可用,您需要為正確的位元數和架構執行 .bat 檔案(例如,對於 64 位元 Intel CPU,請使用 vcvars64.bat)。

如需詳細指南,請參閱從命令列使用 Microsoft C++ 工具組

與 MSVC 類似,Intel 編譯器設計為與啟動腳本 (Intel\oneAPI\setvars.bat) 一起使用,您可以在您使用的 shell 中執行該腳本。這會使編譯器在路徑上可用。如需詳細指南,請參閱Intel® oneAPI HPC Toolkit for Windows 入門指南

注意

編譯器應位於系統路徑上(即,PATH 環境變數應包含可以找到編譯器執行檔的目錄),以便被找到,MSVC 例外,只有在 PATH 上沒有其他編譯器時,才會自動找到 MSVC。您可以使用任何 shell(例如,Powershell、cmd 或 Git Bash)來調用建置。若要檢查是否如此,請嘗試在您使用的 shell 中調用 Fortran 編譯器(例如,gfortran --versionifort --version)。

警告

當使用 conda 環境時,環境建立可能會因為 Fortran 編譯器過舊而失敗。如果發生這種情況,請從 environment.yml 中移除 compilers 條目,然後重試。Fortran 編譯器應按照本節所述安裝。

從原始碼建置 SciPy#

如果您只想從原始碼安裝 SciPy 一次,而不進行任何開發工作,那麼建議的建置和安裝方式是使用 pip。否則,建議使用 conda。

注意

如果您還沒有 conda 安裝,我們建議使用 Miniforge;任何 conda 版本都可以。

從原始碼建置以使用 SciPy#

如果您使用 conda 環境,pip 仍然是您用來調用 SciPy 原始碼建置的工具。務必始終將 --no-build-isolation 標誌用於 pip install 命令,以避免針對來自 PyPI 的 numpy wheel 進行建置。為了使其正常運作,您必須先將剩餘的建置依賴項安裝到 conda 環境中

# Either install all SciPy 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 pythran pybind11 compilers openblas meson-python pkg-config

# To build the latest stable release:
pip install scipy --no-build-isolation --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install . --no-build-isolation
# To build the latest stable release:
pip install scipy --no-binary scipy

# To build a development version, you need a local clone of the SciPy git repository:
git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init
pip install .

從原始碼建置以進行 SciPy 開發#

如果您想從原始碼建置以處理 SciPy 本身,請先複製 SciPy 儲存庫

git clone https://github.com/scipy/scipy.git
cd scipy
git submodule update --init

然後您需要執行以下操作

  1. 建立專用的開發環境(虛擬環境或 conda 環境),

  2. 安裝所有需要的依賴項(建置,以及 測試文件可選 依賴項),

  3. 使用我們的 dev.py 開發人員介面建置 SciPy。

步驟 (3) 始終相同,步驟 (1) 和 (2) 在 conda 和虛擬環境之間有所不同

若要建立一個名為 scipy-dev 的開發環境,並安裝所有必需和可選的依賴項,請執行

mamba env create -f environment.yml
mamba activate scipy-dev

注意

有許多工具可以管理虛擬環境,例如 venvvirtualenv/virtualenvwrapperpyenv/pyenv-virtualenv、Poetry、PDM、Hatch 等。在這裡,我們使用基本的 venv 工具,它是 Python stdlib 的一部分。您可以使用任何其他工具;我們只需要一個已啟用的 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.ps1

然後使用以下命令從 PyPI 安裝 Python 層級的依賴項(請參閱 pyproject.toml

# All dependencies
python -m pip install -r requirements/all.txt

# Alternatively, you can install just the dependencies for certain
# development tasks:

# Build and dev dependencies (for `python dev.py {build, lint, mypy}`)
python -m pip install -r requirements/build.txt -r requirements/dev.txt

# Doc dependencies (for `python dev.py {doc, refguide-check}`)
python -m pip install -r requirements/doc.txt

# Test dependencies (for `python dev.py {test, bench, refguide-check}`)
python -m pip install -r requirements/test.txt

若要在已啟用的開發環境中建置 SciPy,請執行

python dev.py build

這會將 SciPy 安裝在儲存庫內(預設情況下在 build-install 目錄中)。然後您可以執行測試 (python dev.py test)、進入 IPython (python dev.py ipython),或採取其他開發步驟,例如建置 html 文件或執行基準測試。dev.py 介面具有自我說明功能,因此請參閱 python dev.py --helppython dev.py <subcommand> --help 以取得詳細指南。

IDE 支援與可編輯安裝

雖然 dev.py 介面是我們建議的 SciPy 工作方式,但它有一個限制:由於自訂安裝位置,使用 dev.py 安裝的 SciPy 不會在 IDE 中自動識別(例如,透過「執行」按鈕執行腳本,或視覺化設定中斷點)。使用就地建置(或「可編輯安裝」)會更好。

支援可編輯安裝。重要的是要了解,在給定的儲存庫複製中,您可以使用可編輯安裝或 dev.py,但不能同時使用兩者。如果您使用可編輯安裝,則必須直接使用 pytest 和其他開發工具,而不是使用 dev.py

若要使用可編輯安裝,請確保您從乾淨的儲存庫開始(如果您之前使用 dev.py 建置過,請執行 git clean -xdf),並正確設定所有依賴項,如本頁較上方所述。然後執行

# Note: the --no-build-isolation is important! meson-python will
# auto-rebuild each time SciPy is imported by the Python interpreter.
pip install -e . --no-build-isolation

# To run the tests for, e.g., the `scipy.linalg` module:
pytest scipy/linalg

當變更 SciPy 程式碼(包括編譯後的程式碼)時,無需手動重建或重新安裝。當您執行 git clean -xdf(它會移除已建置的擴充模組)時,請記住也要使用 pip uninstall scipy 卸載 SciPy。

有關底層運作方式的更多詳細資訊,請參閱 meson-python 關於可編輯安裝的文件。

自訂建置#

背景資訊#