在Mac上安装numpy以在AWS Lambda

时间:2017-03-01 14:51:22

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

有没有办法在Mac上安装numpy,以便在上传到AWS Lambda时能够正常运行?我尝试了各种不同的方法,包括使用不同的pip版本,使用easy_install,然后使用this post,但它们似乎都不起作用。我也尝试克隆git repo并从那里开始构建,但我也无法让它工作(虽然我不确定我是否在这之后复制了正确的文件)

我得到的错误是:

  

无法导入模块'lambda_function':导入多阵列   numpy扩展模块失败。你最有可能尝试导入一个   numpy的构建失败了。如果您正在使用numpy git repo,请尝试   git clean -xdf(删除所有不受版本控制的文件)。   否则重新安装numpy。

受到this post的启发,我能够在Linux环境中pip install numpy并让它在Lambda上工作。

所以我的问题是:是否可以在Mac上安装numpy以便它可以在AWS Lambda上运行?

环境:MacBook Pro,MacOS 10.12.2,默认python版本2.7.10

我一直在对Lambda上的hello-world-python示例进行一些细微修改:

from __future__ import print_function
import numpy

def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])

(更新)扩展问题:为什么有些软件包可以运行而其他软件包没有?

4 个答案:

答案 0 :(得分:2)

更新:现在首选的方法是将AWS提供的Lambda层用于NumPy / SciPy,这非常容易做到。

在控制台中,选择功能,然后在“设计”部分下单击“层”。然后单击“添加层”,然后在“ AWS提供的”下选择“ AWSLambda-Python37-SciPy1x”(或与您所使用的Python版本等效的其他选项)。

然后,您可以毫无问题地将numpy,scipy等无缝导入到您的代码中。

答案 1 :(得分:0)

在@MarkB的评论的基础上,不可能在Mac上构建numpy以在AWS Lambda上使用。那么为什么有些软件包可以工作而其他软件包没有呢?

Python扩展模块,如Mark Nunnikhoven的博客here所述,是

  

用C或C ++编写,可以扩展python或调用C或C ++   库。

由于这些模块是根据您所在的系统编译的,而AWS Lambda是Linux环境,因此您需要在Linux环境中安装任何扩展模块。

答案 2 :(得分:0)

我遇到了同样的问题,并按照以下建议轻松解决了这个问题:

https://serverless.com/blog/serverless-python-packaging/

请注意,我还必须添加以下行:

package:
  exclude:
    - venv/**

...到我的serverless.yml结尾,以使我的zip文件不超过大小限制。

为了防止链接过时,我将重新复制下面博客文章中的说明。


============================================= < / p>

创建使用numpy的Lambda函数

  1. 安装节点/ npm
  2. npm install -g无服务器
  3. 为您的计算机配置AWS(安装cli,运行“ aws configure”并添加从IAM生成的凭据)。 3a。为Mac安装Docker

  4. 4。

运行以下命令:

serverless create \
  --template aws-python3 \
  --name numpy-test \
  --path numpy-test

cd numpy-test
virtualenv venv --python=python3
source venv/bin/activate
  1. 编辑handler.py并将其内容替换为:

handler.py

import numpy as np
def main(event, context):
    a = np.arange(15).reshape(3, 5)
    print("Your numpy array:")
    print(a)


if __name__ == "__main__":
    main('', '')

6。

运行以下命令:

pip3 install numpy
pip3 freeze > requirements.txt
cat requirements.txt
  1. 将serverless.yml替换为:

serverless.yml

service: numpy-test

provider:
  name: aws
  runtime: python3.6

functions:
  numpy:
    handler: handler.main
  1. 运行以下内容

运行:

npm init

[接受默认值,然后键入“是”]

npm install --save serverless-python-requirements
  1. 现在将serverless.yml替换为:

serverless.yml

service: numpy-test

provider:
  name: aws
  runtime: python3.6

functions:
  numpy:
    handler: handler.main

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: non-linux

package:
  exclude:
    - venv/**
  1. 运行以下内容

运行

serverless deploy --aws-profile [aws-account-you-want-to-upload-fxn-to]
serverless invoke -f numpy --log
  1. 如果一切顺利,您应该会看到类似这样的内容:

预期输出:

START RequestId: b32af7a8-52fb-4145-9e85-5985a0f64fe4 Version: $LATEST
Your numpy array:
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
END RequestId: b32af7a8-52fb-4145-9e85-5985a0f64fe4
REPORT RequestId: b32af7a8-52fb-4145-9e85-5985a0f64fe4  Duration: 0.52 ms    
Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory Used: 37 MB

答案 3 :(得分:0)

要使用 AWS 层中不可用的其他包,请按照以下步骤操作。

<块引用>
  1. 转到您的终端
  2. 创建一个名为“python”的目录。
  3. 进入目录。
  4. 输入“pip install”命令。
  5. 压缩此文件并将压缩文件添加到 AWS

点击此链接了解更多详情:https://www.youtube.com/watch?v=3BH79Uciw5w