搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

pydantic/pydantic

开发工具

用 Python 类型注解做数据校验与解析的基础库,适合需要处理外部数据或配置的后端开发者。

29,327
3,148
Python
MIT
创建于 9 年前

项目介绍

Pydantic Validation 把普通的 Python 3.10+ 类型注解变成运行时的数据校验和解析逻辑。开发者声明一个模型后,Pydantic 会按字段类型做合理转换、套用默认值,并在数据不符合要求时抛出明确的校验错误。README 强调模型应保持为「纯正、规范的 Python」,这样编辑器和 linter 无需特殊语法就能理解模型定义 README 示例。

它主要面向 API 和后端开发者,用于校验请求载荷、配置文件或其他外部数据。模型定义同时可以产出 JSON Schema,因此仓库把 json-schema 列为主题之一 仓库。

Pydantic V2 是一次彻底重写,带来了性能提升,也存在相对 V1 的破坏性变更。V1.10 仍有文档保留,V2 内置了最新版 V1,可以通过 from pydantic import v1 as pydantic_v1 逐步迁移现有代码 V1 与 V2 说明。

快速使用

Pydantic 要求 Python 3.10 或更高版本,可用 pip 或 conda 安装 安装文档:

pip install -U pydantic

下面这个 README 示例展示了校验和类型转换的过程 README 示例:

from datetime import datetime
from typing import Optional
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: list[int] = []

external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)
#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
#> 123

字符串 '123' 被转成整数,时间字符串被解析为 datetime,混合列表变成 [1, 2, 3]。输入不合法时,Pydantic 会抛出校验错误,而不是生成一个字段错乱的对象。如果需要更快的安装方式或可选加速,README 链接的安装文档提供了更多选项 安装选项。

使用约束

  • 当前 V2 系列要求 Python 3.10 及以上 版本徽章信息。
  • 基于 V1 写的代码迁移到 V2 时可能需要改动,因为重写包含破坏性变更;内置的 V1 命名空间是官方给出的迁移路径 V1 与 V2 说明。
  • 项目采用 MIT 许可证 许可证。
  • README 还介绍了同公司的商业产品 Logfire,用于 AI 可观测性;使用 Pydantic 本身并不需要它 Logfire 段落。

HotRepo 点评

该项目在 HotRepo 的 2026-11-06 Python 日榜中出现,记录为 29,311 stars、3,144 forks,当天新增 21 stars,在该榜单位列第 12。已采集的星标曲线过于稀疏,不足以判断趋势;这份快照只能说明这个已经成熟的库当天仍有人关注。

围绕 Pydantic 的讨论更多集中在依赖信任上,而非功能本身。2024 年的一串评论回顾了维护者早前对更换 JSON 依赖的谨慎态度:有评论者把这种警惕与后来的 XZ Utils 事件联系起来,也有人认为这种类比缺乏证据(coldcache,2024-06-05;arp242,2024-06-06)讨论串。另一条回复指出 Pydantic 被大量大型组织使用,因此依赖的可见性很重要(noitpmeder,2024-06-06)评论。对读者来说,这比星数更有参考价值:它是一层被大量项目依赖的校验组件,其依赖选择的影响面不小。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

JSON extra uses orjson instead of ujson (2019)
▲ 69 · 16 条评论 · 2024年6月5日
Pydantic 2.0
▲ 6 · 3 条评论 · 2023年6月30日
Pydantic 2 rewritten in Rust was merged
▲ 4 · 2 条评论 · 2022年11月3日