從原始碼建置#
注意
如果您只是想安裝 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 編譯器(通常是
gcc
、g++
和gfortran
)。Python 標頭檔(通常是名為
python3-dev
或python3-devel
的套件)BLAS 和 LAPACK 程式庫。OpenBLAS 是 SciPy 的預設選項;其他變體包括 ATLAS 和 MKL。
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 無法一起使用。您將需要以下其中一組編譯器
Mingw-w64 編譯器(
gcc
、g++
、gfortran
)- 推薦,因為它最容易安裝,而且是我們用於 SciPy 自己的 CI 和二進位檔案的版本MSVC + Intel Fortran (
ifort
)Intel 編譯器(
icc
、ifort
)
與 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 --version
或 ifort --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
然後您需要執行以下操作
建立專用的開發環境(虛擬環境或 conda 環境),
安裝所有需要的依賴項(建置,以及 測試、文件 和 可選 依賴項),
使用我們的
dev.py
開發人員介面建置 SciPy。
步驟 (3) 始終相同,步驟 (1) 和 (2) 在 conda 和虛擬環境之間有所不同
若要建立一個名為 scipy-dev
的開發環境,並安裝所有必需和可選的依賴項,請執行
mamba env create -f environment.yml
mamba activate scipy-dev
注意
有許多工具可以管理虛擬環境,例如 venv
、virtualenv
/virtualenvwrapper
、pyenv
/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 --help
和 python 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 關於可編輯安裝的文件。