我正在开发一个 AWS Lambda 函数,该函数使用 rpy2 将 Python Flask API 与 R 机器学习模型集成。但是,在尝试导入 rpy2.robjects 时遇到以下错误: 尝试导入 rpy2.robjects... 遇到导入错误:没有名为“_cffi_backend”的模块
当前环境 -
尽管确保 rpy2 及其依赖项(例如 cffi)安装在 /opt/python/lib/python3.8/site-packages 下的 Python 层中,但该函数仍失败并出现错误:没有名为“_cffi_backend”的模块。
相同的设置在我的 MacBook 上本地工作,但问题在 AWS Lambda 中仍然存在。
我正在寻找有关解决此错误并确保 rpy2 及其依赖项在 AWS Lambda 环境中正常工作的指导。具体来说,我需要帮助理解为什么 _cffi_backend 不被识别以及我可以采取哪些步骤来解决这个问题。
运行导入 rpy2.robjects 的 AWS Lambda 函数时,出现以下错误:
ModuleNotFoundError:没有名为“_cffi_backend”的模块
此错误是由于缺少 _cffi_backend 模块引起的,该模块是 cffi 库的一部分。出现此问题的原因通常是 AWS Lambda 使用 Amazon Linux 作为其运行时环境,而 cffi(rpy2 的依赖项)包含必须与 Lambda 运行时环境匹配的已编译组件。如果该软件包安装在不同的操作系统(例如 macOS 或 Windows)上,则它将无法在 Lambda 上运行。
您需要在 Amazon Linux 环境中将 Lambda 函数与 rpy2 及其依赖项打包。这里有两种方法:
选项 1:使用 Lambda 层 Lambda 层允许您单独捆绑依赖项并在多个函数中重用它们。
创建依赖项目录: mkdir lambda 层 && cd lambda 层 mkdir python
设置 Amazon Linux 环境:使用 Docker 模拟 AWS Lambda 运行时: docker run -it --rm -v $(pwd):/lambda amazonlinux:2 /bin/bash
在 Docker 中安装所需的包: Docker 容器内部:
百胜更新-y yum install -y python3-pip python3-devel gcc libffi-devel pip3 安装 rpy2 cffi -t /lambda/python 退出
打包Layer:将python目录压缩成zip文件: 光盘 .. zip -r lambda-layer.zip python
将图层上传到AWS: 转到 AWS 管理控制台,创建新的 Lambda Layer,然后上传 lambda-layer.zip。将图层附加到您的 Lambda 函数。
选项 2:将函数与依赖项一起打包 如果您不想使用 Lambda 层,则可以将所有依赖项直接包含在函数部署包中: 设置 Amazon Linux 环境:
docker run -it --rm -v $(pwd):/lambda amazonlinux:2 /bin/bash 在 Docker 内安装依赖项: 百胜更新-y yum install -y python3-pip python3-devel gcc libffi-devel pip3 安装 rpy2 cffi -t /lambda 退出
打包您的功能: 将您的 Python 函数文件(例如 lambda_function.py)添加到 /lambda 目录,然后压缩内容:
cd 拉姆达 zip -r 函数.zip .
上传到AWS Lambda: 将 function.zip 文件直接上传到您的 Lambda 函数。