无法在AWS Lambda上安装pandas

时间:2016-06-19 16:40:52

标签: python amazon-web-services numpy pandas aws-lambda

我试图在Amazon Lambda实例上安装和运行pandas。我已经使用recommended zip method打包我的代码文件model_a.py和相关的python库(pip install pandas -t /path/to/dir/)并将zip上传到Lambda。当我尝试运行测试时,这是我收到的错误消息:

  

无法导入模块' model_a':C扩展名:   /var/task/pandas/hashtable.so:未定义的符号:PyFPE_jbuf未构建。   如果要从源目录导入pandas,则可能需要   运行' python setup.py build_ext --inplace'构建C扩展   第一

看起来像pandas安装程序附带的hashtable.so中定义的变量中的错误。谷歌搜索没有发现任何相关的文章。在numpy安装中有一些失败但没有具体的参考。非常感谢您排除故障的任何帮助!感谢。

3 个答案:

答案 0 :(得分:0)

以前,我已经在lambda上成功运行了pandas代码。如果您的开发环境与lambda环境不是 binary-compatible ,则您将无法简单运行pip install pandas -t /some/dir并将其打包为lambda .zip文件。即使您在Linux上进行开发,也可能会遇到compatability issues

那么,如何解决这个问题?该解决方案实际上非常简单:在lambda容器上运行pip install,并使用它下载/构建的pandas模块。完成此操作后,我有了一个构建脚本,它将在本地系统(docker中的AWS Lambda容器的克隆)上启动lambci/lambda容器的实例,并将本地build文件夹绑定到/build并运行pip install pandas -t /build/。完成后,杀死该容器,然后在本地pandas文件夹中拥有兼容lambda的build模块,可以将其与其他代码一起压缩并发送到AWS。

您可以通过使用requirements.txt文件对任意一组python模块进行此操作,甚至可以通过首先在lambci上创建虚拟环境对任意版本的python进行此操作容器。几年来我不需要这样做,所以也许现在有了更好的工具,但是这种方法至少应该可以起作用。

答案 1 :(得分:0)

我建议您使用Lambda图层来使用其他库。 lambda函数包的大小是有限的,但是可以使用多达250MB的层(更多here)。

AWS开放了一个很好的软件包,包括Pandas,用于处理Lambdas中的数据。 AWS还对其进行了打包,以方便使用Lambda层。您可以找到说明here

答案 2 :(得分:-1)

在AWS Lambda中,您只能使用纯python库。