有没有办法在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'])
(更新)扩展问题:为什么有些软件包可以运行而其他软件包没有?
答案 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>
为您的计算机配置AWS(安装cli,运行“ aws configure”并添加从IAM生成的凭据)。 3a。为Mac安装Docker
serverless create \
--template aws-python3 \
--name numpy-test \
--path numpy-test
cd numpy-test
virtualenv venv --python=python3
source venv/bin/activate
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
service: numpy-test
provider:
name: aws
runtime: python3.6
functions:
numpy:
handler: handler.main
npm init
[接受默认值,然后键入“是”]
npm install --save serverless-python-requirements
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/**
serverless deploy --aws-profile [aws-account-you-want-to-upload-fxn-to]
serverless invoke -f numpy --log
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 层中不可用的其他包,请按照以下步骤操作。
<块引用>点击此链接了解更多详情:https://www.youtube.com/watch?v=3BH79Uciw5w