如何安装不在conda存储库中的R-package?

时间:2016-04-15 16:09:08

标签: r anaconda readline ncurses conda

我正在使用Anaconda来管理我的R-installation。它适用于Anaconda提供的R-channel中可用的包,但是我在安装Anaconda回购中未包含的包时遇到了麻烦。

我尝试了一些不同的方法,下面列出了它们的错误输出。

1。 install.packages('rafalib')

建议在此工作conda - How to install R packages that are not available in "R-essentials"?。我的.libPaths()指向'/home/user/anaconda2/lib/R/library'

输出:

--- Please select a CRAN mirror for use in this session ---
Error in download.file(url, destfile = f, quiet = TRUE) : 
  unsupported URL scheme
Error: .onLoad failed in loadNamespace() for 'tcltk', details:
  call: fun(libname, pkgname)
  error: Can't find a usable init.tcl in the following directories: 
    /opt/anaconda1anaconda2anaconda3/lib/tcl8.5 ./lib/tcl8.5 ./lib/tcl8.5 ./library ./library ./tcl8.5.18/library ./tcl8.5.18/library

This probably means that Tcl wasn't installed properly.

我从conda频道tcl安装了r-old,但install.packages()仍然发出了相同的错误消息。

2。 options(menu.graphics=FALSE)然后install.packages('rafalib')

我有一个镜子列表并选择了一个。

输出:

Selection: 15
trying URL 'http://cran.utstat.utoronto.ca/src/contrib/rafalib_1.0.0.tar.gz'
Content type 'application/x-gzip' length 11798 bytes (11 KB)
==================================================
downloaded 11 KB

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook

The downloaded source packages are in
        ‘/tmp/Rtmphwpta0/downloaded_packages’
Warning message:
In install.packages("rafalib") :
  installation of package ‘rafalib’ had non-zero exit status

2和3均来自Disable/suppress tcltk popup for CRAN mirror selection in R

3。在~/.Rprofile

中设置镜像

在尝试install.packages()之前,我将以下内容添加到~/.Rprofile

## Default repo
local({r <- getOption("repos");
       r["CRAN"] <- "http://cran.us.r-project.org"; 
       options(repos=r)})

输出:

trying URL 'http://cran.us.r-project.org/src/contrib/rafalib_1.0.0.tar.gz'
Content type 'application/x-gzip' length 11798 bytes (11 KB)
==================================================
downloaded 11 KB

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook

The downloaded source packages are in
        ‘/tmp/RtmppIz9rT/downloaded_packages’
Warning message:
In install.packages("rafalib") :
  installation of package ‘rafalib’ had non-zero exit status

4。将下载方法设置为'curl'或'wget'。

保留新的~/.Rprofile configuration。我想这不是必要的,因为包现在似乎正在下载,但我测试它以防万一。

输出:

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook
Warning in download.packages(pkgs, destdir = tmpd, available = available,  :
  download of package ‘rafalib’ failed
Warning message:
In download.file(url, destfile, method, mode = "wb", ...) :
  download had nonzero exit status

5。手动download of rafalib

install.packages('../Downloads/rafalib_1.0.0.tar.gz', repos=NULL, type='source')

输出:

sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook
Warning message:
In install.packages("../Downloads/rafalib_1.0.0.tar.gz", repos = NULL,  :
  installation of package ‘../Downloads/rafalib_1.0.0.tar.gz’ had non-zero exit status

6。从rafalib

构建conda包

我为此Errors building R-packages for conda打开了一个单独的问题。简而言之,它抱怨我已经安装了缺少的依赖项。 更新我得到了一个依赖性问题,我现在陷入了与我的其他方法相同的rl_signal_event_hook错误。

7。 sudo ln /usr/lib/libncursesw.so.6 /usr/lib/libncursesw.so.5

根据https://github.com/conda/conda/issues/1679,但它并没有为我解决问题。

所以看起来我现在可以正常下载软件包,但安装失败了。我在sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook中使用R irkernel时看到了错误消息Jupyter Notebook,但它从未妨碍我的工作。通过anaconda运行python时,我从未见过与该错误消息相关的任何内容。

我没有想法。有谁知道如何安装anaconda未提供的R-packages,例如rafalibswirl

我在Linux(Antergos,Arch衍生物)上使用内核4.4.5-1-ARCH。

更新2016/04/15

有一些related discussion in this thread。我试图通过安装不同版本的ncurses来解决这个错误,包括this patched version,我试图链接readline库as suggested here,但我一直遇到同样的错误。我在这一点上很失落,任何帮助解决这个问题都将非常感激。

2 个答案:

答案 0 :(得分:5)

有关管理和不在Anaconda R中的软件包的详细帖子:http://ihrke.github.io/conda.html

基本上是使用命令:

conda skeleton cran <package_name>
conda build <package_name>

如果软件包的依赖关系也不在Anaconda中:

conda skeleton cran <dependency1>
conda skeleton cran <dependency2>
conda build <package_name>

基本上我同意这篇文章说我不明白install.packages()如何与Anaconda合作。我似乎看到的是,Anaconda创建了一个R环境,其中保存了从install.packages()安装的所有软件包。

每当我使用R在Jupyter工作时,我都会使用此环境,并且能够访问我使用install.packages()

安装的所有软件包

答案 1 :(得分:2)

最后,我通过跟踪the approach recommended here并将anaconda的libreadline符号化到系统1来解决rl_event_hook问题:

mv ~/anaconda3/lib/libreadline.s.6.2 ~/anaconda3/lib/libreadline.s.6.2.bak
ln -s /usr/lib/libreadline.so.6.3 ~/anaconda3/lib/libreadline.s.6.2

由于在使用带有R的install.packages()时无法加载共享对象,我仍然无法安装一些依赖性很强的R-package。但是,更简单的包工作正常,我可以从大多数依赖重包中获取anacondas R-repositories。