无权限安装rpy2

5 投票
4 回答
2155 浏览
提问于 2025-04-17 15:23

我在安装Python包rpy2时遇到了问题。我已经把R编译成了共享库,但因为没有管理员权限,所以我尝试用以下命令安装rpy2:

pip install -user rpy2

但是,我遇到了以下错误:

./rpy/rinterface/_rinterface.c:86:31: 致命错误: readline/readline.h: 没有这样的文件或目录

编译终止。

错误:命令'gcc'失败,退出状态为1

我已经把readline下载到了:

/some/path/readline-6.2/

在这里我可以看到readline.h(我也编译了readline以防万一)

我的问题:

我该如何让rpy2(或者pip)知道这个readline.h的存放位置,以避免头文件编译错误?

4 个回答

-2

有时候在Linux系统中,需要使用命令“sudo apt-get upgrade”来更新软件库,这样才能获取最新的库文件,这样可能会解决一些问题。

1

更简单的:

yum install readline-devel.x86_64

在CentOS 7上运行对我来说

对于Debian/Ubuntu

apt-get install libreadline-dev
2

你需要真正安装readline,而不仅仅是下载它,然后通过CFLAGSLDFLAGS来告诉rpy2去哪里找它。

试试这个方法。对我来说几乎成功了——我也遇到了同样的问题,只是多了一个麻烦,那就是rpy2似乎在链接系统的R,而不是我自己安装的版本。

首先,我把readline下载到~/src/readline-6.2,然后用./configure --prefix=$HOME && make && make install安装它。(你需要把它安装到某个地方,而不仅仅是下载源代码。)

然后我重新编译了R,命令是:

CPPFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
./configure --prefix=$HOME --enable-BLAS-shlib --enable-R-shlib
make
make install

现在R肯定在使用那个readline:

$ ldd ~/lib64/R/lib/libR.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007f8104207000)

我在家安装的Python也是一样的(3.2.3,因为h5py还不支持3.3):

CFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
./configure --prefix=$HOME
make
make install

再来一次:

$ ldd ~/lib/python3.2/lib-dynload/readline.cpython-32m.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007fbfff5c2000)

然后我下载了rpy2的源代码并构建它:

CFLAGS="-I/usr/local/include -I$HOME/include/" \
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -L$HOME/lib64 -L$HOME/lib" \
python3 setup.py build --r-home $HOME/lib64/R install

这看起来成功了,用ldd检查site-packages/rpy2里的.so文件,链接到了正确的libreadline……但是却链接到了系统的R,而不是我的版本,尽管我明确指定了--r-home

撰写回答