我试图在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
安装中有一些失败但没有具体的参考。非常感谢您排除故障的任何帮助!感谢。
答案 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库。