在没有管理员权限的情况下安装rpy2

5

我在安装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
你需要安装 readline 而非仅仅下载它,并使用 CFLAGS 和 LDFLAGS 将 rpy2 指向它。
尝试这种方法。对我来说几乎有效 - 我有同样的问题,只是多了一个 wrinkle,rpy2 似乎链接到系统 R 而不是我的 homedir 安装。
首先,我将 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,尽管使用了明确的--r-home参数。

谢谢Dougal。我按照这些步骤操作,但是仍然遇到了问题/path/to/python2.7/site-packages/rpy2/rinterface/_rinterface.so: undefined symbol: Rf_translateCharUTF8。顺便说一下,我认为你的错误可能是由于Rpy2从$PATH中查找R,并试图从中推断出R主目录。如果您更新$PATH以确保它在系统PATH之前看到$HOME/bin/,那么应该就没问题了。 - Amelio Vazquez-Reina

1
更简单:
yum install readline-devel.x86_64

在CentOS 7上为我运行

对于Debian / Ubuntu

apt-get install libreadline-dev

这两个都需要root权限吗? - BallpointBen

-2
有时在Linux中需要使用sudo apt-get upgrade来获取新的库,可能会起作用。

谢谢,但恐怕我没有权限这样做。还有其他方法可以让它工作吗? - Amelio Vazquez-Reina

-2

这是另一个选项,但是您需要根权限... sudo apt-get install libreadline-dev


1
当你在那里时:sudo apt-get install python-rpy2。但正如OP所说:没有管理员权限... - Dirk Eddelbuettel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接