首先,我是新手R,AWS和蟒蛇人。所以我试图使用rpy2在AWS Lambda中运行带有嵌入式R代码的python脚本。我按照here指令在EC2实例上创建了一个Lambda包(使用python 3.4进行了修改)。根据控制台收到的以下错误,似乎在使用ctypes加载R库时会发生一些时髦的事情:
OSError:lib / libRrefblas.so:undefined symbol:xerbla _
测试文件(py_test.py)如下所示:
import os
import ctypes
for file in os.listdir('lib'):
if os.path.isfile(os.path.join('lib', file)):
ctypes.cdll.LoadLibrary(os.path.join('lib', file))
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)
我的虚拟环境中有 lib / libRrefblas.so 。我已经搜索谷歌寻找答案,但已经空了。任何建议将不胜感激!
答案 0 :(得分:0)
如果你能得到回溯,那可能会有所帮助,但我怀疑问题在于它在错误的地方寻找xerbla_。是否在RLIBS的路径中定义了xerbla_?也许在libR.so?
答案 1 :(得分:0)
证明R随附的BLAS损坏。最好的选择是确保要在构建R的计算机上安装BLAS和Lapack,并查看是否可以使用这些库进行构建。
因此,步骤是先卸载R,然后运行
yum -y install lapack-devel.x86_64 lapack.x86_64
yum -y install blas -devel
yum -y install R.x86_64
检查libRrefblas.so是否仍已安装。 如果具有-尝试删除该文件,然后查看它是否默认为系统BLAS。如果由于仍然在寻找libRrefblas.so而收到错误消息
rm lib/libRrefblas.so
cp /usr/lib64/libblas.so.3 lib/
mv lib/libblas.so.3 lib/libRrefblas.so