当前位置: 首页 > news >正文

python项目中pyproject.toml是做什么用的

pyproject.toml,相当于现代 Python 包管理的“说明书”。它定义了项目的基本信息、依赖库、打包规则、测试配置等。可以把它理解成 这个 A2A SDK 项目的元数据 + 环境说明 + 开发配置。我帮你逐段拆解解读:

  1. [project] —— 项目信息
[project]
name = "a2a-sdk"
dynamic = ["version"]
description = "A2A Python SDK"
readme = "README.md"
license = "Apache-2.0"
authors = [{ name = "Google LLC", email = "googleapis-packages@google.com" }]
requires-python = ">=3.10"
keywords = ["A2A", "A2A SDK", "A2A Protocol", "Agent2Agent", "Agent 2 Agent"]
•	name:项目名是 a2a-sdk,也就是一个“Agent-to-Agent”协议的 Python SDK。
•	dynamic = [“version”]:版本号不是写死的,而是通过 git 标签等方式动态生成。
•	description / readme / license:描述信息、说明文档、开源协议。
•	authors:作者(这里是 Google LLC)。
•	requires-python:最低 Python 版本要求 >=3.10。
•	keywords:关键词,用于 PyPI 搜索时能更容易找到。

  1. dependencies —— 核心依赖
dependencies = ["httpx>=0.28.1","httpx-sse>=0.4.0","pydantic>=2.11.3","protobuf>=5.29.5","google-api-core>=1.26.0",
]

表示 SDK 依赖的库:
• httpx / httpx-sse:异步 HTTP & Server-Sent Events,说明 SDK 会涉及流式通讯。
• pydantic:数据模型与校验。
• protobuf:协议数据格式(Google 的序列化方案)。
• google-api-core:谷歌 API 通用组件。

说明:SDK 本身是基于 网络通信 + 协议数据建模 来实现的。

  1. classifiers —— 分类标签
classifiers = ["Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.13","License :: OSI Approved :: Apache Software License",
]

这是 PyPI 用的标准分类,标注了适用 Python 版本、开源许可证等。

  1. [project.optional-dependencies] —— 可选依赖
[project.optional-dependencies]
http-server = ["fastapi>=0.115.2", "sse-starlette", "starlette"]
postgresql = ["sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0"]
...

这些是可选功能模块:
• http-server:如果要启动 HTTP 服务,可以额外安装 FastAPI + SSE 支持。
• postgresql/mysql/sqlite/sql:不同数据库的异步驱动支持。
• encryption:加密功能(cryptography)。
• grpc:支持 gRPC 协议。
• telemetry:接入 OpenTelemetry 做监控和日志。

👉 用法:pip install a2a-sdk[postgresql] 就会安装带 PostgreSQL 的扩展。

  1. [project.urls] —— 项目链接
[project.urls]
homepage = "https://a2a-protocol.org/"
repository = "https://github.com/a2aproject/a2a-python"

官方主页、仓库地址、文档链接。

  1. [tool.hatch.*] —— 构建配置
[tool.hatch.build.targets.wheel]
packages = ["src/a2a"]
•	使用 hatchling 作为构建工具,指定打包目录是 src/a2a。
•	版本管理用 uv-dynamic-versioning,根据 git 生成 PEP440 风格版本号。
•	sdist 打包时排除 tests/。

  1. [tool.pytest.*] —— 测试配置
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = "test_*.py"

定义了单元测试规则:
• 测试文件在 tests/ 目录。
• 测试函数必须以 test_ 开头。
• 使用 pytest-asyncio 严格模式,保证异步测试不混乱。

  1. [dependency-groups] —— 开发依赖
[dependency-groups]
dev = ["mypy", "pytest", "pytest-asyncio", "ruff", "pre-commit", ...
]

这是开发环境需要的工具:
• mypy / pyright:类型检查。
• pytest / pytest-asyncio:测试框架。
• ruff / autoflake / pyupgrade:代码规范、自动格式化。
• datamodel-code-generator:根据 JSON Schema 生成 pydantic 模型。

说明:项目有比较严格的 类型安全 + 自动化测试 + 代码质量 要求。

  1. [tool.uv.index] —— PyPI 测试源
[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"

这让开发者可以把包先发布到 test PyPI 做测试,再发到正式 PyPI。

  1. [tool.mypy] & [tool.pyright] —— 类型检查
    • pydantic.mypy 插件:增强 Pydantic 的类型推导。
    • pyright:指定哪些文件夹检查,哪些忽略。

总结:怎么解读?
1. 这是一个 pyproject.toml 文件,作用是定义 Python 项目的依赖、构建、测试、发布规则。
2. 说明这个项目是 A2A 协议的 Python SDK,用于 Agent-to-Agent 通信,Google 参与开发。
3. 核心依赖是 httpx、protobuf、pydantic,说明它基于网络通信和数据建模。
4. 可选功能模块支持数据库、加密、gRPC、监控,说明它能扩展为一个完整的分布式 Agent 平台组件。
5. 开发环境配置很完整(mypy/pyright/ruff/pytest),体现了工程化和可维护性。

http://www.xdnf.cn/news/1365355.html

相关文章:

  • SDC命令详解:使用set_timing_derate命令进行约束
  • K8s高可用:Master与候选节点核心解析
  • 基于MalConv的恶意软件检测系统设计与实现
  • 力扣(用队列实现栈)
  • SSH 反向隧道:快速解决服务器网络限制
  • 蜗牛播放器 Android TV:解决大屏观影痛点的利器
  • 【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图
  • 从0死磕全栈第1天:从写一个React的hello world开始
  • leetcode 238 除自身以外数组的乘积
  • PHP学习笔记1
  • 基于MATLAB实现支持向量机(SVM)进行预测备
  • 数据结构青铜到王者第三话---ArrayList与顺序表(1)
  • 【数学·三角函数】两角和差公式 二倍角公式
  • idea官网选择具体版本的下载步骤
  • easy-dataset的安装
  • 【STM32】G030单片机的独立看门狗
  • 不止效率工具:AI 在文化创作中如何重构 “灵感逻辑”?
  • 《拉康精神分析学中的欲望辩证法:能指的拓扑学与主体的解构性重构》
  • 【科研绘图系列】R语言浮游植物生态数据的统计与可视化
  • [系统架构设计师]专业英语(二十二)
  • 系统架构设计师-计算机系统存储管理-页式、段氏、段页式模拟题
  • 探索量子计算的新前沿
  • 【Linux】timerfd和POSIX定时器(timer_create)
  • ASW3642 pin√pin替代TS3DV642方案,可使用原小板只需简单调整外围|ASW3642 HDMI二切一双向切换器方案
  • prepare_model_for_kbit_training()函数解析(56)
  • 解决getLocation获取当前的地理位置,报错:getLocation:fail auth deny及方法封装
  • 抖音多账号运营新范式:巨推AI如何解锁流量矩阵的商业密码
  • Unity中的特殊文件夹
  • Day60 Java面向对象15 abstract关键字详解
  • 物流架构实践:ZKmall开源商城物流接口对接与状态同步