AWS Lambda无法识别部署包中的python模块

时间:2018-07-31 06:05:53

标签: python amazon-web-services aws-lambda

当我在AWS上将一个(压缩的)部署程序包作为lambda函数上传时,bs4和g​​oogle均出现“ no module named ...”错误。

我使用venv创建了一个虚拟环境,并安装了必需的依赖项 从虚拟环境中运行时,该应用程序运行良好。但是,当我将其压缩并作为lambda函数上传到AWS上时,“ bs4”和(如果出于调试原因而将bs4的导入散列)也出现了“ bs4”错误,并且“谷歌”。我检查了zip文件中的site-packages文件夹,它们似乎在那里。

AWS为什么说没有模块就没有模块?!

我正在Ubuntu上使用python3.6。

1 个答案:

答案 0 :(得分:0)

Lambda需要ZIP和所有库以及您的主要python代码文件在同一文件夹中。 这是我的工作:

  1. 使用以下层次结构创建新的软件包文件夹

    SET "test= 6:07:47,43"

  2. 将Project文件夹复制到temp文件夹

    mkdir -p ./package/tmp/lib

  3. 将python站点软件包从虚拟环境复制到软件包中的temp文件夹中

    cp -a ./$(PROJECT)/. ./package/tmp/

  4. 从temp文件夹中删除所有未使用的库(运行此特定lambda不需要这些库)

    cp -a $(VIRTUAL_ENV)/lib/python2.7/site-packages/. ./package/tmp/
  5. 压缩临时包目录

    rm -rf ./package/tmp/wheel*

这样创建的最终zip文件可以在Lambda上上传了。