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

流水线生成的Lambda部署包报错:找不到app模块

解决AWS Lambda部署FastAPI时的"No module named 'app'"错误

针对你遇到的手动打包正常、流水线打包报错的问题,以下是针对性的排查和修复方案:

1. 排查流水线打包的根目录结构

手动用7z打包时,你应该是直接将app、dependency1、dependency2作为部署包的根目录内容;而流水线打包可能误将包含这些目录的父文件夹打包进去,导致Lambda运行时app不在Python路径的根目录下。

  • 验证方式:下载流水线生成的部署包,解压后确认根目录下直接存在app文件夹,而非嵌套在某个外层文件夹中。
  • 修复方法:调整流水线的打包命令,确保打包的是目标目录下的内容而非父目录。例如:
    # 进入包含app、dependency1、dependency2的目录
    cd /path/to/target-dir
    # 打包当前目录下的所有内容到部署包
    7z a ../deploy.zip ./*
    

2. 确认依赖的安装位置

流水线安装依赖时,可能未将dependency1、dependency2安装到部署包根目录(与app同级),而是默认安装到了site-packages等子目录,导致Lambda无法识别。

  • 修复方法:在流水线的依赖安装步骤中,指定安装目录为当前目录(即与app同级的位置),命令示例:
    pip install -t . dependency1 dependency2
    
    确保该命令在包含app的目录下执行,这样依赖会直接放在部署包根目录,与app同级。

3. 彻底检查文件权限

虽然你已更新app目录权限,但可能存在遗漏:

  • 确保所有Python文件(包括app/__init__.py、app/main.py、app/routers/*.py)的权限为644,目录权限为755,Lambda运行时需要读取这些文件。
  • 流水线打包时可能未保留文件权限,需在打包命令中添加保留权限的参数。例如用zip命令:
    zip -r -9 --symlinks deploy.zip app/ dependency1/ dependency2/
    
    若用7z,可添加-r -y -mx5参数确保权限被保留。
  • 统一设置权限的命令:
    chmod -R 755 app/ dependency1/ dependency2/
    chmod -R 644 app/*.py app/routers/*.py dependency1/*.py dependency2/*.py
    

4. 验证模块导入与代码正确性

  • 检查app/__init__.py文件,确保文件存在且无语法错误(空文件也可,但不能有错误代码),否则会导致包导入失败。
  • 在流水线中添加预打包验证步骤,本地测试模块导入:
    python -c "import app.main; print('模块导入成功')"
    
    若该命令报错,说明代码本身存在导入问题,需先修复代码。

5. 确认Handler配置与函数定义

  • 再次确认Lambda的Handler配置为app.main.handler,无拼写错误。
  • 检查app/main.py中的Handler函数是否正确用Mangum包装:
    from fastapi import FastAPI
    from mangum import Mangum
    
    app = FastAPI()
    
    # 路由定义...
    
    handler = Mangum(app)
    
    确保handler变量存在且无语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:39