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

标签 python r gcc rpy2

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

pip install -user rpy2

但是,我收到以下错误:

./rpy/rinterface/_rinterface.c:86:31: fatal error: readline/readline.h: No such file or directory

compilation terminated.

error: command 'gcc' failed with exit status 1

我已经将 readline 下载到:

/some/path/readline-6.2/

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

我的问题:

如何使用 readline.hrpy2(或 pip)知道这个位置以避免 header 编译错误?

最佳答案

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

试试这个方法。它几乎对我有用 - 我有同样的问题,除了 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

这似乎是成功的,并且 ldding site-packages/rpy2 中的 .so 链接到正确的 libreadline...但是对于系统 R,而不是我的,尽管显式 --r-home

关于python - 在没有管理员权限的情况下安装 rpy2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794573/

相关文章:

r - 在 NA 的 R 中拆分单列数据框

python - 在Python中读取.dss数据库文件

python - multiprocessing.pool.map 是否删除映射对象?

使用名称重新排序因子水平

gcc - 错误为 "impossible constraint in asm"的 ARM 内联汇编代码

c++ - g++ -MG 标志的意外行为

c++ - MacOSX 上 Google Perftools CPU 分析器中的行号

python - 适用于 Appengine 的 Cython

Python迭代不进入if-elif

r - 一阶差分数据框