You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda Python 3.9运行时botocore导入DEPRECATED_SERVICE_NAMES报错求助

解决Lambda Python 3.9中"cannot import name 'DEPRECATED_SERVICE_NAMES' from 'botocore.docs'"的问题

以下是无需手动添加完整botocore包的解决思路:

  • 排查第三方依赖冲突
    大概率是你的代码依赖的某个第三方包(比如awscli、特定AWS SDK封装库)强制要求了与Lambda默认版本不兼容的botocore版本,导致导入时寻找不存在的变量。

    1. 运行pip freeze列出所有依赖包,检查requirements.txt内容
    2. 定位到指定了botocore版本范围的包
    3. 要么将该包更新到兼容Lambda默认botocore的版本,要么用pip install --no-deps [包名]安装,避免它替换Lambda自带的botocore
  • 适配Lambda默认botocore版本
    Lambda的Python 3.9运行时自带的botocore版本可能已更新,DEPRECATED_SERVICE_NAMES这个变量可能被移除或迁移到了其他模块:

    1. 在Lambda函数中添加代码打印当前版本:import botocore; print(botocore.__version__)
    2. 查看对应版本的botocore源码或文档,确认该变量的状态
    3. 如果是你自己的代码导入了这个变量,替换为当前版本的等效实现(比如改用botocore中判断服务废弃的其他API)
  • 清理部署包冗余文件
    本地开发环境的botocore文件夹可能被误打包进部署包,导致Lambda加载本地旧版本,与默认运行时版本冲突:

    1. 打包时排除本地的boto3、botocore目录,例如使用zip命令:zip -r function.zip . -x "*/botocore/*" "*/boto3/*"
    2. 检查部署包内容,确保未包含这两个文件夹
  • 用轻量级层隔离依赖
    如果确实需要特定依赖,不要打包整个botocore,而是将冲突的第三方包单独做成Lambda层,既不会大幅增加体积,又能隔离依赖避免影响Lambda默认的botocore

内容的提问来源于stack exchange,提问作者Elad Hazan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:07:09