0

0

Python项目测试依赖声明:pyproject.toml与现代实践

霞舞

霞舞

发布时间:2025-11-14 13:51:11

|

750人浏览过

|

来源于php中文网

原创

Python项目测试依赖声明:pyproject.toml与现代实践

python项目开发中,管理测试依赖曾是令人困惑的挑战。本文将详细阐述当前推荐的最佳实践:利用`pyproject.toml`文件中的`[project.optional-dependencies]`部分声明测试所需的额外依赖。这种方法不仅提供了一种清晰、标准化的依赖管理方式,还完美集成了`pip`和`tox`等工具,确保了本地开发与自动化测试环境的一致性与便捷性,从而遵循了现代python项目的规范。

Python测试依赖管理的挑战与演进

Python生态系统在依赖管理方面一直以其灵活性而闻名,但也因此带来了诸多选择,例如dev-dependencies.txt、setup.py中的extras_require或tests_require、setup.cfg,乃至tox的自定义配置。这种多样性使得开发者难以找到一个明确的“最佳实践”,尤其对于习惯于Maven或Gradle等拥有强意见性依赖管理工具的开发者来说,更是如此。

然而,随着pyproject.toml的引入,Python项目正在逐步走向更加标准化和统一的配置管理。pyproject.toml不仅用于构建系统配置,也为项目元数据和依赖管理提供了现代化的解决方案。

现代Python项目的推荐方法:使用pyproject.toml

当前,将测试依赖项声明为pyproject.toml文件中一个“额外依赖(extra)”被认为是最佳实践。这种方法清晰地将测试所需的包与项目核心运行时依赖区分开来,同时允许按需安装。

配置pyproject.toml声明测试额外依赖

在pyproject.toml文件中,您可以通过[project.optional-dependencies]表来定义各种可选的依赖组。对于测试依赖,通常会创建一个名为test的额外依赖组。

立即学习Python免费学习笔记(深入)”;

以下是一个示例配置:

[project]
name = "your_project_name"
version = "0.1.0"
description = "A short description of your project"
requires-python = ">=3.8"
dependencies = [
    "requests", # 示例:项目的核心运行时依赖
    "fastapi",
]

[project.optional-dependencies]
test = [
    "pytest>=7.0",       # 强大的Python测试框架
    "pytest-cov>=4.0",   # 用于pytest的代码覆盖率插件
    "httpx>=0.23",       # 如果需要测试HTTP客户端,这是一个很好的选择
    "mypy>=0.900",       # 类型检查工具
    "ruff>=0.0.250",     # 快速的Python代码格式化和linter
]

# 其他可选依赖,例如文档构建
# docs = [
#     "sphinx",
#     "sphinx-rtd-theme",
# ]

解释:

  • [project]:定义了项目的基本元数据和核心运行时依赖。
  • [project.optional-dependencies]:此部分专门用于定义可选的依赖组。
  • test = [...]:声明了一个名为test的额外依赖组,其中包含了进行测试和代码质量检查所需的各种工具,如pytest(测试框架)、pytest-cov(代码覆盖率)、httpx(HTTP客户端测试)、mypy(类型检查)和ruff(代码格式化和linter)。

本地开发环境中的安装

一旦在pyproject.toml中声明了测试额外依赖,您就可以在本地开发环境中轻松安装它们。使用pip结合可编辑安装模式(pip install -e .)和额外依赖语法([test])即可实现:

魔珐星云
魔珐星云

无需昂贵GPU,一键解锁超写实/二次元等多风格3D数字人,跨端适配千万级并发的具身智能平台。

下载
pip install -e ".[test]"

命令解释:

  • pip install:标准的pip安装命令。
  • -e .:表示以“可编辑模式”安装当前目录下的包。这意味着您可以直接修改项目源代码,而无需重新安装,更改会立即生效。这对于本地开发非常方便。
  • "[test]":指定安装名为test的额外依赖组。请注意,为了避免shell解释器将[和]视为特殊字符,通常需要用引号将其括起来。

执行此命令后,pytest、pytest-cov以及您在test组中定义的其他所有依赖项都将被安装到您的当前Python环境中(通常是虚拟环境),从而使您能够运行测试。

集成Tox进行自动化测试

对于自动化测试和持续集成(CI/CD)流程,tox是一个强大的工具,它可以在不同的Python版本和依赖配置下运行测试。tox可以完美地与pyproject.toml中的额外依赖集成。

在tox.ini文件中,您可以配置测试环境(testenv)来自动安装test额外依赖:

# tox.ini
[tox]
min_version = 4.0
env_list = py38, py39, py310, py311
isolated_build = True

[testenv]
description = Run tests with pytest
package = skip
extras = test  # 关键配置:告诉tox安装名为'test'的额外依赖
commands =
    pytest --cov=your_project_name --cov-report=xml --cov-report=term-missing
    mypy your_project_name
    ruff check your_project_name
    ruff format your_project_name --check

配置解释:

  • [tox]:Tox的全局配置,例如指定支持的Python版本列表(env_list)。
  • [testenv]:定义了一个名为testenv的通用测试环境。
  • extras = test:这是关键所在。它指示tox在构建此测试环境时,除了安装项目本身的核心依赖外,还要安装在pyproject.toml中test额外依赖组中声明的所有依赖。
  • commands:定义了在此环境中要执行的命令,例如运行pytest、mypy和ruff。

通过这种方式,无论是在本地运行tox还是在CI/CD管道中,tox都能确保测试环境的一致性,自动安装所有必要的测试工具。

优点与注意事项

这种方法的优点

  1. 标准化与现代化: 符合PEP 621和现代Python打包的最佳实践,使项目配置更加清晰和易于理解。
  2. 职责分离: 将测试依赖与核心运行时依赖明确分离,提高了项目的可维护性。
  3. 按需安装: 只有在需要运行测试时才安装测试依赖,减少了非测试环境的依赖负担。
  4. 工具集成: 与pip、tox、PyCharm等开发工具无缝集成,简化了开发工作流。
  5. 清晰性: pyproject.toml作为单一事实来源,明确了所有依赖,避免了分散在多个文件中的混乱。

注意事项

  • pyproject.toml的采用: 确保您的项目已采用pyproject.toml进行配置。如果您的项目仍在使用旧的setup.py或setup.cfg来定义依赖,建议逐步迁移。对于现有项目,像Hatch这样的工具可以帮助您更顺畅地管理pyproject.toml。
  • 版本钉定: 在pyproject.toml中为测试依赖指定版本范围(如pytest>=7.0),以确保测试环境的稳定性。
  • 虚拟环境: 始终在虚拟环境中安装项目及其依赖,以避免全局Python环境的污染。

总结

通过将测试依赖声明在pyproject.toml的[project.optional-dependencies]下的test额外依赖组中,Python项目能够实现一种清晰、标准化且易于管理的测试依赖策略。这种方法不仅简化了本地开发环境的设置,还与自动化测试工具如tox完美集成,是现代Python项目管理测试依赖的首选实践。采用这种方式,您的项目将拥有更强的可维护性、更清晰的结构,并更好地融入Python生态系统的最新发展趋势。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1365

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 13.7万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号