无权限安装rpy2
我在安装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 个回答
有时候在Linux系统中,需要使用命令“sudo apt-get upgrade”来更新软件库,这样才能获取最新的库文件,这样可能会解决一些问题。
更简单的:
yum install readline-devel.x86_64
在CentOS 7上运行对我来说
对于Debian/Ubuntu
apt-get install libreadline-dev
你需要真正安装readline,而不仅仅是下载它,然后通过CFLAGS
和LDFLAGS
来告诉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
。