安裝 scikit-learn 的開發版本#
本節介紹如何安裝 scikit-learn 的 main 分支。這可以透過安裝 nightly build 或從原始碼建置來完成。
安裝 nightly build#
scikit-learn 專案的持續整合伺服器會為最新的 Python 版本,每天建置、測試和上傳 wheel 封裝。
安裝 nightly build 是最快的方法,可以
嘗試將在下一個版本中發布的新功能(即,最近合併到 main 分支的 pull request 中的功能);
檢查您遇到的錯誤是否已在上次發布後修復。
您可以使用來自 anaconda.org
的 PyPI 註冊表中的 scientific-python-nightly-wheels
索引來安裝 scikit-learn 的 nightly build
pip install --pre --extra-index https://pypi.anaconda.org/scientific-python-nightly-wheels/simple scikit-learn
請注意,可能需要先解除安裝 scikit-learn 才能夠安裝 scikit-learn 的 nightly build。
從原始碼建置#
要處理貢獻(錯誤修復、新功能、程式碼或文件改進),必須從原始碼建置。
使用 Git 從 Github 上的 scikit-learn 儲存庫中檢出最新的原始碼。
git clone git@github.com:scikit-learn/scikit-learn.git # add --depth 1 if your connection is slow cd scikit-learn
如果您計劃提交 pull request,您應該從您的 fork 中複製。
安裝最新版本的 Python(撰寫時為 3.9 或更高版本),例如使用 Miniforge3。Miniforge 提供基於 conda 的 Python 發行版和最受歡迎的科學函式庫。
如果您使用 conda 安裝了 Python,我們建議建立一個專用的 conda 環境,其中包含 scikit-learn 的所有建置依賴項(即 NumPy、SciPy、Cython、meson-python 和 Ninja)。
conda create -n sklearn-env -c conda-forge python numpy scipy cython meson-python ninja
不總是必要,但在啟動新建立的 conda 環境之前開啟一個新的提示字元會更安全。
conda activate sklearn-env
conda 的替代方案:您可以選擇使用其他 Python 安裝方式,只要它們夠新(撰寫時為 3.9 或更高版本)。以下是在 Linux 系統的 Python 上建立建置環境的範例。建置依賴項使用
pip
安裝在專用的 virtualenv 中,以避免干擾系統上安裝的其他 Python 程式python3 -m venv sklearn-env source sklearn-env/bin/activate pip install wheel numpy scipy cython meson-python ninja
為您的平台安裝具有 OpenMP 支援的編譯器。請參閱 Windows、macOS、Linux 和 FreeBSD 的說明。
使用 pip 建置專案
pip install --editable . \ --verbose --no-build-isolation \ --config-settings editable-verbose=true
檢查已安裝的 scikit-learn 版本號碼是否以
.dev0
結尾python -c "import sklearn; sklearn.show_versions()"
請參閱開發人員指南 和 有用的 pytest 別名和標誌,以在您選擇的模組上執行測試。
注意
--config-settings editable-verbose=true
是可選的,但建議使用,以避免在匯入 sklearn
時出現意外情況。meson-python
會在執行 import sklearn
時透過重建 sklearn
來實現可編輯安裝。使用建議的設定,當這種情況發生時,您會看到一則訊息,而不是可能在沒有回饋的情況下等待,並想知道為什麼會花這麼長時間。好處:這表示您只需要執行一次 pip install
命令,當匯入 sklearn
時,sklearn
將會自動重建。
請注意,--config-settings
僅在 pip
版本 23.1 或更高版本中支援。若要將 pip
升級到相容版本,請執行 pip install -U pip
。
依賴項#
執行階段依賴項#
Scikit-learn 在建置時和執行時都需要以下依賴項
Python (>= 3.8)、
NumPy (>= 1.19.5)、
SciPy (>= 1.6.0)、
Joblib (>= 1.2.0)、
threadpoolctl (>= 3.1.0)。
建置依賴項#
建置 Scikit-learn 也需要
注意
如果編譯器不支援 OpenMP,建置將會在禁用 OpenMP 功能的情況下完成。不建議這樣做,因為這將強制某些估算器以循序模式執行,而不是利用基於執行緒的並行處理。設定 SKLEARN_FAIL_NO_OPENMP
環境變數(在 cython 化之前)將會在不支援 OpenMP 時強制建置失敗。
自 0.21 版起,scikit-learn 會自動偵測並使用 SciPy 在執行階段使用的線性代數函式庫。因此,scikit-learn 沒有對 BLAS/LAPACK 實作(例如 OpenBlas、Atlas、Blis 或 MKL)的建置依賴項。
測試依賴項#
執行測試需要
pytest >= 7.1.2
某些測試也需要 pandas。
從標籤建置特定版本#
如果您想要建置穩定的版本,您可以 git checkout <VERSION>
以取得該特定版本的程式碼,或從 github 下載該版本的 zip 封存檔。
平台特定說明#
以下是在每個支援的平台上安裝具有 OpenMP 支援的 C/C++ 編譯器,以建置 scikit-learn Cython 擴充功能的說明。
Windows#
首先,下載 Visual Studio 2019 的建置工具安裝程式。
執行下載的 vs_buildtools.exe
檔案,在安裝期間,您需要確保您選取「使用 C++ 的桌面開發」,類似於此螢幕擷取畫面

