项目快照:scikit-learn/scikit-learn,约 66,963 个 Star,27,293 个 Fork;最新推送时间 2026-08-16T05:03:27Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/scikit-learn/scikit-learn · https://scikit-learn.org

项目速览(TL;DR)
scikit-learn 是一个面向 Python 的机器学习与数据挖掘模块集合,仓库元信息显示其主要语言为 Python,许可证为 BSD-3-Clause,默认分支为 main。项目资料中的描述为“scikit-learn: machine learning in Python”,因此本文把它定位为可集成到 Python 数据处理与建模流程中的开源软件库,而不是独立运行的服务。
仓库资料显示,该项目要求 Python 3.11 或更高版本,并声明依赖 NumPy、SciPy、joblib、narwhals 与 threadpoolctl。构建系统使用 Meson Python,源码中同时包含 Python 与 C 语言分类信息;但所给资料没有提供具体发布版本、接口清单、性能基准、服务端口或官方服务等级承诺。
- 仓库地址:
https://github.com/scikit-learn/scikit-learn - Star:66963;Fork:27293。
- 默认分支:
main。 - 许可证:BSD-3-Clause。
- Python 运行要求:
>=3.11。 - 项目官网与文档:
https://scikit-learn.org。
定位与目标用户
本节的结论是:该项目适合需要在 Python 程序中使用机器学习和数据挖掘模块的团队,尤其适合能够管理 Python 依赖、构建环境与测试流程的研发人员。它的仓库元数据同时把受众标记为科学研究和开发者,主题标记为软件开发以及科学与工程。
根据 pyproject.toml 的项目描述,scikit-learn 的职责边界是提供 Python 模块,而不是提供独立的在线推理网关、数据采集平台或带有管理界面的应用。资料没有说明它内置数据库、消息队列、HTTP 服务或用户权限系统,因此不能把这些能力归入项目本身。
从发布分类看,项目状态被标记为“Production/Stable”,并列出了 Windows、POSIX、Unix 与 macOS 等操作系统分类,同时列出了 CPython 以及 Python 3.11、3.12、3.13、3.14 分类。这里的分类信息说明了项目声明的目标环境,不等同于本文对每个平台上具体构建结果的独立验证。
核心功能
本节的结论是:资料能够确认的核心能力是机器学习与数据挖掘模块集合,以及围绕这些模块提供的 Python 包构建、测试和文档开发流程。资料没有给出具体估计器、算法名称、输入输出协议或示例数据集,因此以下机制说明只覆盖仓库材料能够核查的范围。
机器学习模块
项目描述直接指向机器学习领域。运行时依赖 NumPy 与 SciPy,说明已声明的运行环境包含数值数组和科学计算依赖;joblib 与 threadpoolctl 也被列入运行时依赖,但所给资料没有逐项说明它们在每个功能模块中的调用时机。
从使用方式上看,用户需要在 Python 进程中安装并导入该包,再由具体 API 接收数据并返回计算结果。由于提供的仓库片段未包含公开 API 列表,不能在此虚构分类器、回归器、聚类器或预处理器的类名、参数签名与返回对象结构;需要核对官网文档中的对应 API 页面。
数据挖掘模块
pyproject.toml 的 description 明确写有 “machine learning and data mining”,因此数据挖掘属于项目声明范围。NumPy 与 SciPy 是运行时依赖,表明这类模块依赖 Python 数值计算生态,但仅凭依赖声明不能推导出数据规模上限、稀疏数据支持范围或单机性能。
触发方式仍是应用代码中的函数或对象调用,而不是通过仓库资料中未出现的命令行服务。输入、输出和异常处理必须以具体模块文档及当前分支源码为准;本文不把未提供的算法矩阵或输入约束写成既定事实。
并行与线程相关依赖
项目把 joblib 和 threadpoolctl 列为运行时依赖,并在测试配置中加入了线程安全相关说明。可以确认仓库维护者对线程安全测试有专门考虑,但不能据此承诺某个算法的并行度、吞吐量、线程模型或无全局解释器锁(GIL)行为。
仓库配置还列出了 thread_unsafe_fixtures,其中包括依赖猴子补丁的 hide_available_pandas、临时路径 tmp_path 和可能改变共享 pyplot 状态的 pyplot。这属于测试隔离信息,不是面向生产调用者的线程配置接口。
系统架构与关键模块
本节的结论是:项目采用 Python 包加本地编译扩展的构建形态,构建链以 Meson Python、Cython、NumPy 和 SciPy 为核心。提供的资料足以确认构建与测试边界,但不足以完整绘制所有算法模块、公共 API 或运行时调用图。
包与源码边界
[tool.pytest.ini_options] 将测试路径设置为 sklearn,而 [tool.pyrefly] 将项目包含范围设置为 sklearn,这表明仓库核心 Python 包目录名称为 sklearn。这两个配置项不能替代完整目录树,因此未在资料中出现的子目录、模块文件和生成文件不作推断。
静态检查配置明确排除了 sklearn/externals,Pyrefly 也将 **/sklearn/externals* 排除在项目检查范围之外。这个事实只能说明工具配置对该路径有特殊处理,不能推断该路径的具体功能或其对外稳定性。
构建链路
项目声明的构建后端是 mesonpy,构建系统要求包括 meson-python>=0.17.1、cython>=3.1.2,<3.2.6、numpy>=2 和 scipy>=1.10.0。其中构建期 NumPy 要求与运行期 NumPy 要求不同,不能把两者简单合并成同一个约束。
项目分类同时列出 C 与 Python,且仓库提供了 [tool.cython-lint] 配置;因此可以核查地说,源码质量流程覆盖 Python、Cython 相关文件和构建工具。具体哪些计算路径编译为 C 扩展、哪些模块由 Cython 生成,所给材料没有逐项列出。
测试与质量门禁
测试使用 pytest 配置,测试路径为 sklearn,并启用了 doctest 选项 NORMALIZE_WHITESPACE ELLIPSIS。测试运行还设置了 --disable-pytest-warnings、--color=yes 与 --import-mode=importlib。
单个测试超时配置为 600 秒,超时退出行为设置为 true。这一配置有助于发现测试挂起或死锁,但它不是生产环境请求超时,也不构成任何运行时 SLA。
依赖与运行环境
本节的结论是:使用者首先需要满足 Python 版本要求,再准备运行时依赖;如果从源码构建,还必须额外满足构建系统依赖。依赖版本范围均来自所给 pyproject.toml,未提供的操作系统库、编译器版本和硬件要求应留白。
| 依赖类别 | 名称 | 版本约束 | 资料中的作用或位置 |
|---|---|---|---|
| 运行时 | numpy | >=1.24.1 | project.dependencies 中声明的运行时依赖 |
| 运行时 | scipy | >=1.10.0 | project.dependencies 中声明的运行时依赖 |
| 运行时 | joblib | >=1.4.0 | project.dependencies 中声明的运行时依赖 |
| 运行时 | narwhals | >=2.0.1 | project.dependencies 中声明的运行时依赖 |
| 运行时 | threadpoolctl | >=3.5.0 | project.dependencies 中声明的运行时依赖 |
| 构建系统 | meson-python | >=0.17.1 | build-system.requires 中声明的构建依赖 |
| 构建系统 | cython | >=3.1.2,<3.2.6 | build-system.requires 中声明的构建依赖 |
| 解释器 | Python | >=3.11 | project.requires-python 的运行环境要求 |
资料没有提供锁定文件,因此不能给出一组经过仓库验证的完整解析后依赖树。构建时还声明了 NumPy >=2,这与运行时声明的 >=1.24.1 是不同上下文的配置,部署前应分别检查。
快速开始:安装、运行与验证
本节给出一个仅在本地或测试环境执行的最小闭环:从仓库安装,再导入包,最后检查导入是否成功。由于资料未提供固定发布版本、官方示例代码或具体模型 API,示例不虚构模型类、数据集和预测结果。
安装
下面的命令使用当前仓库的 pyproject.toml 进行本地安装。它依赖 Python 3.11 或更高版本,并会按照项目声明处理构建后端与依赖;建议在隔离的测试环境中执行。
git clone https://github.com/scikit-learn/scikit-learn.git
cd scikit-learn
python -m pip install .上述命令中的 Git 仓库地址来自项目资料,pip install . 的构建入口依据仓库声明的 PEP 517 构建配置执行。资料没有提供 Git 客户端版本、虚拟环境工具或网络镜像配置,因此不补充这些未核查参数。
运行与验证
导入验证只检查包能否被当前 Python 解释器加载,不代表任何算法功能、性能或二进制扩展都已经在目标业务环境中完整验证。命令使用公开包名 sklearn,该包路径由 pytest 与 Pyrefly 配置共同印证。
import sklearn
print("scikit-learn import succeeded")
print(sklearn.__name__)如果命令输出导入成功信息和包名,说明当前解释器至少完成了基本导入。若出现依赖缺失、构建失败或平台相关错误,应保留完整错误文本,并结合 Python 版本、操作系统分类和构建依赖逐项核对;不要把导入成功直接等同于生产就绪。
配置说明
本节的结论是:仓库配置主要服务于打包、测试、静态检查、类型检查、Cython 检查和变更日志生成,而不是一个面向业务运行时的环境变量配置文件。下表仅列出资料中真实出现的字段,默认值按仓库文本记录;没有默认值的地方明确标注“未提供”。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
project.requires-python |
字符串 | >=3.11 |
声明项目支持的 Python 版本下限 |
project.dependencies |
字符串数组 | 未提供单一默认值;包含 5 项声明 | 声明运行时依赖及其版本约束 |
build-system.build-backend |
字符串 | mesonpy |
指定 Python 构建后端 |
build-system.requires |
字符串数组 | 未提供单一默认值;包含 4 项声明 | 指定构建系统执行所需依赖 |
tool.pytest.ini_options.testpaths |
字符串 | sklearn |
指定 pytest 测试路径 |
tool.pytest.ini_options.faulthandler_timeout |
整数 | 600 |
配置测试挂起检测的超时秒数 |
tool.pytest.ini_options.faulthandler_exit_on_timeout |
布尔值 | true |
测试超时后退出测试会话 |
tool.ruff.line-length |
整数 | 88 |
设置 Ruff 的行长度规则 |
tool.pyrefly.preset |
字符串 | legacy |
指定 Pyrefly 检查预设 |
tool.spin.package |
字符串 | sklearn |
指定 Spin 操作的包名 |
资料没有提供 .env.example、服务端口、生产环境变量、数据库连接字段或 Docker Compose 配置。部署脚本如果需要这些信息,应以最新仓库文件和官网文档为准,不应从本表推导出不存在的配置接口。
进阶用法
本节的结论是:进阶工作重点在源码构建、测试、文档和变更管理,而不是修改某个未提供的运行时配置。仓库已经在 [tool.spin.commands] 中声明了 Build 与 Documentation 两组操作,可作为维护者工作流的线索。
源码构建与测试工作流
Build 命令配置包含 spin.cmds.pip.install、spin.cmds.meson.test 和 .spin/cmds.py:clean。这些内容说明项目使用 Spin 编排安装、Meson 测试和清理动作,但资料没有给出 Spin 命令行入口的完整调用格式,因此不把未经资料确认的命令写成可复制指令。
如果需要修改源码,建议先区分三类验证:Python 代码的测试与静态检查、Cython 相关文件的检查、以及 Meson 构建和测试。项目还将 examples、doc、benchmarks 和若干生成目录配置为特殊路径,贡献者应阅读当前仓库贡献文档后再决定哪些检查适用于改动。
文档与变更日志
Documentation 操作配置为 spin.cmds.meson.docs,这表明文档构建与 Meson 相关流程存在关联。变更日志由 Towncrier 配置管理,目标文件是 doc/whats_new/v1.10.rst,上游变更片段目录为 doc/whats_new/upcoming_changes。
变更日志机器人要求核验 PR 编号,并使用 No Changelog Needed 标签表示无需生成变更条目。资料没有给出当前发布版本是否为 1.10,也没有提供某项功能对应的 PR 编号,因此不将该路径解释为当前版本号声明。
可观测性与运维
本节的结论是:给定资料只描述了测试阶段的故障发现能力,没有提供生产监控、日志格式、指标名称、追踪协议或健康检查端点。scikit-learn 作为 Python 包运行时被嵌入调用方进程,运维责任通常需要由集成它的应用承担;“通常”属于经验性判断,不能替代项目资料中的承诺。
可核查的测试观测配置包括 faulthandler_timeout = 600 和 faulthandler_exit_on_timeout = true。它们用于测试会话在长时间挂起时输出线程回溯并终止会话,不能直接用于限制业务请求,也不能证明生产环境具备故障自动恢复能力。
仓库元信息没有提供日志采集、指标导出、审计事件、内存配额、CPU 配额、并发上限或 SLA。若应用需要这些能力,应在调用方建立进程级日志、资源监控和任务超时策略,并明确区分应用层指标与库内部行为。
安全与合规边界
本节的结论是:资料将 scikit-learn 定义为机器学习与数据挖掘模块集合,没有显示其提供账号自动化、渗透、支付或绕过检测能力。安全重点应放在训练数据、模型输入输出、依赖供应链和运行环境隔离,而不是把项目误当成安全产品。
- 仅在获得授权的本地、测试或生产环境中处理数据和运行模型;不要将库调用用于未授权目标的数据获取或分析。
- 训练数据可能包含个人信息、商业机密或受监管内容。资料未提供数据脱敏、保留期限、访问控制或合规认证,应由使用方依据适用法律和组织制度制定控制措施。
- 安装源码时应核对仓库来源、分支和依赖解析结果。资料只给出依赖名称与版本约束,没有提供安全公告清单、CVE 清单或供应链保证。
- 将不可信输入与模型执行环境隔离,并限制文件、网络和进程权限;这些是部署方的隔离要求,不是仓库资料中已声明的沙箱功能。
- 对模型输出进行业务层校验,不应因为底层库完成计算就跳过权限、隐私、偏差和人工复核流程。
资料没有声明 scikit-learn 的特定行业认证、合规范围、漏洞响应时限或安全 SLA。相关判断必须以仓库安全政策、许可证文件、组织审计结果和适用法规为准。
许可证与商用条款
本节的结论是:仓库元数据明确声明许可证为 BSD-3-Clause,并将 COPYING 作为许可证文件;是否能满足某个商业发行、专利、出口或行业合规场景,仍应逐条核对仓库中的 LICENSE 或 COPYING 原文。
BSD-3-Clause 通常被视为允许商用的宽松许可证,但本文不替代法律意见。根据仓库给出的许可证字段,分发项目或其衍生集成时,至少应保留适用的版权与许可证声明,并遵守该许可证对再分发和背书表述的要求;具体义务以仓库 LICENSE 或 COPYING 为准。
仓库资料没有提供商业支持、赔偿、保证、SLA 或专利许可的额外承诺。企业在引入前应记录所使用的仓库提交、依赖解析结果和许可证清单,并由法务或合规人员审核分发方式。
局限性与已知限制
本节的结论是:当前资料足以说明项目身份、构建约束和质量工具,但不足以支持对具体算法覆盖率、延迟、数据规模、可用性或生产性能作结论。以下限制既包括仓库资料未覆盖的信息,也包括集成时需要额外验证的边界。
- 未提供具体发布版本号,因此不能锁定文章对应的 API 版本或复现一个确定的依赖解析结果。
- 未提供性能基准、硬件规格、数据规模、吞吐量、延迟分位数或并发上限,不能据此进行容量规划。
- 未提供完整目录树和公共 API 列表,不能仅凭配置文件确认所有算法、模块和类的稳定性。
- 要求 Python 3.11 或更高版本;低于该版本的兼容性不在项目声明范围内。
- 构建链包含 Meson Python、Cython、NumPy 和 SciPy,源码安装的构建复杂度不能按纯 Python 包简单估计。
- 测试配置中的 600 秒超时只针对测试会话,不是业务请求或批处理任务的执行时限。
- 资料没有提供预训练模型、在线服务、模型注册、数据版本管理或监控组件说明。
如果需要确认某个模型、输入格式、稀疏矩阵行为、缺失值处理方式或平台兼容性,官方仓库未提供该信息,建议以最新 README、官网文档和对应源码测试为准。
适合谁
本节给出可操作的选择信号:当团队的主要需求是把机器学习或数据挖掘能力嵌入 Python 程序,并且能够接受本地依赖与构建管理时,scikit-learn 值得进入评估范围。以下判断基于仓库描述、依赖和分类信息;超出资料的部分属于根据本文作者的经验判断。
- 团队已有 Python 3.11 或更高版本的开发、测试和部署链路,能够统一解释器与依赖安装方式。
- 任务需要在 Python 进程中调用机器学习或数据挖掘模块,而不是购买一个带运维控制台的独立 SaaS 服务。
- 团队能够维护 NumPy、SciPy、joblib、narwhals、threadpoolctl 等运行时依赖,并处理源码构建时的 Meson Python 与 Cython 约束。
- 项目需要在科学研究、软件开发或科学工程场景中集成可测试的 Python 包,且愿意阅读官方文档核对具体 API。
- 团队能够自行补充日志、资源限制、数据治理和模型发布流程,而不是把这些能力期待为库内置功能。
不适合谁
本节的结论是:如果需求超出 Python 库的职责边界,或者环境无法满足已声明的解释器与构建条件,就不应仅凭项目知名度直接采用。以下信号出现三项中的任意一项时,都应先进行替代方案和集成成本评估;替代方案的具体名称不在所给资料中,因此不作虚构比较。
- 运行环境必须使用 Python 3.10 或更低版本,且组织无法升级到项目声明的 Python 3.11 或更高版本。
- 团队需要现成的 HTTP 推理服务、用户权限、模型注册、数据仓库、任务调度或 SLA,但资料没有显示项目提供这些组件。
- 业务要求由库直接保证特定吞吐量、延迟、并发级别或数据规模,而资料没有任何 Benchmark 或容量承诺。
- 组织禁止引入 Cython、Meson Python 或本地扩展构建流程,同时又无法使用已验证的二进制分发方式。
- 合规要求供应商提供明确的安全认证、漏洞响应时限或合同赔偿条款,而项目资料没有提供此类商业承诺。
在场景 A,即 Python 应用内的机器学习和数据挖掘模块集成,可以继续评估 scikit-learn;在场景 B,即必须直接获得未在资料中声明的服务治理或商业保障,应选择能够明确提供这些能力的替代方案,并单独完成合规审查。
常见问题与排查(FAQ / Troubleshooting)
本节的结论是:排查应先围绕解释器版本、运行时依赖、源码构建链和测试配置展开。资料没有提供错误码或官方故障树,因此下面只给出与现有配置直接对应的检查路径。
为什么安装时提示 Python 版本不满足
项目声明 requires-python = ">=3.11"。先检查当前解释器版本,再使用满足要求的 Python 环境重试;如果组织无法升级,资料没有提供兼容性补丁或旧版本方案,建议以最新 README 为准。
为什么源码安装需要额外构建依赖
仓库的构建后端是 mesonpy,构建系统要求包含 Meson Python、Cython、NumPy 和 SciPy。源码安装失败时,应优先保留构建日志,确认这些约束是否被满足,而不要只检查运行时依赖。
为什么运行时依赖和构建时依赖的 NumPy 约束不同
运行时依赖声明为 numpy>=1.24.1,构建系统声明为 numpy>=2。这两个字段分别属于 project.dependencies 和 build-system.requires,构建隔离环境与安装后的运行环境应分开核对。
测试挂起时应看什么
pytest 配置设置了 600 秒的 faulthandler_timeout,并将 faulthandler_exit_on_timeout 设为 true。应查看超时输出的线程回溯,并关注仓库列出的线程不安全 fixture;不要把测试超时当成库 API 的业务超时设置。
导入成功是否代表全部功能可用
不是。最小导入示例只验证包可以被解释器加载,不能覆盖编译扩展、具体算法、平台差异、数据类型和业务数据。进一步验证应使用官方文档和仓库测试中的对应场景,资料未提供完整测试命令和功能清单,因此不补写固定测试结论。
在哪里查看版本、发布说明和问题跟踪
项目配置提供了 release notes、issue tracker、下载页和官网地址。具体当前版本号、变更内容和未解决问题应以这些官方页面的实时内容为准,本文不从动态页面推断版本。
维护与贡献注意事项
本节的结论是:贡献者需要同时遵守代码风格、类型检查、Cython 检查、测试和变更日志约束。仓库配置已经明确了若干例外路径,直接套用统一规则可能造成误报。
- Ruff 行长度为 88,并启用了
E501、W、I、CPY001、PGH、RUF和TID252等规则集合。 - 相对导入被禁止,配置为
ban-relative-imports = "all"。 - 版权检查要求匹配包含 scikit-learn developers 与 BSD-3-Clause 标识的版权头;测试、文档、构建工具等路径配置了例外。
- Pyrefly 项目包含范围为
sklearn,排除**/sklearn/externals*,并忽略缺失导入。 - Cython 检查对部分生成文件和特定路径设置了排除项,不能把所有
.pyx文件按同一规则处理。 - 变更日志通过 Towncrier 组织,预期片段路径为
doc/whats_new/upcoming_changes下的版本相关文件。
贡献者应在实际提交前阅读当前分支的贡献指南、CI 配置和测试说明。提供的片段没有包含 CI 工作流全文,因此不能列出未核查的流水线名称或必需命令。
项目地址与资源
以下链接均来自项目元数据或 pyproject.toml 中的官方地址字段,可用于获取源码、文档、发行文件、问题跟踪和变更记录。
- scikit-learn GitHub 仓库
- scikit-learn 官网与文档
- scikit-learn PyPI 下载页面
- scikit-learn 问题跟踪页面
- scikit-learn 发布说明
“scikit-learn: machine learning in Python”
来源:README



