问题描述
我正在尝试在aws lambda函数中运行cvxpy包.这个包不在SDK中,所以我读到我必须将依赖关系编译为zip,然后将zip上载到lambda函数.
我已经完成了一些研究并尝试了下面的链接,但是当我尝试Pip安装cvxpy时,我得到错误消息 - 我在一个Windows盒子上,但我知道AWS Lambda在Linux上运行.欣赏帮助!
https://programwithus.com/learn-到代码/pip-and -imirtualenv-on-windows/
https://媒体. com/@ manivannan_data/import-custom-python-packages-on-aws-lambda-function-5fbac36b40f8
https://www.cvxpy.org/install/index.html
推荐答案
在Windows上安装cvxpy它需要c ++构建工具(请参阅: https://buildmedia.readthedocs.org/media/pdf/cvxpy/latest/cvxpy.pdf )
在Windows上:
- 我创建了一个lambda层python目录结构python/lib/python3.7/site-packages(参见: https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html )并在该网站包目录中安装了我的pip包.
pip install cvxpy --target python/lib/python3.7/site-packages
-
然后,我将python/lib/python3.7/site-packages作为cvxpy_layer.zip提交给s3桶(图层zipped文件max limit是50 mb https://docs.aws.amazon.com/lambda/latest/dg/limits.html ),将它附加到我的lambda图层.
现在,图层已准备就绪,但Lambda无法在Windows计算机上安装时导入软件包. (参见: aws lambda - 无法导入模块'lambda_function')
在Linux上:
- 我创建了与早期python/lib/python3.7/site-packages相同的目录结构,并安装了cvxpy并按下它,如下所示.
- 稍后我将zip文件上载到S3桶,并创建了一个新的lambda层.
- 将该Lambda层附加到我的Lambda函数,我挖掘机能够解决前面失败的导入问题,并在lambda上运行基本的cvxpy程序.
mkdir -p alley/python/lib/python3.7/site-packages pip install cvxpy --target alley/python/lib/python3.7/site-packages cd alley zip -rqvT cvxpy_layer.zip .
Lambda层图像:
lambda函数执行:
其他推荐答案
您可以将所有依赖项与lambda源一起包装到单个zipfile并部署它.这样做,您将在多个Lambda函数中结束具有额外的重复代码.假设,如果您的lexda函数中的一个以上需要相同的包cvxpy,则必须单独为函数包装两次.
而是更好的选择是尝试Labmda Layers,在那里将所有依赖项放入包中并将图层部署到Lambda中.然后将该图层附加到您的函数中以从那里获取其依赖项.层甚至可以是版本的. :)
请参阅以下链接:
相关问答
如何使用Python 3.6将Pymysql模块安装到AWS Lambda
Django 系统范围安装到 virtualenv
AWS Lambda通过VirtualEnv的Tesseract OCR
Ubuntu 11.04: 用PIP将PIL安装到virtualenv中
如何将 apt-get 安装到我的 virtualenv?
如何将 redis 模块安装到 AWS elasticache?
无法将Cobertura插件安装到Eclipse
无法将GWT插件安装到Eclipse上
无法将程序集安装到缓存?
当开发系统中没有安装PostgreSQL时,将psycopg2安装到virtualenv中