其次,找出您正在執行 64 位元或 32 位元 Python。建置命令取決於 Python 直譯器的架構。您可以透過在 cmd
或 powershell
主控台中執行以下命令來檢查架構
python -c "import struct; print(struct.calcsize('P') * 8)"
對於 64 位元 Python,請在 cmd
或 Anaconda Prompt(如果您使用 Anaconda)中執行以下命令來設定建置環境
SET DISTUTILS_USE_SDK=1
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
將 x64
替換為 x86
以建置 32 位元 Python。
請注意,上述路徑可能因使用者而異。目的是指向「vcvarsall.bat」檔案,該檔案將在目前的命令提示字元中設定必要的環境變數。
最後,使用此命令提示字元建置 scikit-learn
pip install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
macOS#
macOS 上的預設 C 編譯器,Apple clang(令人困惑地別名為 /usr/bin/gcc
),不直接支援 OpenMP。我們提供兩種替代方案來啟用 OpenMP 支援
使用 conda 安裝
conda-forge::compilers
;或使用 Homebrew 安裝
libomp
,以擴充預設的 Apple clang 編譯器。
對於 Apple Silicon M1 硬體,在撰寫本文時(2021 年 1 月),已知只有以下 conda-forge 方法有效。您可以使用 miniforge 安裝程式來安裝 macos/arm64
發行版的 conda
從 conda-forge 安裝 macOS 編譯器#
如果您使用 conda 套件管理器(版本 >= 4.7),您可以從 conda-forge 頻道安裝 compilers
元套件,它提供基於 llvm 工具鏈並啟用 OpenMP 的 C/C++ 編譯器。
首先安裝 macOS 命令行工具
xcode-select --install
建議使用專用的 conda 環境 從原始碼建置 scikit-learn。
conda create -n sklearn-dev -c conda-forge python numpy scipy cython \
joblib threadpoolctl pytest compilers llvm-openmp meson-python ninja
不總是必要,但在啟動新建立的 conda 環境之前開啟一個新的提示字元會更安全。
conda activate sklearn-dev
make clean
pip install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
注意
如果您收到任何衝突的依賴錯誤訊息,請嘗試註解掉 $HOME/.condarc
檔案中的任何自訂 conda 設定。特別是,已知 channel_priority: strict
指令會導致此設定出現問題。
您可以使用以下命令檢查是否已從 conda forge 正確安裝自訂編譯器
conda list
其中應包含 compilers
和 llvm-openmp
。
編譯器元套件將自動設定自訂環境變數
echo $CC
echo $CXX
echo $CFLAGS
echo $CXXFLAGS
echo $LDFLAGS
它們指向您的 sklearn-dev
conda 環境中的檔案和資料夾(特別是在 bin/、include/ 和 lib/ 子資料夾中)。例如,-L/path/to/conda/envs/sklearn-dev/lib
應出現在 LDFLAGS
中。
在日誌中,您應該看到編譯的擴展名是由 conda 安裝的 clang 和 clang++ 編譯器使用 -fopenmp
命令行標誌建置的。
從 Homebrew 安裝 macOS 編譯器#
另一種解決方案是為 macOS 上預設提供的 clang 編譯器啟用 OpenMP 支援。
首先安裝 macOS 命令行工具
xcode-select --install
安裝適用於 macOS 的 Homebrew 套件管理器。
安裝 LLVM OpenMP 程式庫
brew install libomp
設定以下環境變數
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp"
export CFLAGS="$CFLAGS -I/usr/local/opt/libomp/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/opt/libomp/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp"
最後,以詳細模式建置 scikit-learn(以檢查編譯器命令中是否存在 -fopenmp
標誌)
make clean
pip install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
Linux#
從系統安裝 Linux 編譯器#
從原始碼安裝 scikit-learn 而不使用 conda,需要您安裝 scikit-learn Python 開發標頭,以及一個具有 OpenMP 支援的可用 C/C++ 編譯器(通常是 GCC 工具鏈)。
為基於 Debian 的作業系統(例如 Ubuntu)安裝建置依賴項
sudo apt-get install build-essential python3-dev python3-pip
然後照常進行
pip3 install cython
pip3 install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
Cython 和運行時依賴項(numpy、scipy 和 joblib)的預編譯 wheels 應自動安裝在 $HOME/.local/lib/pythonX.Y/site-packages
中。或者,您可以從 virtualenv 或 conda 環境 執行上述命令,以完全隔離透過系統套件管理器安裝的 Python 套件。當使用隔離環境時,上述命令中的 pip3
應替換為 pip
。
當您的架構無法使用運行時依賴項的預編譯 wheels 時(例如 ARM),您可以安裝系統版本
sudo apt-get install cython3 python3-numpy python3-scipy
在 Red Hat 及其克隆版(例如 CentOS)上,使用以下命令安裝依賴項
sudo yum -y install gcc gcc-c++ python3-devel numpy scipy
從 conda-forge 安裝 Linux 編譯器#
或者,使用 conda 在使用者資料夾中安裝最新版本的 GNU C 編譯器工具鏈 (GCC)
conda create -n sklearn-dev -c conda-forge python numpy scipy cython \
joblib threadpoolctl pytest compilers meson-python ninja
不總是必要,但在啟動新建立的 conda 環境之前開啟一個新的提示字元會更安全。
conda activate sklearn-dev
pip install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
FreeBSD#
FreeBSD 12.0 和 11.2 基本系統中包含的 clang 編譯器不包含 OpenMP 支援。您需要從套件(或 ports)安裝 openmp
程式庫
sudo pkg install openmp
這將在 /usr/local/include
中安裝標頭檔,並在 /usr/local/lib
中安裝 libs。由於預設不會搜尋這些目錄,您可以將環境變數設定為這些位置
export CFLAGS="$CFLAGS -I/usr/local/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lomp"
最後,使用標準命令建置套件
pip install --editable . \
--verbose --no-build-isolation \
--config-settings editable-verbose=true
對於即將推出的 FreeBSD 12.1 和 11.3 版本,OpenMP 將包含在基本系統中,並且不需要這些步驟。