无法在AWS Lambda上安装pandas

rti*_*dru 6 python numpy amazon-web-services pandas aws-lambda

我正在尝试在Amazon Lambda实例上安装和运行pandas .我使用推荐的zip方法打包我的代码文件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安装失败,但没有具体.非常感谢您排除故障的任何帮助!谢谢.

rno*_*ris 0

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

那么,你如何解决这个问题呢?pip install解决方案实际上非常简单:在 lambda 容器上运行并使用pandas它下载/构建的模块。当我这样做时,我有一个构建脚本,它将在我的本地系统上启动lambda容器的实例(docker中AWS Lambda容器的克隆),将我的本地build文件夹绑定到/build并运行pip install pandas -t /build/. pandas完成后,终止容器,您的本地文件夹中就会有 lambda 兼容模块build,准备好压缩并与其余代码一起发送到 AWS。

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

  • 2018 年 11 月,AWS 推出了 Lambda Layers,因此您现在可以开箱即用地运行自己的二进制文件:https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html (2认同)