AWS Lambda(python2.7):添加matplotlib作为图层

时间:2019-01-02 13:49:34

标签: python-2.7 matplotlib aws-lambda amazon-linux

我在尝试将matplotlib作为layer添加到我的Python 2.7 AWS Lambda函数时遇到麻烦。

Lambda execution environment上,我正在尝试安装必要的库并按照here所述创建一个层。

我尝试过的事情:

首先,我pip install将matplotlib放入虚拟环境中,并在lib和lib64下复制了站点包的内容。当执行lambda函数时,出现No module named pkg_resources异常。我还尝试使用--target选项进行安装,以将所有依赖项安装到同一文件夹。结果是一样的。

我读到here可能是由于setuptools软件包已过期。当我进行更新pip install --upgrade setuptools,然后尝试安装matplotlib时,我开始收到以下异常:

pkg_resources.DistributionNotFound: The 'pip==9.0.3' distribution was not found and is required by the application 

最后我想到了用

安装matplotlib
sudo yum install python-matplotlib

,然后按照here的说明收集所需的软件包。但这并不能使matplotlib从python shell中导入,因此我想它不能作为Lambda层使用。

感谢您的帮助。

P.S:在AWS re:invent上,确实是demoed,但是会话上没有详细信息:/

1 个答案:

答案 0 :(得分:0)

我在其他模块(例如加密和我自己的自定义模块)上遇到了类似的问题。我发现问题实际上是缺少好的文档。

就我而言,我正在使用--target选项从目标目录上拉所有依赖项,因此所有依赖项目录都位于zip文件的顶层。对于直接Lambda部署来说,这很好用,但是当您要使用层时,该层将部署到Lambda容器的/ opt文件夹中,因此您需要使用名为“ python”的顶级目录创建zip文件。这样您的依赖项可以位于/ opt / python/。

mkdir python && cd python && pip install pyopenssl crypto --target . && cd .. && zip -r9 ./lambda_layer.zip python/

它确实出现在文档中,但是它简短且非常容易遗漏。此页面对我有帮助:https://medium.com/@adhorn/getting-started-with-aws-lambda-layers-for-python-6e10b1f9a5d

祝你好运!