ITADN
python/typeshed
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

typeshed

Tests Chat at https://gitter.im/python/typing Pull Requests Welcome

关于

Typeshed 包含 Python 标准库和 Python 内置函数的外部类型注解, 以及由这些项目外部人员贡献的第三方包。

这些数据可用于静态分析、类型检查、类型推断 和自动补全等场景。

有关如何使用 typeshed 的信息,请阅读下文。 贡献者 相关信息可在 CONTRIBUTING.md 中找到。 请在提交拉取请求前阅读 该文件;不要向存根所对应的项目报告注解问题,而是在此向 typeshed 报告。

有关存根文件、typeshed 以及 Python 类型系统的更多文档, 也可在 https://typing.readthedocs.io/en/latest/ 找到。

Typeshed 支持 Python 3.10 到 3.14 版本。

使用

如果你只是使用类型检查器(例如 mypypyright 或 PyCharm 内置的类型 检查器),而不是 开发它,则完全不需要与 typeshed 仓库交互: 类型检查器中捆绑了 typeshed 标准库部分的副本。 你正在使用的第三方包和模块的类型存根 可以从 PyPI 安装。例如,如果你正在使用 html5librequests, 你可以使用以下命令安装类型存根

$ pip install types-html5lib types-requests

这些 PyPI 包遵循 类型规范标准 ,并由 typeshed 内部机制 自动发布(每天最多一次)。

类型检查器在安装这些存根包后应能够使用它们。有关更多 详细信息,请参阅您的类型检查器的文档。

第三方存根的包版本控制

第三方存根包的版本号至少由四个部分组成。 存根版本的所有部分,除了最后一部分,都对应于 被存根化的运行时包的版本。例如,如果 types-foo 包的版本为 1.2.0.20240309,这保证 types-foo 包 包含针对 foo==1.2.* 的存根,并针对匹配该说明符的 foo 的最新版本进行了测试。在此示例中,版本号的 最后一个元素(20240309)表示该存根包于 2024 年 3 月 9 日推送。

在 typeshed 中,我们尽量将破坏性变更降至最低。然而,由于 存根的性质,任何版本升级都可能引入可能导致您的 代码无法通过类型检查的变更。

有几种策略可用于指定您正在使用的存根 包的版本,每种策略都有其自身的权衡:

  1. 使用与您用于被存根化包的相同边界。例如, 如果您使用 requests>=2.30.0,<2.32,您可以使用 types-requests>=2.30.0,<2.32。这确保了存根与 您正在使用的包兼容,但由于存根中的变更,存在 破坏类型检查的微小风险。

该策略的另一个风险在于,存根(stubs)往往落后于 被存根化的包。你可能希望将被存根化的包强制固定到某个最低版本, 因为它修复了一个关键 bug,但如果相应更新的存根尚未发布, 你的类型检查结果可能不会完全准确。 2. 将存根固定到已知良好的版本,并时不时更新该固定版本 (手动更新,或使用 dependabot 或 renovate 等工具)。

例如,如果你使用 types-requests==2.31.0.1,你可以确信 升级依赖项不会破坏类型检查。然而,在 你更新固定版本之前,你将错过存根中可能改进类型 检查的改进。该策略也存在风险,即 你正在使用的存根可能与被存根化的包不兼容。 3. 不要固定存根。这是在你更新版本固定时 要求最少工作量的选项,并且具有优势,即每当 存根包发布新版本时,你都会自动受益于改进的存根。然而,它存在 存根与被存根化的包不兼容的风险。

例如,如果该包发布了新的主要版本, 存根可能会在更新被存根化的包之前, 被更新以反映运行时包的新版本。

你也可以根据需要在不同的策略之间切换。例如, 你可以默认使用策略 (1),但当出现难以轻松修复的问题时, 回退到策略 (2)。

_typeshed

typeshed 包含标准库的一部分,即 _typeshed 包。 该包及其子模块包含实用类型,但在运行时不可用。有关如何使用此包的更多信息, 请参阅 stdlib/_typeshed 目录

讨论

如果你在类型检查器中遇到了表明某个库的类型 存根不正确或不完整的行为, 我们想听听你的意见!

我们主要的讨论论坛是该项目的 GitHub issue tracker。 这是开始讨论上述任何内容或 大多数其他与项目相关话题的正确场所。

如果你有关于 Python 类型注解的一般性问题,或者你需要 在 typeshed 之外审查你的类型注解或存根,请前往 我们的讨论论坛。 对于不太正式的讨论,请尝试 typing 聊天室 gitter.im。 一些 typeshed 维护者 几乎总是在线;请随时在那里找到我们,我们很乐意 聊天。 实质性的技术讨论将被引导至 issue tracker。