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

如何为Python AWS Synthetic(Canary)上传依赖?导入失败排查

AWS CloudWatch Synthetics Python脚本依赖导入失败问题解决

针对你遇到的问题——将依赖包打包进ZIP上传后,明明模块存在于sys.path路径下却无法导入,结合AWS官方文档和实践经验,给出以下排查和解决步骤:

一、检查依赖包的结构与兼容性

  • 确保依赖包适配CloudWatch Synthetics的运行环境:它基于Lambda的Amazon Linux 2环境,带C扩展的包不能用本地编译版本,必须在兼容环境(比如EC2的Amazon Linux 2实例,或Docker镜像public.ecr.aws/lambda/python:3.9)下编译后再打包。
  • 确认依赖包的目录结构合规:如果是Python包,必须包含__init__.py文件(命名空间包除外),且包目录要直接放在你添加到sys.path的父目录下,而非嵌套多层。

二、修正依赖打包方式

不要手动复制本地site-packages里的依赖,改用pip的--target参数将依赖安装到指定目录,再和脚本一起打包:

# 在空目录下执行,将依赖安装到当前目录的deps文件夹
pip install --target ./deps requests==2.31.0
# 将脚本文件(比如canary.py)和deps目录一起打包
zip -r canary.zip canary.py deps/

三、调整脚本中的路径处理逻辑

  • 确保在import依赖前添加正确的路径到sys.path,且添加的是依赖包的父目录,而非包目录本身:
import sys
import os

# 获取脚本所在的绝对路径
script_path = os.path.abspath(__file__)
script_dir = os.path.dirname(script_path)
# 将依赖所在的deps目录加入sys.path
sys.path.append(os.path.join(script_dir, "deps"))

# 现在可以正常导入依赖
import requests
  • 避免使用相对导入,改用绝对导入,避免环境路径解析问题。

四、排查日志与验证打包结构

  • 查看CloudWatch Synthetics的详细日志,除了ModuleNotFoundError,还要检查是否有依赖内部的导入错误(比如依赖本身缺失子模块)。
  • 手动解压上传的ZIP文件,确认依赖包的位置和脚本中sys.path指向的路径完全匹配,没有层级错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:33:00