Numpy: 无法在 AWS Lambda 函数中导入 numpy

创建于 2019-05-04  ·  14评论  ·  资料来源: numpy/numpy

  • 你是如何安装 Python 的
    在我的 Mac 上删除 python3 然后brew install python安装 python 3.7.3
  • 你是如何安装 numpy 的
    由于我要安装在 AWS Lambda 上运行, pip install numpy --target .
  • 你的操作系统
    macOS Sierra 10.12.6
  • 是否安装了多个版本的 Python
    本机 python 2.7.10 仍然安装在我的 Mac 上
  • 如果您从源代码构建,您的编译器版本和理想的构建日志
    不适用

所以我可以在本地运行我的代码,我没有任何问题。 我是 pandas、matplotlib、boto3 和 mpld3,用于组织和显示 AWS DDB 表中的数据,其中包含 mpld3 转换为 html 的 matplotlib 图。 根据https://docs.aws.amazon.com/lambda/latest/dg/lambda,pandas似乎需要 numpy,每当我尝试将这些库安装到目标目录以便它们可以在 lambda 函数中运行时

```重要提示:请阅读此内容以获取有关如何解决此问题的建议!

导入多数组 numpy 扩展模块失败。 最多
您可能正在尝试导入失败的 numpy.
以下是如何进行:

  • 如果您正在使用 numpy git 存储库,请尝试git clean -xdf
    (删除所有不受版本控制的文件)并重建 numpy.
  • 如果您只是尝试使用已安装的 numpy 版本:
    您的安装已损坏 - 请重新安装 numpy.
  • 如果您已经重新安装并且没有解决问题,那么:

    1. 检查您使用的是您期望的 Python(您使用的是 /var/lang/bin/python3.6),

      并且您的 PATH 或 PYTHONPATH 中没有目录可以

      干扰您尝试使用的 Python 和 numpy 版本。

    2. 如果 (1) 看起来不错,您可以在以下位置打开一个新问题

      https://github.com/numpy/numpy/issues。 请包括以下详细信息:



      • 你是如何安装 Python 的


      • 你是如何安装 numpy 的


      • 你的操作系统


      • 是否安装了多个版本的 Python


      • 如果您从源代码构建,您的编译器版本和理想的构建日志



 Note: this error has many possible causes, so please don't comment on
 an existing issue about this - open a new one instead.

原始错误是:没有名为“numpy.core._multiarray_umath”的模块

结束请求 ID:2fc65f50-420d-441b-930c-665b1c8ab3ea
报告请求 ID:2fc65f50-420d-441b-930c-665b1c8ab3ea 持续时间:0.85 毫秒计费持续时间:100 毫秒内存大小:128 MB 使用的最大内存:40 MB ```

最有用的评论

那个 AWS 指南并没有告诉你整个故事。 Amazon Linux 发行版与从 PyPi 或 conda-forge 安装的常规 NumPy 不兼容。

我建议您遵循这些指南之一或使用来自这些存储库之一的 zip 文件:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

这不是 NumPy 错误,所以我将关闭该问题。

所有14条评论

为了隔离问题,我重试了上述方法:

def main(event, context):

    a = 100
    print(a)
    return

import numpy as np

def main(event, context):

    a = np.array(100)
    print(a)
    return

根据https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-将这两个文件压缩到一个包含目标安装 numpy 的package目录包.html。 压缩后,文件约为 16MB,所以他们安装了 numpy。 第一个未导入 numpy 的示例在测试 Lambda 函数时运行良好,但第二个错误显示原始错误消息

那个 AWS 指南并没有告诉你整个故事。 Amazon Linux 发行版与从 PyPi 或 conda-forge 安装的常规 NumPy 不兼容。

我建议您遵循这些指南之一或使用来自这些存储库之一的 zip 文件:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy
https://github.com/vitolimandibhrata/aws-lambda-numpy

这不是 NumPy 错误,所以我将关闭该问题。

谢谢,

感谢您的回复。 仅供参考,我可以通过使用 AWS Linux 操作系统启动 EC2 实例并在那里安装库来使其工作。 一切都很好。

谢谢您的帮助,

获取适用于 iOS 的 Outlook https://aka.ms/o0ukef


来自:Ralf Gommers [email protected]
发送时间:2019 年 5 月 4 日星期六上午 6:52
到:numpy/numpy
抄送:李·詹姆斯; 作者
主题:回复:[numpy/numpy] 无法在 AWS Lambda 函数中导入 numpy (#13465)

那个 AWS 指南并没有告诉你整个故事。 Amazon Linux 发行版与从 PyPi 或 conda-forge 安装的常规 NumPy 不兼容。

我建议您遵循这些指南之一或使用来自这些存储库之一的 zip 文件:
https://medium.com/@samme/setting -up-python-3-6-aws-lambda-deployment-package-with-numpy-scipy-pillow-and-scikit-image-de488b2afca6 https://urldefense。 proofpoint.com/v2/url?u=https-3A__medium.com_-40samme_setting-2Dup-2Dpython-2D3-2D6-2Daws-2Dlambda-2Ddeployment-2Dpackage-2Dwith-2Dnumpy-2Dscipy-2Dpillow-2Dand-2Dscikit-2Dimage-2Dde488b2afca6&d= DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=ZKkVD6L0iXq9wAG929BSTikIAEun9eeS4ZdgUw1Q8oY
https://medium.com/@korniichuk/lambda -with-pandas-fd81aa2ff25e https://urldefense.proofpoint.com/v2/url?u=https-3A__medium.com_-40korniichuk_lambda-2Dwith-2Dpandas-2Dfd81aa2ff25e&d=DwMCaQ&c= 0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=PQOBXsoiGwGl3XWjQFqEbAK77Kg9THTSlEZOmLQNiJo&e=
https://blog.orikami.nl/building-scipy-pandas-and-numpy-for-aws-lambda-python-3-6-cba9355b44e9 https://urldefense.proofpoint.com/v2/url?u=https -3A__blog.orikami.nl_building-2Dscipy-2Dpandas-2Dand-2Dnumpy-2Dfor-2Daws-2Dlambda-2Dpython-2D3-2D6-2Dcba9355b44e9&d = DwMCaQ&C = 0hefKdg9jtsMu47wpF0ovg&R = 2qmZ2aA-JTvfrp24tI1PaA&M = o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&S = jm1X8lQ78YL30-NRN2kXnOGAhMS1LKSowIOFQMCpq5Y&E =
https://github.com/pbegle/aws-lambda-py3.6-pandas-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_pbegle_aws-2Dlambda-2Dpy3.6-2Dpandas -2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=708JPsyiAUC0pdCf1QwuLzJ4dEWuneFNuc_Zak
https://github.com/vitolimandibhrata/aws-lambda-numpy https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_vitolimandibhrata_aws-2Dlambda-2Dnumpy&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=VRO3ZNU28VRO3ZNU28F -KgjOittvdP3EKrsYfomhs&s=poqmiFo_VPWUjgf2NEI4vBxzANNWtRm3sXSUypHO88w&e=

这不是 NumPy 错误,所以我将关闭该问题。


您收到此消息是因为您编写了该主题。
回复此电子邮件直接,查看它在GitHub上https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_numpy_numpy_issues_13465-23issuecomment-2D489329007&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=J7VXklMAkObDeLGzi_DueXIZ7gya0qrVm9tZhLH9dzI&e= ,或静音线程https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notifications_unsubscribe-2Dauth_AHKHI4N5E7XURJJTX7INB6LPTWIJVANCNFSM4HKX25DQ&d=DwMCaQ&c=0hefKdg9jtsMu47wpF0ovg&r=2qmZ2aA-JTvfrp24tI1PaA&m=o4NpaNDNU2z8VYtFVRO3Z-KgjOittvdP3EKrsYfomhs&s=zMXEEFbVt2bm8P0Cn2aJbHDaSdV0ABZ_hgsaB2AWUWg&e=

@rgommers你知道这方面的任何与 python3.7 相关的技巧吗? 我已经从你的 3.6 列表中尝试了几个,并且总是对 _multiarray 库有同样的抱怨。 我需要创建一个 AWS“层”,因为我需要的组合(numpy、scipy、pandas)超过了单个函数的大小允许。

@iceback如果您的错误与我的错误相似,即No module named 'numpy.core._multiarray_umath' ,这是由于未使用正确的操作系统安装 numpy 造成的。

AWS lambda 将在运行时运行 AWS linux,因此任何目标安装的包都应安装正确的操作系统。 如果您通过pip install --target ./package numpynumpy目标安装到package目录,并且您正在运行另一个操作系统(例如 macOS),那么这将失败,因为目标安装假定操作系统不会从您的本机操作系统更改。

要解决此问题,您有两种选择:

  1. 从运行 AWS Linux 的机器(例如 EC2 实例)执行目标安装。 这对我很有用。
  2. 弄清楚如何在目标安装命令中指定运行时操作系统。 如果你找到了一个好的方法,请分享😄

我将不得不重新审视我上周尝试过的所有事情,其中​​包括@korniichuk和 github/pbegle,天知道还有什么,但总是在同一个地方结束。 在 EC2 上构建 numpy 并不顺利。 可能是错误的 Cython 版本(在 aws linux 上只有 0.27 可用)。 你能详细说明你的#1吗? 你如何从一个实例上安装的 numpy 到 Lambda 上的一个层?

@iceback Ya,当我第一次这样做时,这很令人沮丧,但这绝对是可能的。 我目前使用 Python 3.7 和您提到的 3 个包运行 Lambda 函数。

我如何执行上述步骤 1. 涉及按照此处描述的更新具有附加依赖项的函数中概述的步骤。 为简单起见,我将假设您的本地 python 文件名为 _pony.py_ 并且 lambda_function 使用 _ride_pony_ 函数调用。

  1. 启动连接到 EC2 实例,例如 EC2 微实例。 在此处查找说明。 确保实例运行 AWS Linux。
  2. 检查是否安装了 python3。 如果没有安装,用sudo yum install python3 -y安装
  3. 为您的本地包创建一个目录。 mkdir package
  4. 安装要在 Lambda 中使用的库。 仅供参考,我总是将 pip 称为模块,以避免 Python2 和 Python3 点之间的混淆。 此外,在这些安装中可能首选某些安装顺序,这可能值得研究。
  5. python3 -m pip install --target ./package numpy
  6. python3 -m pip install --target ./package pandas
  7. python3 -m pip install --target ./package scipy
  8. 使用cd package进入安装目录
  9. 使用zip -r9 ../pony.zip .压缩安装目录
  10. 现在,在您的本地机器上,使用此处的说明将 scp _pony.zip_ 从您的 EC2 实例发送到您的本地。
  11. 从您的本地,将 _pony.py_ 压缩到 _pony.zip_。 zip -g pony.zip pony.py 。 您的 zip 文件现在包含您的lambda 代码以及所需的 python 模块,这些模块已安装以使用 AWS Linux 操作系统。
  12. 将 zip 文件上传到 S3(允许更大的 lambda 函数,最大为 50 MB)。 如果您的代码很小,您可以跳到第 10 步。
  13. 进入您的 lambda 函数(或从 CLI 更新)以将 pony.zip 中的代码用于该 lambda 函数

**确保您的 lambda 函数指向并执行您的文件名和主函数 _pony.ride_pony_,如果它不是默认的 _lambda_function.lambda_handler_

非常感谢。 我相信我有机会! (我的理解是,对于 Lambda 层,zip 的顶部必须是“python”,所以我将使用它而不是“package”)

大声而自豪地喊出那个方法! 不知道我在哪里与其他建议发生冲突(尽管它们是针对 python3.6 的),但我现在又回到了我的函数代码上。 万分感谢。

AWS 现在还发布了一个包含 NumPy 和 SciPy 的层。 来自https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/

_根据我们的客户反馈,并提供一个如何使用 Lambda 层的示例,我们将发布一个公共层,其中包括 NumPy 和 SciPy,这两个流行的 Python 科学库。 这个预构建和优化的层可以帮助您快速开始数据处理和机器学习应用程序。_

嗯,会不会有太多的 AWX 文档? ;)

2019 年 10 月 23 日凌晨 4:29,Ralf Gommers [email protected]写道:

AWS 现在还发布了一个包含 NumPy 和 SciPy 的层。 来自https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/ https://aws.amazon.com/blogs /aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/
根据我们的客户反馈,并提供一个如何使用 Lambda 层的示例,我们将发布一个公共层,其中包括 NumPy 和 SciPy,这两个流行的 Python 科学库。 这个预构建和优化的层可以帮助您快速开始使用数据处理和机器学习应用程序。


你收到这个是因为你被提到了。
回复此电子邮件直接,查看它在GitHub上https://github.com/numpy/numpy/issues/13465?email_source=notifications&email_token=AACY7PDHEVUY6IGQ6IXVXPLQQARRNA5CNFSM4HKX25D2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA5ACQ#issuecomment-545378314 ,或退订https://github.com/notifications/unsubscribe-授权/AACY7PFK3DUQOBMT5QA2ID3QQARRNANCNFSM4HKX25DQ

对我有用的是使用 Linux 版本的 numpy 库(我使用 macOS)。 我去了https://pypi.org/project/numpy/#files并下载了我正在寻找的版本中的 .whl 文件(对我来说,它是 numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl) . 接下来转到终端并通过执行'unzip numpy-1.19.0-cp37-cp37m-manylinux1_x86_64.whl'解压缩它。 这应该为您提供适用于 Lambda 的 numpy 版本。 然后,像以前一样压缩所有内容并上传。 最后,一个令人难以置信的令人沮丧的问题被简单地解决了。

我有同样的问题,对我有用的解决方案是我从我的电脑上卸载了 numpy,(windows 7)。
比我在 aws lambda 函数中添加了一个叫做 AWSlambda scipy 的层,就是这样。

我在 Windows 上遇到了同样的问题,但能够通过以下任一方法解决它:

  • 使用在 WSL(Linux 的 Windows 子系统)上运行的 Ubuntu 上运行的 AWS SAM(无服务器应用程序模型)构建 Lambda
  • 使用--use-container标志使用 AWS SAM 构建 Lambda,在文档中有以下解释:

如果您的函数依赖于具有本机编译依赖项的包,请使用此标志在类似 AWS Lambda 的 Docker 容器中构建您的函数。

此页面是否有帮助?
0 / 5 - 0 等级