Skip to content

版本策略

首先,我们认识到从 Pydantic V1 到 V2 的过渡对部分用户来说已经并将继续是痛苦的。 我们对此深表歉意 🙏,这是纠正 V1 设计错误所必须经历的不幸步骤。

不会再有如此大规模的破坏性变更!

Pydantic V1

V1 的积极开发已经停止,但在 Pydantic V3 发布之前,V1 仍将修复关键的错误和安全漏洞。

Pydantic V2

我们不会在 V2 的次要版本中故意进行破坏性变更。

标记为弃用的功能将不会在下一个主要版本 V3 发布前被移除。

当然,一些看似安全的更改和错误修复不可避免地会破坏某些用户的代码 — obligatory link to xkcd

以下更改不会被视为破坏性变更,并可能在次要版本中发生:

  • 可能导致现有代码破坏的错误修复,前提是该代码依赖于未记录的功能/结构。
  • 更改 JSON Schema 引用的格式。
  • 更改 ValidationError 异常的 msgctxloc 字段。type 字段将保持不变 — 如果您以编程方式解析错误消息,应使用 type 字段。
  • ValidationError 异常添加新键 — 例如,当我们迁移到新的 JSON 解析器后,我们打算在验证 JSON 时为错误添加 line_numbercolumn_number
  • 添加新的 ValidationError 错误。
  • 更改 __repr__ 的行为,即使是公共类也是如此。

在所有情况下,我们的目标都是尽量减少变动,并且只有在能够为用户提高 Pydantic 质量的情况下才会进行更改。

Pydantic V3 及以后

我们预计未来每年会发布一次新的主要版本,但如上所述,与 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. 在某个时间点,实验性功能的代码会被移除,但该功能的存根(stub)仍然存在,它会提供一个带有适当说明的错误消息。

    c. 作为最后一步,该功能的实验版本将从代码库中完全移除。

如果该功能不成功或不受欢迎,它将在没有太多通知的情况下被移除。一个带有错误消息的存根将保留在已弃用功能的位置。

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

对 Python 版本的支持

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

  • 该 Python 版本已达到其 预期寿命终点
  • 最近一个次要版本的下载量中,使用该版本的占比少于 5%。