AWS Lambda / Python3无法导入numpy

时间:2017-11-16 21:18:59

标签: python amazon-web-services numpy lambda

我有一个使用sqlalchemy,pandas和numpy的python3.6脚本。为了在AWS Lambda上运行,我采取了以下步骤。

  1. 创建了一个新的,干净的目录
  2. 创建一个新的virtualenv
  3. 创建保留目录(mkdir dist
  4. 安装包pip install sqlalchemy numpy pandas
  5. 导航到包cd env/lib/python3.6/site-packages
  6. 将包打包到保留目录zip -r path/dist/Transfer.zip .
  7. 导航到root
  8. Zip python文件zip -g dist/Transfer.zip my_python.py
  9. 上传到S3
  10. Direct Lambda>配置>代码输入类型>从S3上传文件>我文件的路径
  11. 将处理程序设置为my_python.lambda_handler
  12. 保存并测试
  13. 我总是收到错误

      

    {     " errorMessage":"无法导入模块' my_python'"   }

    将日志作为

      

    无法导入模块' heap_consolidation_lambda':缺少必需的依赖项[' numpy']

    为什么不能看到numpy? Fwiw,numpy是第三个进口,显然它与sqlalchemy和pandas没有任何问题。

1 个答案:

答案 0 :(得分:-1)

经过大量研究,我能够使其与Lambda图层一起使用。

创建或打开干净目录,然后执行以下步骤:

先决条件:确保已启动并运行Docker

  1. 使用以下命令创建 requirements.txt 文件:
pandas==0.23.4
pytz==2018.7
  1. 使用以下命令创建 get_layer_packages.sh 文件:
#!/bin/bash

export PKG_DIR="python"

rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}

docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \
    pip install -r requirements.txt --no-deps -t ${PKG_DIR}
  1. 在同一目录中运行以下命令:
chmod +x get_layer_packages.sh

./get_layer_packages.sh

zip -r pandas.zip .
  1. 将图层上传到S3存储桶。

  2. 通过运行以下命令将层上传到AWS:

aws lambda publish-layer-version --layer-name pandas-layer --description "Description of your layer"
--content S3Bucket*=<bucket name>*,S3Key=*<layer-name>*.zip
--compatible-runtimes python3.6 python3.7
  1. 转到Lambda控制台并以zip文件形式上传代码或使用内联编辑器。

  2. 单击“图层”>“添加图层”>从“兼容”图层中搜索该图层(pandas图层),然后选择版本。

  3. 还添加了AWSLambda-Python36-SciPy1x层,默认情况下该层可用于导入numpy。

Selecting the layer from the console

  1. 测试代码。现在应该可以使用了!!!!

感谢这篇中篇文章https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e