安装 scikit-learn 的开发版本#
本节介绍如何安装 scikit-learn 的 **主分支**。这可以通过安装每日构建版本或从源代码构建来完成。
安装每日构建版本#
scikit-learn 项目的持续集成服务器每天都会构建、测试和上传针对最新 Python 版本的 wheel 包。
安装每日构建版本是快速
尝试将在下一个版本中发布的新功能(即,最近合并到主分支的拉取请求中的功能);
检查自上次发布以来您遇到的错误是否已修复。
您可以使用 scientific-python-nightly-wheels
索引从 anaconda.org
的 PyPI 注册表安装 scikit-learn 的每日构建版本。
pip install --pre --extra-index https://pypi.anaconda.org/scientific-python-nightly-wheels/simple scikit-learn
请注意,可能需要先卸载 scikit-learn 才能安装 scikit-learn 的每日构建版本。
从源代码构建#
从源代码构建是进行贡献(错误修复、新功能、代码或文档改进)所必需的。
使用 Git 从 GitHub 上的 scikit-learn 代码库检出最新的源代码。
git clone [email protected]:scikit-learn/scikit-learn.git # add --depth 1 if your connection is slow cd scikit-learn
如果您计划提交拉取请求,则应从您的 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
使用 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 提示符(如果您使用 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 安装程序 安装 conda 的 macos/arm64
发行版
来自 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)的预编译 wheel 应该会自动安装在 $HOME/.local/lib/pythonX.Y/site-packages
中。或者,您可以从 virtualenv 或 conda 环境 中运行上述命令,以实现与通过系统打包程序安装的 Python 包的完全隔离。使用隔离环境时,上述命令中的 pip3
应替换为 pip
。
当运行时依赖项的预编译 wheel 不适用于您的架构(例如 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
目录。由于默认情况下不会搜索这些目录,您可以将环境变量设置为这些位置。
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 将包含在基本系统中,因此无需执行这些步骤。