我有一个Lambda
函数,Python
它使用了几个具有二进制依赖关系的库:numpy
、scipy
、Pillow
等。过去,我已经成功地将它们编译到Amazon Linux
& 部署到Lambda
.
不过,我最近添加Grequest
到一堆依赖项中,它抛出的错误似乎与Grequest
. 关于这个话题的其他问题导致了死胡同,所以把我的帽子放在戒指上。
第一个错误是简单的Grequests requires gevent
或类似的。为了解决这个问题,我尝试pip install gevent --no-binary :all:
在一个Amazon Linux
实例上运行,将它与我的代码捆绑并上传到 Lambda。这对错误没有影响。
src
然后我从repo下载并gevent
使用它编译它make
(repo 的 README 中的命令引发了我没有记录的错误)。这产生了一个egg
文件,我将其转换为一个whl
文件并运行pip install gevent.whl -t .
。
我将生成的代码与我的捆绑在一起lambda.zip
并上传。这导致了一个新错误:
module initialization error: lib/libptf77blas.a.gz: invalid ELF header
libptf77blas.a.gz
是lib
我的文件夹中的一个文件lambda.zip
。该文件夹包含几个文件.so
,.a
我在 AWS Linux 上组装、、、等时构建了numpy
这些scipy
文件Pillow
。
据我所知,这是对numpy
. 我不明白的部分是:我使用的函数numpy
(并且libptf77blas.a.gz
在添加grequests
.
所以我假设一些关于编译的东西gevent
破坏了我的其他binary
依赖库的依赖关系,或者gevent
它本身需要libptf77blas.a.gz
并且对它发现的东西感到困惑。
我ldd
在.so
文件上运行了gevent
依赖,但没有引用libptf77blas.a.gz
. 但是,我是一个编译新手,所以这几乎没有定论。
我想实现并行上传Grequests
,但不清楚如何解决这个问题,或者使用哪些替代库(我通常写 JS,所以 Python 是第二语言)。