0

0

Python 类型存根包(stubs)的维护

舞夢輝影

舞夢輝影

发布时间:2026-02-24 21:08:03

|

448人浏览过

|

来源于php中文网

原创

py.typed 是 stubs 包必需的类型声明文件,缺失会导致 mypy 等工具完全忽略 .pyi 文件;必须置于包根目录、内容为空但不可含 bom 或空格,并在 manifest.in 中显式包含。

python 类型存根包(stubs)的维护

stubs 包里为什么 py.typed 文件不能少

没有 py.typed,mypy 或其他类型检查器根本不会读你的 stubs —— 它不是可选的标记,而是开关。Python 3.8+ 要求显式声明包支持类型提示,否则整个包被当作无类型处理。

常见错误现象:mypy 对你写的 .pyi 文件完全无视,报错仍显示 “No library stubs for module X”;或者 VS Code 的 Pylance 显示所有导入都标红,但跳转定义却能进 stub 文件。

  • 必须放在 stubs 包根目录(如 types-requests/py.typed),不是子目录下
  • 文件内容为空即可,但不能是空格或注释;BOM 字符会导致部分工具识别失败
  • 如果用 setuptools 打包,确保 MANIFEST.in 显式包含它:include types_requests/py.typed

如何让 .pyi 文件和源码版本严格对齐

stubs 不是“写一次管三年”,它必须随上游库小版本更新而同步演进。比如 requests 2.31.0 加了 timeout 参数到 Session.request(),你的 types-requests 就得立刻补上对应签名,否则类型检查会漏掉新行为。

使用场景:CI 中跑类型检查时发现大量 false negative(本该报错却没报),往往是因为 stubs 比运行时库旧了。

立即学习Python免费学习笔记(深入)”;

WiseHome家政预约小程序
WiseHome家政预约小程序

家政服务平台系统包含家用电器安装清洗、搬家、家电维修、管道疏通、月嫂保姆、育儿陪护、上门开锁等多种服务项目,用户可以直接通过家政小程序咨询,在线预约服务类型,同时还设置有知识科普,给用户科普一些清洁保养小技巧,让用户能够足不出户就可以直接预约服务,方便又快捷。本项目使用微信小程序平台进行开发。使用腾讯专门的小程序云开发技术,云资源包含云函数,数据库,带宽,存储空间,定时器等,资源配额价格低廉,无需

下载
  • 别手动维护版本映射表——用 stubgen + 差分比对:先用 stubgen -p requests==2.31.0 生成快照,再和当前 stubs 做 diff
  • setup.pypyproject.toml 里通过 requires-dist 声明兼容范围,例如 "requests >=2.28.0,
  • 避免在 stubs 里写 sys.version_info >= (3, 9) 这类运行时判断——.pyi 是静态契约,条件逻辑应由上游决定

mypyCannot find implementation or library stub for module X 怎么快速定位

这个错误不一定是 stubs 缺失,更可能是路径、命名或安装方式出了问题。mypy 查找 stubs 的优先级是:本地 typings/ 目录 → site-packages 里的 types-* 包 → typeshed 主干。

典型陷阱:你装了 types-urllib3,但项目里 import 的是 urllib3.contrib.socks,而该子模块在 stubs 包里没被覆盖,就会触发此报错。

  • 运行 mypy --show-traceback your_file.py 看具体卡在哪一行 import
  • python -c "import types_urllib3; print(types_urllib3.__file__)" 确认 stubs 是否真被加载
  • 检查包名是否匹配:第三方 stubs 必须叫 types-xxx,且 xxx 是 PyPI 上原包的准确名字(注意连字符 vs 下划线)
  • 若用 Poetry,确认 types-xxx[tool.poetry.dependencies] 下,而非 dev-dependencies —— mypy 默认只扫主依赖

自动生成 stubs 后为什么还得人工修 overload 和泛型

stubgen 能搞定函数签名和字段,但对重载、协议实现、高阶泛型几乎无能为力。比如 functools.cached_property 在不同 Python 版本中返回类型不同,stubgen 只会输出最宽泛的 Any,而正确 stub 应用 @overload 分情况声明。

性能影响:错用泛型约束(如把 TypeVar("T", bound="str") 写成 bound=str)会导致 mypy 类型推导变慢,甚至卡死。

  • 遇到 Union 堆砌或 Any 泛滥的生成结果,优先查 upstream 的 typing 注解或文档中的类型描述
  • Callable[..., T] 要小心:省略号不代表任意参数,而是表示“参数类型未指定”,应尽量还原为具体形参列表
  • 协议(Protocol)相关 stub 必须手写,stubgen 完全不识别 __protocol__ = True 或结构化匹配逻辑

最麻烦的从来不是写 stub,而是验证它有没有悄悄放过本该捕获的类型错误。每次发布前,拿几个典型业务代码片段跑一遍 mypy —— 别信生成结果,信运行时实际行为。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

330

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

773

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

330

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

773

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

中国研究生招生信息网官方网站入口 研招网网页版在线入口
中国研究生招生信息网官方网站入口 研招网网页版在线入口

中国研究生招生信息网入口(https://yz.chsi.com.cn) 此网站是研究生报名入口的唯一官方网站

34

2026.02.24

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

9

2026.02.24

Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址
Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址

本专题系统整理Asianfanfics(AFF)官方网站最新可用入口,涵盖官方平台最新直达地址、官网登录方式及中文访问指引,帮助用户快速、安全地进入AFF平台浏览与使用相关内容。

11

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号