Python / R ctypes库错误:" OSError:lib / libRrefblas.so:未定义的符号:xerbla _"

时间:2018-03-07 06:00:46

标签: r python-3.x amazon-web-services aws-lambda

首先,我是新手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 。我已经搜索谷歌寻找答案,但已经空了。任何建议将不胜感激!

2 个答案:

答案 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