【问题标题】:AWS Lambda Python/R rpy2 issue: "Unable to import module 'py_test': No module named 'rpy2.rinterface._rinterface'"AWS Lambda Python/R rpy2 问题:“无法导入模块‘py_test’:没有名为‘rpy2.rinterface._rinterface’的模块”
【发布时间】:2018-03-07 04:25:23
【问题描述】:

首先,我是 R、AWS 和 python 的新手。所以我正在尝试使用 rpy2 获取一个在 AWS Lambda 中运行的嵌入式 R 代码的 python 脚本。我按照说明here(修改为使用python 3.4)在EC2实例上创建了一个Lambda包。该脚本在 EC2 虚拟环境中运行良好,但是当上传到 AWS 并进行测试时,我收到错误:

无法导入模块“py_test”:没有名为“rpy2.rinterface._rinterface”的模块

测试文件 (py_test.py) 看起来像这样(如您所见,我尝试了各种方法来尝试包含 rpy2 模块等):

import os

os.environ["R_HOME"] = os.getcwd()
os.environ["R_USER"] = os.path.join(os.getcwd(), 'rpy2')
os.environ["R_LIBS"] = os.path.join(os.getcwd(), 'library')
os.environ["LD_LIBRARY_PATH"] = os.path.join(os.getcwd(), 'lib')

import sys  
sys.path.append(os.path.join(os.getcwd(),'rpy2'))

import rpy2
from rpy2 import robjects

def test_handler(event, context):
    robjects.r('''
        f <- function(r, verbose=FALSE) {
            if (verbose) {
                cat("I am calling f().\n")
            }
            2 * pi * r
        }
        print(f(3))
        ''')

test_handler(None,None)

我不确定这些环境变量,但这就是我在互联网上找到的。我已经搜索谷歌寻找答案,但已经空了。任何建议将不胜感激!

【问题讨论】:

    标签: python r amazon-web-services aws-lambda rpy2


    【解决方案1】:

    我不相信 rpy2 可以像从 lambda 那样直接导入。

    您需要将 rpy2 安装在包含代码和 zip 的目录中,然后将 zip 文件加载到 AWS。

    看到这个https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html

    编辑

    好的。您似乎缺少链接的教程中的一些步骤。确保从 lib 目录加载 R 共享库,并确保 lambda_handler 函数具有相同的通用功能。

    【讨论】:

    • 是的,我确实这样做了。该脚本位于一个包含所有必要 R 库、rpy2 等的包中,根据包含的链接,该包贯穿了设置 python/R lambda 包的过程。
    • 啊,是的,当我尝试使用 ctypes 加载库时,我收到错误“OSError: lib/libRrefblas.so: undefined symbol: xerbla_”。应该提到的,我也无法解决。 :-/
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2018-08-01
    • 2018-11-16
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多