【发布时间】:2016-12-28 08:37:49
【问题描述】:
我在Python 中有一个Lambda 函数,它使用了几个具有二进制依赖关系的库:numpy、scipy、Pillow 等。过去,我在Amazon Linux &部署到Lambda。
不过,我最近将Grequest 添加到依赖项堆中,但它抛出的错误似乎与Grequest 没有直接关系。 Other questions 在这个话题上已经导致了死胡同,所以请把我的帽子放在戒指上。
第一个错误是一个简单的Grequests requires gevent 或类似的东西。为了解决这个问题,我尝试在 Amazon Linux 实例上运行 pip install gevent --no-binary :all:,将其与我的代码捆绑并上传到 Lambda。这对错误没有影响。
然后我从gevent repo 下载了src 并使用make 编译它(repo 的自述文件中的命令抛出了我没有记录的错误)。这产生了一个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文件,我在AWS Linux上组装numpy、scipy、Pillow等时构建的。
据我所知,这是numpy 的依赖项。我不明白的部分是:我的函数使用了numpy(大概libptf77blas.a.gz在添加grequests之前就好了。
所以我假设编译 gevent 破坏了我的其他 binary-dependant 库的依赖关系,或者 gevent 本身需要 libptf77blas.a.gz 并且对它的发现感到困惑。
我在.so 文件上运行ldd gevent 依赖,但没有引用libptf77blas.a.gz。但是,我是一个编译新手,所以这几乎没有定论。
我想实现Grequests 启用的并行上传,但我不清楚如何解决这个问题,或者使用哪些替代库(我通常写 JS,所以 Python 是第二语言)。
【问题讨论】:
标签: python amazon-web-services aws-lambda gevent grequests