设置开发环境#

派生 scikit-learn 存储库#

首先,您需要在 GitHub 上创建一个帐户(如果您还没有),然后单击页面顶部的“Fork”(派生)按钮来派生项目存储库。这将在您的 GitHub 帐户下创建一个代码副本。有关如何派生存储库的更多详细信息,请参阅此指南

以下步骤将解释如何设置派生的 git 存储库的本地克隆,以及如何根据您的操作系统在本地安装 scikit-learn。

设置派生存储库的本地克隆#

将 scikit-learn 存储库的派生版本从 GitHub 帐户克隆到本地磁盘

git clone https://github.com/YourLogin/scikit-learn.git  # add --depth 1 if your connection is slow

并进入该目录

cd scikit-learn

接下来,添加 upstream 远程。这会保存对主 scikit-learn 存储库的引用,您可以使用它来使您的存储库与最新更改同步(您稍后在开发工作流程中会需要它)

git remote add upstream https://github.com/scikit-learn/scikit-learn.git

通过运行以下命令检查 upstreamorigin 远程别名是否配置正确

git remote -v

这应该显示

origin    https://github.com/YourLogin/scikit-learn.git (fetch)
origin    https://github.com/YourLogin/scikit-learn.git (push)
upstream  https://github.com/scikit-learn/scikit-learn.git (fetch)
upstream  https://github.com/scikit-learn/scikit-learn.git (push)

设置专用环境并安装依赖项#

使用像 venvconda 这样的隔离环境,可以独立于任何先前安装的 Python 包来安装特定版本的 scikit-learn 及其依赖项,从而避免与其他包潜在的冲突。

除了必需的 Python 依赖项之外,您还需要一个支持 OpenMP 的 C/C++ 编译器来构建 scikit-learn cython 扩展。下面的特定平台说明描述了如何设置合适的编译器并安装所需的包。

首先,您需要安装一个支持 OpenMP 的编译器。下载 Build Tools for Visual Studio 安装程序并运行下载的 vs_buildtools.exe 文件。在安装过程中,您需要确保选择“使用 C++ 的桌面开发”,类似于此截图

../_images/visual-studio-build-tools-selection.png

接下来,下载并安装适用于您系统的 conda-forge 安装程序 (Miniforge)。Conda-forge 提供了基于 conda 的 Python 分发和最流行的科学库。打开下载的“Miniforge Prompt”并创建一个包含所需 python 包的新 conda 环境

conda create -n sklearn-dev -c conda-forge ^
  python numpy scipy cython meson-python ninja ^
  pytest pytest-cov ruff==0.11.2 mypy numpydoc ^
  joblib threadpoolctl pre-commit

激活新创建的 conda 环境

conda activate sklearn-dev

首先,您需要安装一个支持 OpenMP 的编译器。下载 Build Tools for Visual Studio 安装程序并运行下载的 vs_buildtools.exe 文件。在安装过程中,您需要确保选择“使用 C++ 的桌面开发”,类似于此截图

../_images/visual-studio-build-tools-selection.png

接下来,安装 Python 的 64 位版本(3.11 或更高版本),例如从官方网站下载。

现在创建一个虚拟环境 (venv) 并安装所需的 python 包

python -m venv sklearn-dev
sklearn-dev\Scripts\activate  # activate
pip install wheel numpy scipy cython meson-python ninja ^
  pytest pytest-cov ruff==0.11.2 mypy numpydoc ^
  joblib threadpoolctl pre-commit

macOS 上的默认 C 编译器不支持 OpenMP。要启用从 conda-forge 频道安装 compilers 元包(该元包提供了基于 LLVM 工具链的支持 OpenMP 的 C/C++ 编译器),您首先需要安装 macOS 命令行工具

xcode-select --install

接下来,下载并安装适用于您系统的 conda-forge 安装程序 (Miniforge)。Conda-forge 提供了基于 conda 的 Python 分发和最流行的科学库。创建一个包含所需 python 包的新 conda 环境

conda create -n sklearn-dev -c conda-forge python \
  numpy scipy cython meson-python ninja \
  pytest pytest-cov ruff==0.11.2 mypy numpydoc \
  joblib threadpoolctl compilers llvm-openmp pre-commit

并激活新创建的 conda 环境

conda activate sklearn-dev

macOS 上的默认 C 编译器不支持 OpenMP,因此您首先需要启用 OpenMP 支持。

安装 macOS 命令行工具

xcode-select --install

接下来,使用 Homebrew 安装 LLVM OpenMP 库

brew install libomp

使用 Homebrew (brew install python) 安装最新版本的 Python(3.11 或更高版本),或者从官方网站手动安装包。

现在创建一个虚拟环境 (venv) 并安装所需的 python 包

python -m venv sklearn-dev
source sklearn-dev/bin/activate  # activate
pip install wheel numpy scipy cython meson-python ninja \
  pytest pytest-cov ruff==0.11.2 mypy numpydoc \
  joblib threadpoolctl pre-commit

下载并安装适用于您系统的 conda-forge 安装程序 (Miniforge)。Conda-forge 提供了基于 conda 的 Python 分发和最流行的科学库。创建一个包含所需 python 包的新 conda 环境(包括用于支持 OpenMP 的 C/C++ 编译器的 compilers

conda create -n sklearn-dev -c conda-forge python \
  numpy scipy cython meson-python ninja \
  pytest pytest-cov ruff==0.11.2 mypy numpydoc \
  joblib threadpoolctl compilers pre-commit

并激活新创建的环境

conda activate sklearn-dev

要检查已安装的 Python 版本,请运行

python3 --version

如果您没有 Python 3.11 或更高版本,请从您的发行版的包管理器中安装 python3

接下来,您需要安装构建依赖项,特别是适用于您系统的支持 OpenMP 的 C/C++ 编译器。下面是针对最常用发行版的命令

  • 在基于 debian 的发行版(例如 Ubuntu)上,编译器包含在 build-essential 包中,您还需要 Python 头文件

    sudo apt-get install build-essential python3-dev
    
  • 在基于 redhat 的发行版(例如 CentOS)上,安装用于 C 和 C++ 的 gcc`,以及 Python 头文件

    sudo yum -y install gcc gcc-c++ python3-devel
    
  • 在 Arche Linux 上,Python 头文件已包含在 python 安装中,gcc` 包含 C 和 C++ 所需的编译器

    sudo pacman -S gcc
    

现在创建一个虚拟环境 (venv) 并安装所需的 python 包

python -m venv sklearn-dev
source sklearn-dev/bin/activate  # activate
pip install wheel numpy scipy cython meson-python ninja \
  pytest pytest-cov ruff==0.11.2 mypy numpydoc \
  joblib threadpoolctl pre-commit

安装 scikit-learn 的可编辑版本#

确保您位于 scikit-learn 目录中,并且您的 venv 或 conda sklearn-dev 环境已激活。现在您可以使用 pip 安装 scikit-learn 的可编辑版本

pip install --editable . --verbose --no-build-isolation --config-settings editable-verbose=true
关于 --config-settings 的说明#

--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 版本号以 .dev0 结尾

python -c "import sklearn; sklearn.show_versions()"

现在您应该已经安装了 scikit-learn 并且您的 git 存储库配置正确。

现在运行测试会很有用(尽管需要一些时间)以验证您的安装并了解与您的贡献无关的警告和错误

pytest

有关测试的更多信息,另请参阅拉取请求清单有用的 pytest 别名和标志

设置 pre-commit#

此外,安装 pre-commit hooks,它将在开发工作流程中的每次提交之前自动检查代码的 linting 问题

pre-commit install