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

AWS Lambda部署报错:无法导入pymongo模块求助排查

问题排查:AWS Lambda无法导入pymongo(版本升级后)

核心问题分析

你遇到的Runtime.ImportModuleError: No module named 'pymongo'报错,结合pymongo版本从3.12升级到4.3.3的背景,大概率是依赖包构建/打包环节的问题,以下是具体排查方向和解决办法:


1. 依赖包的编译环境与Lambda不兼容

pymongo 4.x版本包含针对特定系统架构编译的二进制文件,如果你在Windows/macOS等非Amazon Linux环境下直接安装依赖,打包后的文件无法在Lambda的Amazon Linux运行环境中加载,导致模块找不到。

  • 解决办法:
    使用Lambda兼容的环境安装依赖,比如用Docker模拟官方运行环境:
    # 以Python 3.9为例,根据你的Lambda运行时调整版本
    docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.9:latest /bin/sh -c "pip install pymongo[srv]==4.3.3 -t package/"
    
    或者在本地pip安装时指定目标平台(针对x86架构Lambda):
    pip install pymongo[srv]==4.3.3 -t package/ --platform manylinux2014_x86_64 --only-binary=:all:
    

2. 打包路径结构错误

你的shutil.make_archive命令中base_dir="package/"的设置可能导致压缩包内部结构不符合Lambda要求——Lambda需要依赖包(如pymongo文件夹)和lambda_function.py直接放在zip包的根目录,而不是嵌套在package子文件夹里。

  • 验证方式:解压打包后的zip包,检查是否直接看到lambda_function.py、pymongo、bson等文件/文件夹,而非被包裹在package目录下。
  • 修正打包命令:
    如果你的代码和依赖都在本地package文件夹内,调整命令为:
    shutil.make_archive("package", 'zip', root_dir=path, base_dir=".", verbose=True)
    
    或者直接用shell命令打包(更直观):
    cd package && zip -r ../lambda_package.zip .
    

3. pymongo 4.x的依赖安装不完整

你提到旧的可用包包含pymongo[srv],说明srv连接所需的额外依赖(如dnspython)是运行必需的。pymongo 4.x可能对这些依赖的管理更严格,单纯安装pymongo而非pymongo[srv]会导致依赖缺失。

  • 解决办法:明确安装带srv扩展的pymongo:
    pip install pymongo[srv]==4.3.3 -t package/
    
    安装完成后检查package文件夹,确认存在dnspython、pymongo、bson等依赖目录。

4. 手动部署时的操作疏漏

重新手动部署时,可能存在旧依赖残留或上传错误的zip包:

  • 解决办法:
    • 每次构建前彻底清空package文件夹,避免新旧依赖混合
    • 上传前确认zip包是最新构建的,检查文件大小和内部结构是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:15