菜单

仓库基础设施与CI/CD

相关源文件

本文档涵盖了仓库的构建系统、依赖管理、代码质量执行以及确保 TheAlgorithms/Python 代码库代码一致性和可靠性的自动化工作流程。有关核心算法本身的信息,请参阅 核心算法。有关 Project Euler 的特定基础设施,请参阅 Project Euler 解决方案

概述

该仓库采用了现代 Python 开发堆栈,具有自动化的质量门控、全面的测试和持续集成。基础设施围绕四个主要支柱构建:通过 uv 进行依赖管理,通过 pre-commit 钩子和 ruff 执行代码质量,使用 pytest 进行全面测试,以及使用 Sphinx 进行自动化文档生成。

来源: pyproject.toml1-263 .pre-commit-config.yaml1-65 .github/workflows/build.yml1-38 .github/workflows/ruff.yml1-17 .github/workflows/project_euler.yml1-36 .github/workflows/sphinx.yml1-51

构建系统与依赖

该仓库采用现代 Python 打包配置,以 pyproject.toml 作为中心配置文件,并使用 uv 进行快速可靠的依赖管理。

项目配置

pyproject.toml 文件定义了项目元数据、依赖项和工具配置。

配置节目的关键工具
[project]基本元数据和运行时依赖项Python 3.13+, numpy, pandas, scikit-learn
[dependency-groups]可选依赖项组test, docs, euler-validate
[tool.ruff]代码质量和 linting 规则支持 50 多个规则类别
[tool.pytest.ini_options]测试配置doctest, coverage, markers
[tool.sphinx-pyproject]文档生成autoapi, myst-parser 扩展

依赖管理

该仓库维护三个依赖项规范:

  • 核心依赖项:列在 pyproject.toml 的 dependencies 数组中,用于运行时需求。
  • 可选组:测试、文档和验证依赖项分在单独的组中。
  • 旧版支持requirements.txt 用于向后兼容。

来源: pyproject.toml1-31 pyproject.toml33-47 requirements.txt1-20 uv.lock1-10

代码质量与预提交钩子

Pre-commit 钩子流水线

.pre-commit-config.yaml 配置了一个全面的质量流水线,该流水线在每次提交前运行。

Ruff 配置

ruff 工具兼作 linter 和 formatter,具有广泛的规则覆盖。

规则类别数量目的
已启用规则50+涵盖风格、bug、复杂性和安全性
已忽略规则25+出于教育代码的务实排除
按文件忽略10+复杂算法的特定豁免

来自 pyproject.toml 的关键 ruff 设置

  • 目标版本:Python 3.13
  • 最大复杂度:17 (McCabe)
  • 最大参数:每个函数 10 个
  • 最大语句:每个函数 88 个

来源: .pre-commit-config.yaml1-65 pyproject.toml49-158

GitHub Actions 工作流

主要 CI 流水线 (build.yml)

主要的 CI 工作流程执行全面的测试并生成仓库制品。

测试执行中的主要排除项

  • computer_vision/cnn_classification.py
  • dynamic_programming/k_means_clustering_tensorflow.py
  • machine_learning/lstm/lstm_prediction.py
  • project_euler/ (单独测试)
  • quantum/q_fourier_transform.py

专用工作流程

工作流触发器目的关键命令
ruff.yml推送到 master/PR代码质量检查uvx ruff check --output-format=github .
project_euler.ymlProject Euler 更改验证解决方案uv run pytest project_euler/, scripts/validate_solutions.py
sphinx.yml推送到 master 分支生成文档uv run sphinx-build -c docs . docs/_build/html

Project Euler 验证

Project Euler 工作流程包含专门的验证。

来源: .github/workflows/build.yml1-38 .github/workflows/ruff.yml1-17 .github/workflows/project_euler.yml1-36 .github/workflows/sphinx.yml1-51

文档基础设施

Sphinx 配置

文档系统使用 Sphinx,并在 pyproject.toml 中配置了现代扩展。

扩展目的配置
autoapi.extension自动生成 API 文档涵盖 26 个算法目录
myst_parserMarkdown 支持已启用 14 个扩展
alabaster主题简洁、最小化的文档

自动生成的目录列表

DIRECTORY.md 文件由 scripts/build_directory_md.py 自动生成,包含:

  • 所有算法实现的层次化列表
  • 直接指向源代码文件的链接
  • 按算法类别(音频滤镜、回溯法等)组织

GitHub Pages 部署

来源: pyproject.toml180-263 DIRECTORY.md1-50 .github/workflows/sphinx.yml25-51

测试与验证框架

测试配置

该仓库使用 pytest,并进行了广泛的配置,用于教育算法测试。

测试类型配置目的
Doctests--doctest-modules验证文档字符串中的示例用法
报道--cov=. .确保全面的测试覆盖率
Markersmat_ops识别矩阵操作测试
排除项Project Euler 已排除单独的验证流水线

覆盖率报告

代码覆盖率配置排除非算法代码

  • .env/* - 环境文件
  • project_euler/* - 单独的验证系统

用于测试的依赖项组

来源: pyproject.toml34-37 pyproject.toml44-47 pyproject.toml163-178 .github/workflows/build.yml22-35