更新:请忽略下面的内容,查看我上面的回复(这里:在Mac上安装numpy以在AWS Lambda上使用),关于使用Lambda Layers的方法要简单得多。
===========================================================================
我曾经遇到过完全相同的问题,通过按照这里的建议轻松解决了:
https://serverless.com/blog/serverless-python-packaging/
请注意,我还必须添加以下行:
。
package:
exclude:
- venv/**
我需要在serverless.yml文件末尾添加一些内容,以使我的zip文件大小符合限制。
为了防止链接失效,我将重新复制博客文章中的说明。
==============================================
创建一个使用numpy的Lambda函数
- 安装node/npm
- npm install -g serverless
为您的计算机配置aws(安装cli,运行“aws configure”并添加从IAM生成的凭据)。
3a. 安装Mac版Docker
4.
运行以下命令:
serverless create \
--template aws-python3 \
--name numpy-test \
--path numpy-test
cd numpy-test
virtualenv venv --python=python3
source venv/bin/activate
将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('', '')
运行以下代码:
pip3 install numpy
pip3 freeze > requirements.txt
cat requirements.txt
将serverless.yml替换为以下内容:
serverless.yml
service: numpy-test
provider:
name: aws
runtime: python3.6
functions:
numpy:
handler: handler.main
- 运行以下代码
运行:
npm init
接受默认值,然后输入“是”。
npm install --save serverless-python-requirements
现在请将 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/**
- Run the following
Run
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
numpy
会出现这种情况,而其他包却没有吗?到目前为止,我只在使用numpy
时遇到了这个问题。换句话说,有没有办法提前知道哪些包需要进行Linux构建呢? - Tchotchke