我在安装Python软件包rpy2时遇到问题.我已经将R编译为共享库,但我没有管理员权限,因此我尝试使用以下命令安装rpy:
pip install -user rpy2
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
./rpy/rinterface/_rinterface.c:86:31:致命错误:readline/readline.h:没有这样的文件或目录
编译终止.
错误:命令'gcc'失败,退出状态为1
我已下载readline到:
/some/path/readline-6.2/
Run Code Online (Sandbox Code Playgroud)
在哪里我可以看到readline.h(我也编译readline以防万一)
如何避免头编译错误rpy2(或点)知道这个位置readline.h?
您需要实际安装 readline,而不仅仅是下载它,然后使用和指向rpy2它。CFLAGSLDFLAGS
尝试这种方法。它几乎对我有用 - 我有同样的问题,除了 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
Run Code Online (Sandbox Code Playgroud)
R 现在肯定正在使用该 readline:
$ ldd ~/lib64/R/lib/libR.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007f8104207000)
Run Code Online (Sandbox Code Playgroud)
我在家里安装的 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
Run Code Online (Sandbox Code Playgroud)
然后再次:
$ ldd ~/lib/python3.2/lib-dynload/readline.cpython-32m.so | grep readline
libreadline.so.6 => /home/dsutherl/lib/libreadline.so.6 (0x00007fbfff5c2000)
Run Code Online (Sandbox Code Playgroud)
然后我下载了 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
Run Code Online (Sandbox Code Playgroud)
这似乎很成功,并且ldd将.sossite-packages/rpy2链接到右侧libreadline......但到系统R,而不是我的,尽管明确的--r-home.