Pylance提示requests.packages.urllib3.util.retry导入无法解析但代码正常运行的原因是什么
Pylance提示找不到Retry模块的原因及解决方案
警告产生的核心原因
requests.packages.urllib3是requests库为了兼容多版本urllib3设计的运行时动态映射命名空间,不存在对应的静态文件目录结构。Pylance作为静态类型检查工具,仅会基于实际文件路径做模块检索,无法识别运行时才生效的导入重定向逻辑,因此会抛出找不到模块的错误。- 代码可以正常运行的原因是:requests在初始化阶段会主动将
requests.packages.urllib3路径映射到其实际依赖的urllib3库路径上,Python解释器在运行时可以正常解析这个导入路径,所以Retry相关功能不会受到影响。
解决方法
- 方案1(推荐):改用标准的urllib3导入写法,完全兼容原有功能,同时解决Pylance报错:
from requests import Session from requests.adapters import HTTPAdapter # 直接从urllib3导入,替换原有的requests.packages路径导入 from urllib3.util.retry import Retry requests = Session() retry = Retry(connect=8, backoff_factor=0.5) adapter = HTTPAdapter(max_retries=retry) requests.mount("http://", adapter) requests.mount("https://", adapter)
- 方案2(临时兼容):如果不想修改导入路径,可以在导入行末尾加静态检查忽略标记,让Pylance跳过该行检查:
from requests.packages.urllib3.util.retry import Retry # type: ignore
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

