尝试使用rpy2从python库rJava时出错
当我试图使用尝试使用rpy2从python库rJava时出错,r,python-3.x,rpy2,rjava,R,Python 3.x,Rpy2,Rjava,当我试图使用rpy2包从Python加载rJava时遇到问题。我搜索并阅读了许多问题,但没有一个能解决我的问题 我在我的R环境中安装了rJava正常工作 (base) pri@pri:~$ R R version 3.6.3 (2020-02-29) -- "Holding the Windsock" Copyright (C) 2020 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-b
rpy2
包从Python加载rJava
时遇到问题。我搜索并阅读了许多问题,但没有一个能解决我的问题
我在我的R环境中安装了rJava
正常工作
(base) pri@pri:~$ R
R version 3.6.3 (2020-02-29) -- "Holding the Windsock"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
> library(data.table)
data.table 1.12.8 using 4 threads (see ?getDTthreads). Latest news: r-datatable.com
> library(rJava)
>
然而,当我尝试使用rpy2
从Python加载它时,我得到了错误:
(base) pri@pri:~$ python3
Python 3.7.7 (default, Mar 26 2020, 15:48:22)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rpy2.robjects as robjects
>>> robjects.r('''library(data.table); library(rJava)''')
R[write to console]: data.table 1.12.8 using 4 threads (see ?getDTthreads). Latest news: r-datatable.com
R[write to console]: Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/home/pri/R/x86_64-pc-linux-gnu-library/3.6/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file: No such file or directory
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pri/anaconda3/lib/python3.7/site-packages/rpy2/robjects/__init__.py", line 416, in __call__
res = self.eval(p)
File "/home/pri/anaconda3/lib/python3.7/site-packages/rpy2/robjects/functions.py", line 198, in __call__
.__call__(*args, **kwargs))
File "/home/pri/anaconda3/lib/python3.7/site-packages/rpy2/robjects/functions.py", line 125, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
File "/home/pri/anaconda3/lib/python3.7/site-packages/rpy2/rinterface_lib/conversion.py", line 44, in _
cdata = function(*args, **kwargs)
File "/home/pri/anaconda3/lib/python3.7/site-packages/rpy2/rinterface.py", line 623, in __call__
raise embedded.RRuntimeError(_rinterface._geterrmessage())
rpy2.rinterface_lib.embedded.RRuntimeError: Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/home/pri/R/x86_64-pc-linux-gnu-library/3.6/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file: No such file or directory
并根据linux设置正确配置:
(base) pri@pri:~$ cat /usr/lib/R/etc/ldpaths | grep R_JAVA_LD_LIBRARY_PATH
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/server}
if test -n "${R_JAVA_LD_LIBRARY_PATH}"; then
R_LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${R_JAVA_LD_LIBRARY_PATH}"
出于好奇,我还尝试将其附加到R的.libPaths()
,但没有成功:
JDBC_exe = "/usr/lib/jvm/default-java/lib/server/"
robjects.r('''.libPaths(c('{}', .libPaths()))'''\
.format(JDBC_exe))
任何关于我在此处缺少的内容以及如何修复此问题的指针。当确保环境变量
LD\u LIBRARY\u PATH
的值与此命令的输出兼容时,大多数与动态链接相关的问题都应得到解决:
python -m rpy2.situation LD_LIBRARY_PATH
python -m rpy2.situation LD_LIBRARY_PATH