本文档涵盖了仓库的构建系统、依赖管理、代码质量执行以及确保 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-config.yaml 配置了一个全面的质量流水线,该流水线在每次提交前运行。
ruff 工具兼作 linter 和 formatter,具有广泛的规则覆盖。
| 规则类别 | 数量 | 目的 |
|---|---|---|
| 已启用规则 | 50+ | 涵盖风格、bug、复杂性和安全性 |
| 已忽略规则 | 25+ | 出于教育代码的务实排除 |
| 按文件忽略 | 10+ | 复杂算法的特定豁免 |
来自 pyproject.toml 的关键 ruff 设置
来源: .pre-commit-config.yaml1-65 pyproject.toml49-158
主要的 CI 工作流程执行全面的测试并生成仓库制品。
测试执行中的主要排除项
computer_vision/cnn_classification.pydynamic_programming/k_means_clustering_tensorflow.pymachine_learning/lstm/lstm_prediction.pyproject_euler/ (单独测试)quantum/q_fourier_transform.py| 工作流 | 触发器 | 目的 | 关键命令 |
|---|---|---|---|
ruff.yml | 推送到 master/PR | 代码质量检查 | uvx ruff check --output-format=github . |
project_euler.yml | Project Euler 更改 | 验证解决方案 | uv run pytest project_euler/, scripts/validate_solutions.py |
sphinx.yml | 推送到 master 分支 | 生成文档 | uv run sphinx-build -c docs . docs/_build/html |
Project Euler 工作流程包含专门的验证。
来源: .github/workflows/build.yml1-38 .github/workflows/ruff.yml1-17 .github/workflows/project_euler.yml1-36 .github/workflows/sphinx.yml1-51
文档系统使用 Sphinx,并在 pyproject.toml 中配置了现代扩展。
| 扩展 | 目的 | 配置 |
|---|---|---|
autoapi.extension | 自动生成 API 文档 | 涵盖 26 个算法目录 |
myst_parser | Markdown 支持 | 已启用 14 个扩展 |
alabaster | 主题 | 简洁、最小化的文档 |
DIRECTORY.md 文件由 scripts/build_directory_md.py 自动生成,包含:
来源: pyproject.toml180-263 DIRECTORY.md1-50 .github/workflows/sphinx.yml25-51
该仓库使用 pytest,并进行了广泛的配置,用于教育算法测试。
| 测试类型 | 配置 | 目的 |
|---|---|---|
| Doctests | --doctest-modules | 验证文档字符串中的示例用法 |
| 报道 | --cov=. . | 确保全面的测试覆盖率 |
| Markers | mat_ops | 识别矩阵操作测试 |
| 排除项 | Project Euler 已排除 | 单独的验证流水线 |
代码覆盖率配置排除非算法代码
.env/* - 环境文件project_euler/* - 单独的验证系统来源: pyproject.toml34-37 pyproject.toml44-47 pyproject.toml163-178 .github/workflows/build.yml22-35