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

4 回答 4

2

您需要实际安装 readline,而不仅仅是下载它,然后使用and指向rpy2它。CFLAGSLDFLAGS

试试这个方法。它几乎对我有用 - 我有同样的问题,除了 rpy2 似乎链接到系统 R 而不是我的 homedir 安装的额外皱纹。

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

然后我用

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.sossite-packages/rpy2链接到右侧libreadline……但指向系统R,而不是我的,尽管有明确的--r-home.

于 2013-02-12T01:44:17.787 回答
1

更简单 :

yum install readline-devel.x86_64

在centos 7上为我运行

对于 debian/ubuntu

apt-get install libreadline-dev
于 2016-04-04T11:39:33.503 回答
-2

这是另一种选择,但您也需要 root 权限... sudo apt-get install libreadline-dev

于 2013-02-10T05:06:49.333 回答
-2

有时在 linux 中需要 sudo apt-get 升级,以获取新闻库,可能有效

于 2013-02-10T04:52:08.390 回答