跳转至

版本策略

首先,我们认识到从 Pydantic V1 到 V2 的过渡对一些用户来说是痛苦的。对此我们深表歉意 🙏,这是纠正 V1 的设计错误的不幸但必要的步骤。

** 不会再有这么大的破坏性变化了!**

Pydantic V1

V1 的积极开发已经停止,但是在 V2 发布后的一年(2024 年 6 月 30 日)内,V1 将修复关键错误和安全漏洞。

Pydantic V2

在 V2 的小版本中,我们不会故意进行重大更改。

标记为 deprecated 的方法在下次主要版本 V3 发布之前不会被删除。

当然,一些看似安全的更改和错误修复不可避免地会破坏一些用户的代码——必须链接到 XKCD。

以下更改将不被视为重大更改,并且可能会在小版本中出现:

  • 更改在 JSON 模式中使用的 ref 的格式。

  • 更改 msgctxloc 字段的 ValidationError 错误。 type 不会更改——如果您以编程方式解析错误消息,则应使用 type

  • ValidationError 错误添加新键 — 例如,一旦迁移到新的 JSON 解析器,在验证 JSON 时,我们打算向错误添加 line_numbercolumn_number

  • 添加新的 ValidationError 错误。
  • 更改甚至是公共类的 repr

在所有情况下,我们的目标都是尽量减少客户流失,并且只有在能提高用户的 pydantic 质量时才这样做。

Pydantic V3 and beyond

我们预计今后大约每年进行一次重大新版本发布,不过如上所述,与从 V1 到 V2 的过渡相比,任何相关的重大更改应该都很容易修复。

实验功能

在 Pydantic,我们喜欢快速行动和创新!为此,我们可能会在小版本中引入实验性特性。

摘要

"使用文档" 要了解更多关于我们当前实验性功能的信息,请参阅实验性功能文档。

请记住,实验性功能是正在进行中的活跃工作。如果这些功能成功,它们最终将成为 Pydantic 的一部分。如果不成功,这些功能将在很少通知的情况下被删除。在实验阶段,功能的 API 和行为可能不稳定,并且对该功能所做的更改很可能不向后兼容。

命名约定

我们使用以下命名约定之一来表明某个功能是实验性的:

  1. 该功能位于 experimental 模块中。在这种情况下,您可以像这样访问该功能:

    from pydantic.experimental import feature_name
    
  2. 该功能位于主模块中,但前缀为 `experimental_` 。这种情况发生在我们向主 `pydantic` 模块中已有的现有数据结构添加新字段、参数或方法时。
    

具有这些命名约定的新功能可能会发生更改或删除,在将其作为 Pydantic 的永久部分之前,我们正在寻求反馈和建议。有关更多信息,请参阅反馈部分。

导入实验性功能

当你从 experimental 模块导入实验性功能时,你会看到一个警告消息,提示该功能是实验性的。你可以使用以下方法禁用此警告:

import warnings

from pydantic import PydanticExperimentalWarning

warnings.filterwarnings('ignore', category=PydanticExperimentalWarning)

实验特性的生命周期

  1. 新增了一项功能,要么在 experimental 模块中,要么带有 experimental_ 前缀。

  2. 该行为通常在补丁/小版本发布期间进行修改,可能存在 API/行为更改。

  3. 如果该功能成功,我们将通过以下步骤将其推广到 Pydantic:a. 如果它在 experimental 模块中,该功能将被克隆到 Pydantic 的主模块。原始的实验性功能仍保留在 experimental 模块中,但使用时会显示警告。如果该功能已经在 Pydantic 的主模块中,我们创建一个不带 experimental_ 前缀的功能副本,因此该功能同时存在官方名称和实验名称。实验版本会附加弃用警告。b. 在某个时候,实验性功能的代码将被删除,但仍会有该功能的存根,提供带有适当说明的错误消息。c. 作为最后一步,该功能的实验版本将从代码库中完全删除。

如果该功能不成功或不受欢迎,则在几乎没有通知的情况下将其删除。在已弃用功能的位置将保留一个存根,并带有错误消息。

感谢 Streamlit 为我们新实验性功能模式的生命周期和命名约定提供的灵感。

对 Python 版本的支持

当满足以下条件时,Pydantic 将停止对某个 Python 版本的支持:

  • Python 版本已达到生命周期结束(EOL)。

  • 最新次要版本的下载量中,有 5%需要使用该版本。

!!!


本文总阅读量