菜单

构建系统与依赖

相关源文件

本文档涵盖 TheAlgorithms/Python 仓库的依赖管理系统、构建配置和自动化工具基础设施。它解释了如何使用 uv 管理依赖项,通过 pyproject.toml 进行项目配置,以及与 CI/CD 工作流的集成。

有关代码质量强制执行和预提交钩子的信息,请参阅代码质量与预提交钩子。有关 GitHub Actions 工作流的详细信息,请参阅GitHub Actions 工作流

概述

该仓库使用现代 Python 构建系统,其核心是用于依赖管理的 uv、用于项目配置的 pyproject.toml 和用于持续集成的 GitHub Actions。该构建系统支持针对不同用例的多个依赖组,包括测试、文档生成和欧拉项目解决方案验证。

来源:pyproject.toml1-263 uv.lock1-10 requirements.txt1-20 .github/workflows/build.yml1-38

使用 UV 进行依赖管理

项目使用 uv 作为其主要的依赖管理工具,提供快速的依赖解析和安装。uv.lock 文件包含固定版本,以实现跨不同环境的可复现构建。

UV 配置

锁定文件指定了 Python 3.13+ 兼容性,并带有针对不同平台的分辨率标记

来源:uv.lock1-8

安装命令

GitHub 工作流演示了标准的 UV 使用模式

  • uv sync --group=test - 安装主依赖 + 测试依赖
  • uv sync --group=docs - 安装主依赖 + 文档依赖
  • uv sync --group=euler-validate --group=test - 安装多个组
  • uv run pytest - 在 UV 环境中运行命令

来源:.github/workflows/build.yml21 .github/workflows/sphinx.yml34 .github/workflows/project_euler.yml22

项目配置 (pyproject.toml)

pyproject.toml 文件作为中央配置中心,定义了项目元数据、依赖项、工具配置和构建设置。

项目元数据

来源:pyproject.toml1-10

核心依赖项

主要依赖项支持仓库在多个领域的教育算法

类别依赖项目的
网络爬虫beautifulsoup4, httpx, lxml, fake-useragent网络编程示例
科学计算numpy, scipy, sympy, statsmodels数学算法
机器学习scikit-learn, keras, xgboost机器学习算法实现
数据处理pandas, matplotlib, pillow数据分析和可视化
计算机视觉opencv-python, imageio图像处理算法
文档sphinx-pyproject, rich代码文档和输出格式化

来源:pyproject.toml11-31

依赖组

项目将依赖项组织成逻辑组,以适应不同的用例,允许根据需要选择性安装。

来源:pyproject.toml33-47

测试依赖项

测试组包括测试框架和覆盖率工具

  • pytest>=8.3.4 - 具有高级功能的现代测试框架
  • pytest-cov>=6 - 覆盖率报告集成

文档依赖项

docs 组支持基于 Sphinx 的文档生成

  • myst-parser>=4 - Sphinx 的 Markdown 解析
  • sphinx-autoapi>=3.4 - 自动 API 文档生成
  • sphinx-pyproject>=0.3 - Sphinx 与 pyproject.toml 的集成

欧拉验证依赖项

euler-validate 组支持欧拉项目解决方案验证

  • httpx>=0.28.1 - 用于 API 调用的 HTTP 客户端
  • numpy>=2.1.3 - 用于验证的数值计算

来源:pyproject.toml34-47

工具配置

pyproject.toml 文件集中了多个开发工具的配置,确保一致的代码质量和文档标准。

Ruff 配置

Ruff 既是 linter 也是 formatter,拥有广泛的规则选择

来源:pyproject.toml49-125

Pytest 配置

测试配置包括用于分类测试和执行选项的标记

  • 标记: mat_ops 用于矩阵操作测试
  • 选项: --durations=10, --doctest-modules, --showlocals
  • 覆盖率: 覆盖率报告中省略 .env/*project_euler/*

来源:pyproject.toml163-178

Sphinx 配置

文档生成设置指定了源目录和扩展

  • 自动 API 目录: 所有主要算法领域 (25+ 目录)
  • 扩展: autoapi.extension, myst_parser
  • 主题: alabaster 带自定义静态路径
  • MyST 特性: 数学渲染、任务列表、代码围栏

来源:pyproject.toml180-262

构建工作流集成

构建系统通过标准化的 UV 命令和依赖组选择与 GitHub Actions 工作流集成。

来源:.github/workflows/build.yml21-24 .github/workflows/sphinx.yml34-36 .github/workflows/project_euler.yml22-23

遗留 Requirements 文件

仓库保留了一个 requirements.txt 文件,用于兼容旧版工具,其中包含与 pyproject.toml 相同但没有版本指定的核心依赖项。

来源:requirements.txt1-20