无法将 cvxpy 安装到 AWS lambda 的 virtualenv 中

Unable to install cvxpy into virtualenv for AWS lambda

我正在尝试 运行 AWS lambda 函数中的 cvxpy 包。这个包不在 SDK 中,所以我读到我必须将依赖项编译成一个 zip,然后将 zip 上传到 lambda 函数中。

我做了一些研究并尝试了下面的链接,但是当我尝试 pip install cvxpy 时收到错误消息 - 我在 Windows 框上,但我知道 AWS Lambda 运行s 在 Linux.

感谢您的帮助!

http://i-systems.github.io/HSE545/machine%20learning%20all/cvxpy_install/CVXPY%2BInstallation%2BGuide%2Bfor%2BWindows.html

https://programwithus.com/learn-to-code/Pip-and-virtualenv-on-Windows/

https://medium.com/@manivannan_data/import-custom-python-packages-on-aws-lambda-function-5fbac36b40f8

https://www.cvxpy.org/install/index.html

您可以将所有依赖项与 lambda 源一起打包到一个 zip 文件中并进行部署。这样做,您最终将在多个 lambda 函数中拥有额外的重复代码。假设,如果您的多个 lambda 函数需要同一个包 cvxpy,您将不得不为这两个函数单独打包两次。

相反,更好的选择是尝试 Labmda Layers,您将所有依赖项放入一个包中,然后将一个层部署到您的 Lambda 中。然后将该层附加到您的函数以从那里获取其依赖项。这些层甚至可以进行版本控制。 :)

请参考以下链接:

要在 windows 上安装 cvxpy,它需要 c++ 构建工具(请参阅:https://buildmedia.readthedocs.org/media/pdf/cvxpy/latest/cvxpy.pdf

在 Windows:

pip install cvxpy --target python/lib/python3.7/site-packages
  • 然后,我将 python/lib/python3.7/site-packages 压缩为 cvxpy_layer.zip 并将其上传到 S3 存储桶(层压缩文件最大限制仅为 50 MB https://docs.aws.amazon.com/lambda/latest/dg/limits.html),以将其附加到我的lambda 层。
  • 现在,该层已准备就绪,但 lambda 无法导入安装在 windows 机器上的包。 (参考:

在 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 函数执行: