繁体   English   中英

如何在AWS Lambda上使用Grequests?

[英]How do I use Grequests on AWS Lambda?

我在Python中有一个Lambda函数,该函数使用几个具有二进制依赖性的库: numpyscipyPillow等。过去,我已经在Amazon Linux上成功编译了它们并将其部署到Lambda

不过,我最近将Grequest添加到了一堆依赖项中,并且它抛出的错误似乎与Grequest 关于这个话题的其他问题导致了死胡同,所以我把帽子戴上了。

第一个错误是简单的Grequests requires gevent或类似的东西。 为了解决这个问题,我尝试在Amazon Linux实例上运行pip install gevent --no-binary :all:将其与我的代码捆绑在一起并上传到Lambda。 这对错误没有影响。

然后,我gevent下载src并使用make对其进行了编译(存储库README中的命令引发了我未记录的错误)。 这产生了一个egg文件,我将其转换为whl文件并运行pip install gevent.whl -t .

我将生成的代码与lambda.zip捆绑在一起并上传了。 这导致了一个新错误module initialization error: lib/libptf77blas.a.gz: invalid ELF header

libptf77blas.a.gz是我的lambda.zip中的lib文件夹中的文件。 此文件夹包含几个.so.a文件,这些文件是我在组装numpyscipyPillow等时在AWS Linux上构建的。

据我所知,这是numpy的依赖项。 我不明白的部分是:我的函数使用numpy (大概libptf77blas.a.gz在添加grequests之前就grequests

因此,我假设有关编译gevent打破了我其他与binary相关的lib的依赖关系,或者gevent本身需要libptf77blas.a.gz并对其发现的内容感到困惑。

我在gevent依赖的.so文件上运行了ldd ,但没有一个引用libptf77blas.a.gz 但是,我是一位正在编译的新手,所以这几乎没有定论。

我想实现Grequests启用的并行上载,但尚不清楚如何解决此问题,或不清楚要使用哪个替代库(我通常写JS,因此Python是第二语言)。

问题完全是与无关的用户造成的愚蠢用户错误-按照OP中的步骤操作,您应该会很好。

或者只是使用我在github上发布grequests的副本。 这是一个zip其中grequests在Amazon Linux实例上编译的grequestsgeventgreenlet 它可以在我的Lambda Function正常工作。

正如其他问题所述,您需要确保使用Amazon Linux Image编译libev等二进制文件。 基本上,您需要在运行Amazon Linux的计算机上安装numpy和Grequests之类的东西,因为它们使用需要编译的C代码。

该问题中的教程链接对于从源代码构建事物看起来非常不错,尽管比您需要的更多。

如果您不熟悉编译二进制文件,则应阅读一些有关make的知识,并查看一些示例,例如构建curl 由于您使用的是Amazon Linux,因此它使用yum,并且与CentOS非常相似。

也许可以通过在CentOS的docker映像上的venv上的venv中安装numpy和Grequests并将其内容压缩成类似于本教程的方式来摆脱,但是我首先要使用Amazon的映像启动EC2实例并安装东西就像本教程一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM