【问题标题】:Unable to import grequests for AWS Lambda无法为 AWS Lambda 导入请求
【发布时间】:2016-07-14 15:54:39
【问题描述】:

我正在使用 Python 2.7 运行时运行 AWS Lambda 脚本。但是,每当它初始化时,它就会开始导入 grequests 库,但由于它依赖于 gevent 而失败:

Gevent is required for grequests.

它似乎成功地找到了 grequests 库(因为它知道它需要 gevent)但失败了。

到目前为止我已经尝试过:

pip install --ignore-installed grequests -t .

pip install --ignore-installed grequests -t ./lib

pip install --ignore-installed gevent -t .

pip install --ignore-installed gevent -t ./lib

然后我按照此处的说明压缩目录内容并上传到 AWS:http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

似乎无论我尝试什么,Lambda 都无法找到 gevent,但它能够毫无问题地找到其他非默认库。

【问题讨论】:

  • 你在哪里打电话pip install?在你的 lambda 脚本中?
  • 我会将它添加到原始帖子中,但我是从终端调用它并按照以下说明压缩内容以上传到 AWS:docs.aws.amazon.com/lambda/latest/dg/…

标签: python amazon-web-services gevent aws-lambda grequests


【解决方案1】:

我必须在 Amazon Linux 实例上从 src 构建 gevent。如果有人需要,我会将生成的文件放在 zip 中 - 只需将它们包含在您上传的 Lambda zip 中,您就应该像老板一样并发。

https://github.com/brandonmp/aws-lambda-grequests

【讨论】:

  • 看来我的问题是试图在 Amazon Linux 上编译整个 grequests,但遇到了一个不相关的问题。只需编译 gevent 即可。谢谢!
【解决方案2】:

由于 Gevent 基于 libev,它很可能在通过 pip 安装时编译二进制文件。

如果您希望它们在 AWS Lambda 中可执行,您需要确保部署为 Amazon Linux 编译的二进制文件。您可以通过在运行 Amazon Linux 的 EC2 实例上构建部署包来实现这一点。

还可以查看this answerthis tutorial

【讨论】:

  • 谢谢。我确实尝试通过启动 EC2 实例并在那里安装然后将结果包含在我的存储库中来完成这项工作。但是,我有同样的问题。
  • 在 EC2 上运行代码时是否遇到同样的问题?如果是,我建议在那里调试问题,因为它的行为应该与 Lambda 中的相同。直接在 Lambda 中调试这样的东西真的很痛苦。
  • 有趣的是,这也是让 lxml 库在 Lambda 上运行的解决方案。因此,如果有人在搜索,只需在服务器上编译即可。
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2019-12-23
相关资源
最近更新 更多