无法在AWS Lambda上安装pandas

9
我正在尝试在Amazon Lambda实例上安装和运行pandas。我使用了推荐的压缩打包方法将代码文件model_a.py及其相关python库(pip install pandas -t /path/to/dir/)打包成zip文件并上传到Lambda。在尝试运行测试时,出现以下错误信息:

无法导入模块'model_a':C扩展:
/var/task/pandas/hashtable.so:未定义符号:PyFPE_jbuf not built.如果您想从源目录导入pandas,您可能需要首先运行 'python setup.py build_ext --inplace' 来构建C扩展。

看起来像是pandas安装程序中带有的hashtable.so文件中定义的变量错误。在谷歌搜索这个问题时没有找到相关的文章。虽然有一些与numpy安装失败有关的参考,但都不够明确。希望能得到解决此问题的任何帮助!谢谢。

为什么不尝试基于virtualenv的方法呢?这样你就不会错过在lambda部署包中包含的python包所需的任何依赖项。 - Leon
@Leon 这不是基本上同样的事情吗? - rtindru
请查看https://dev59.com/9lsV5IYBdhLWcg3w0hhU#43766512上的答案,了解如何包含已编译代码的Python包,例如Pandas。 - Kevin
1
我已经多次使用Zappa将Pandas项目部署到AWS Lambda,并且我没有遇到你遇到的问题。 Zappa也可以在虚拟环境中工作。因此,我不确定是venv步骤还是Zappa打包库的方式值得称赞,以避免出现问题。 - Chad Parmet
@rtindru,我也遇到了同样的问题,你解决了吗? - Dimuthu
显示剩余2条评论
3个回答

3
我建议您使用Lambda层来使用额外的库。 Lambda函数包的大小受到限制,但是可以使用最多250MB的层(更多此处)。
AWS开源了一个很好的包,包括Pandas,用于处理Lambda中的数据。 AWS还将其打包,使其方便用于Lambda层。 您可以在此处找到说明。

0

我之前已经成功地在Lambda上运行了pandas代码。如果你的开发环境与Lambda环境不二进制兼容,那么你将无法简单地运行pip install pandas -t /some/dir并将其打包成Lambda .zip文件。即使你是在Linux上进行开发,你仍然可能遇到兼容性问题

那么,如何解决这个问题呢?其实解决方案非常简单:在 Lambda 容器上运行您的 pip install,并使用它下载/构建的 pandas 模块。当我这样做时,我有一个构建脚本,它会在我的本地系统上启动 lambci/lambda 容器的一个实例(docker 中 AWS Lambda 容器的克隆),将我的本地 build 文件夹绑定到 /build 并运行 pip install pandas -t /build/。完成后,关闭容器,您就可以在本地 build 文件夹中拥有与 Lambda 兼容的 pandas 模块,准备好与您的其他代码一起压缩并发送到 AWS。
您可以通过使用 requirements.txt 文件来为任意一组 Python 模块执行此操作,甚至可以通过首先在 lambci 容器上创建虚拟环境来为任意版本的 Python 执行此操作。我已经有几年没有需要这样做了,所以现在可能有更好的工具,但是这种方法至少应该是可行的。

2
2018年11月,AWS推出了Lambda Layers,因此您现在可以直接运行自己的二进制文件:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html - Thales Minussi

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接