我有一个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 是第二语言)。