打开Anaconda Prompt,直接安装。安装过程中conda会下载对应版本的R以及R包。
conda install rpy2
安装完成后尝试引入模块,报错:
查看错误信息以及源代码,发现缺少环境变量R_HOME
。
添加环境变量:
不要在path中以新建环境变量的方式添加,而是新建单独的环境变量:
安装anaconda的过程略去,这里假设anaconda以及安装在用户的home目录下。
cd ~
conda install rpy2
Attention
使用conda安装rpy2时会另外安装一次R到anaconda的lib目录下,此时再通过当前用户调用R则是调用的anaconda的lib目录下安装的R,命令行的环境变量被改变了。如果需要用回系统中安装的R,则需要修改anaconda/bin目录下的R执行文件,文件部分内容大致如下。其实这基本上就是把系统中的这个/usr/bin/R
文件中关于R_HOME的部分修改到了anaconda3/bin
。
cat ~/anaconda3/bin/R
#!/bin/sh
# Shell wrapper for R executable.
R_HOME_DIR=/home/test/anaconda3/lib/R
if test "${R_HOME_DIR}" = "/home/test/anaconda3/lib/R"; then
case "linux-gnu" in
linux*)
run_arch=`uname -m`
case "$run_arch" in
x86_64|mips64|ppc64|powerpc64|sparc64|s390x)
libnn=lib64
libnn_fallback=lib
;;
*)
libnn=lib
libnn_fallback=lib64
;;
esac
if [ -x "/home/test/anaconda3/${libnn}/R/bin/exec/R" ]; then
R_HOME_DIR="/home/test/anaconda3/${libnn}/R"
elif [ -x "/home/test/anaconda3/${libnn_fallback}/R/bin/exec/R" ]; then
R_HOME_DIR="/home/test/anaconda3/${libnn_fallback}/R"
## else -- leave alone (might be a sub-arch)
fi
;;
esac
fi
if test -n "${R_HOME}" && \
test "${R_HOME}" != "${R_HOME_DIR}"; then
echo "WARNING: ignoring environment value of R_HOME"
fi
R_HOME="${R_HOME_DIR}"
export R_HOME
R_SHARE_DIR=/home/test/anaconda3/lib/R/share
export R_SHARE_DIR
R_INCLUDE_DIR=/home/test/anaconda3/lib/R/include
export R_INCLUDE_DIR
R_DOC_DIR=/home/test/anaconda3/lib/R/doc
export R_DOC_DIR
可以看到R_HOME_DIR
等环境变量被修改为指向anaconda/bin,此时再使用命令行安装R包就只能通过conda采用类似conda install -c r r-dplyr
的命令。如果使用sudo权限调用R安装R包或者通过RStudio-server,则是调用的系统环境中的R,用户环境中的R并不会改变。这样会造成在用户和系统环境下分别有两个环境的R。解决方式有两个:
conda uninstall r-base
~/anacnoda3/bin/R
中的环境变量对于上述情况,如果想要避免修改R的环境变量,直接使用pip安装就好。
pip3 install rpy2