AWS Lambda部署Python-Selenium脚本遇模块找不到错误求助
解决AWS Lambda部署Python-Selenium脚本的依赖问题
一、修正Lambda层的目录结构
你当前的依赖层结构不符合Lambda的要求,Lambda要求Python依赖必须放在python/lib/pythonX.X/site-packages/(X.X对应你使用的Lambda运行时Python版本)路径下,而非Lib开头。正确的zip结构应该是:
python.zip └── python └── lib └── python3.8 └── site-packages ├── selenium/ ├── bs4/ ├── firebase_admin/ └── 其他依赖包...
打包时务必保证python文件夹是zip的根目录,不能嵌套在其他文件夹中。
二、安装Linux兼容的依赖包
Windows环境安装的依赖包含Windows平台的编译文件,无法在Lambda的Linux运行时正常工作,必须在Linux环境(或用Docker模拟Lambda运行环境)中安装:
- 拉取对应Python版本的Lambda镜像:
docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.8:latest /bin/bash
- 在容器内将依赖安装到指定目录:
pip install selenium beautifulsoup4 firebase-admin -t python/lib/python3.8/site-packages/
- 退出容器后,将
python文件夹打包成zip,作为依赖层上传至Lambda。
三、配置Chrome与Chromedriver
Lambda运行时默认没有Chrome浏览器,需要部署兼容的无头Chrome和对应版本的Chromedriver:
- 可以直接通过pip安装适配Lambda的包:
pip install chrome-aws-lambda chromedriver-binary-lambda,并将这些包包含在依赖层中。 - 在脚本中配置Chrome无头模式选项:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def lambda_handler(event, context): chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-gpu") # 适配chrome-aws-lambda的路径 driver = webdriver.Chrome(options=chrome_options) # 你的业务逻辑代码 driver.quit()
四、部署验证步骤
- 创建两个Lambda层:一个存放所有Python依赖,一个存放Chrome及Chromedriver(如果手动部署的话)。
- 在Lambda函数配置页面,关联这两个层,确保运行时Python版本与依赖安装的版本完全一致(比如Python3.8)。
- 上传你的脚本文件,检查import语句是否正确(如
import selenium、from bs4 import BeautifulSoup)。
内容的提问来源于stack exchange,提问作者KAPIL BADOKAR
相关产品推荐
相关产品推荐

