【问题标题】:Using numpy in AWS Lambda在 AWS Lambda 中使用 numpy
【发布时间】:2018-02-21 10:37:03
【问题描述】:

我正在寻找在 AWS lambda 中使用 numpy 的解决方法。我没有为此使用 EC2 只是 lambda,所以如果有人有任何建议,我们将不胜感激。当前收到错误:

无法导入名称'multiarray'

使用 grunt lambda 创建 zip 文件并上传函数代码。我使用的所有模块都安装到一个名为 python_modules 的文件夹中,该文件夹位于 lambda 函数的根目录中,其中包括使用 pip install 的 numpy 和一个 requirements.txt 文件。

【问题讨论】:

  • 您可能应该将模块直接安装或符号链接到您的 Lambda 函数包的根目录。并确保所有依赖项也都在那里。
  • 我知道你在做什么,但所有模块都可以正常工作,因为 env 变量指向它们。
  • 你有没有偶然解决这个问题?我有关于 Python 3.6 的确切问题?
  • 我还没有回过头来,但我确实找到了这个链接,虽然我还没有机会回顾它!希望你能从中得到一些东西,如果你确实让我知道! github.com/vitolimandibhrata/aws-lambda-numpy 。据我了解,它需要完整版本的 numpy 包,您可以将它们放入您的项目中。
  • 截至 2018 年,它是最好和最容易使用的层:aws.amazon.com/blogs/aws/… AWS 甚至为 numpy 预制了一个

标签: python amazon-web-services numpy aws-lambda


【解决方案1】:

一种简单的方法让您的 lambda 函数支持 python 3.7 的 numpy 库:

  1. 转到您的 lambda 函数页面
  2. 在页面底部找到图层部分。
  3. 点击添加图层。
  4. 选择 AWS 层作为层源。
  5. 选择 AWSLambda-Python37-Scipy1x 作为 AWS 层。
  6. 选择 37 作为版本。
  7. 最后点击添加。

现在您的 lambda 函数已准备好支持 numpy。

【讨论】:

    【解决方案2】:

    1.) 将 numpy 的 Pip 安装到本地计算机上的文件夹中。

    2.) 完成后,压缩整个文件夹并创建一个 zip 文件。

    3.) 转到 AWS lambda 控制台,创建一个层并上传在第 2 步中创建的 zip 文件并保存该层。

    4.) 创建 lambda 函数后,单击添加层并添加您创建的层。就是这样, import numpy 将开始工作。

    【讨论】:

      【解决方案3】:

      从 2018 年开始,最好只使用内置图层功能。

      AWS 实际上已经发布了一个包含 numpy 的预制:https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

      【讨论】:

        【解决方案4】:

        我无法使用无服务器插件找到一个好的解决方案,但我确实找到了一个使用层的好方法。见Serverless - Numpy - Unable to find good bind path format

        【讨论】:

          【解决方案5】:

          我也会添加这个答案:https://stackoverflow.com/a/52508839/1073691

          使用 pipenv 还包括所有需要的 .so 文件。

          【讨论】:

            【解决方案6】:

            已更新以在此处包含解决方案,而不是链接:

            经过一番努力,我发现我必须从 python3.6 virtualenv 中创建我的部署包,而不是直接从主机。我在 Ubuntu 16.04 docker 映像中执行了以下操作。这假设您已经安装/配置了 python3.6、virtualenv 和 awscli,并且您的 lambda 函数代码位于 ~/lambda_code 目录中:

            1) cd ~(我们将在主目录中构建 virtualenv)

            2)virtualenv venv --python=python3.6(创建虚拟环境)

            3)source venv/bin/activate(激活虚拟环境)

            4)pip install numpy

            5) cp -r ~/venv/lib/python3.6/site-packages/* ~/lambda_code(将所有已安装的包复制到 lambda_code 目录的根级。这将包括一些不必要的文件,但如果需要,您可以自己删除这些文件)

            6)cd ~/lambda_code

            7) zip -r9 ~/package.zip .(压缩 lambda 包)

            8) aws lambda update-function-code --function-name my_lambda_function --zip-file fileb://~/package.zip(上传到 AWS)

            您的 lambda 函数现在应该能够毫无问题地导入 numpy。

            如果您想要一个开箱即用的解决方案,您可以考虑使用无服务器来部署您的 lambda 函数。在我找到上述解决方案之前,我按照指南 here 并能够在 python3.6 lambda 函数中成功运行 numpy。

            【讨论】:

            猜你喜欢
            • 2021-10-21
            • 1970-01-01
            • 2018-01-26
            • 2021-09-12
            • 2017-06-15
            • 2018-04-25
            • 2020-05-29
            • 1970-01-01
            • 2018-09-06
            相关资源
            最近更新 更多