我在尝试将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
最后我想到了用
安装matplotlibsudo yum install python-matplotlib
,然后按照here的说明收集所需的软件包。但这并不能使matplotlib从python shell中导入,因此我想它不能作为Lambda层使用。
感谢您的帮助。
P.S:在AWS re:invent上,确实是demoed,但是会话上没有详细信息:/
答案 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
祝你好运!