为 conda 构建 R-packages 时出错

Errors building R-packages for conda

我很难安装 Anaconda 存储库中不可用的 R-packages。到目前为止,我的尝试可以在这里找到 .

目前,我正在尝试按照 构建 conda 标题下 this article 的说明为 conda 构建 R-package rafalib R 包.

第一部分工作正常。

conda skeleton cran rafalib

输出:

Tip: install CacheControl to cache the CRAN metadata
Fetching metadata from http://cran.r-project.org/
Writing recipe for rafalib
Done

构建命令遇到错误

conda build r-rafalib

输出:

Removing old build environment
Removing old work directory
BUILD START: r-rafalib-1.0.0-r3.2.2_0
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ......
Solving package specifications: .
Error:  Packages missing in current linux-64 channels: 
  - r 3.2.2*
  - r-rcolorbrewer

我通过 conda 安装了 r 3.2.2-64 位,它运行没有问题。我也已经通过 conda 安装了 r-colorbrewer,我可以在 R 中毫无问题地使用该包。为什么我在尝试构建 conda 包时遇到这些错误?

我正在 Linux(Antergos,一个 Arch 衍生版本),内核为 4.4.5-1-ARCH。


更新 2015/04/19

感谢 ,我发现我可以通过在与我要安装的包相同的目录中单独构建它们来包含依赖项。这对我不起作用,但我还读到我可以在构建命令中使用 -c 包含一个频道,就像安装时一样。所以现在我做:

conda build -c r r-rafalib

这解决了所有的依赖问题,但是在获取、提取和链接包之后,它失败了。错误信息到此结束。

Removing old work directory
Source cache directory is: /home/joel/anaconda2/conda-bld/src_cache
Downloading source to cache: rafalib_1.0.0.tar.gz
Downloading http://cran.r-project.org/src/contrib/rafalib_1.0.0.tar.gz
rafalib_1.0.0. 100% |#######################| Time: 0:00:00   4.87 MB/s
Success
Extracting download
Package: r-rafalib-1.0.0-r3.2.2_0
source tree in: /home/joel/anaconda2/conda-bld/work/rafalib
+ mv DESCRIPTION DESCRIPTION.old
+ grep -v '^Priority: ' DESCRIPTION.old
+ /home/joel/anaconda2/envs/_build/bin/R CMD INSTALL --build .
sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook
Command failed: /bin/bash -x -e /home/joel/drafts/r-rafalib/build.sh

错误sh: symbol lookup error: sh: undefined symbol: rl_signal_event_hook和我在使用install.packages()时遇到的一样 .

有一些related discussion in this thread. I have tried to get around this error by installing different versions of ncurses, including this patched version, and I have tried to link the readline libraries, as suggested here,但我一直运行进入同样的错误。在这一点上我很迷茫,任何解决这个问题的帮助将不胜感激。

虽然我一开始遇到了不同的问题,但最终的解决方案与我在其他地方发布的相同 。为了完整起见,我将其添加到此处。


最后,我通过遵循 the approach recommended here 并将 anaconda 的 libreadline 符号链接到系统一来解决了 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

由于在使用 install.packages() 来自 withing R 时无法加载共享对象,我在安装一些依赖重的 R 包时仍然遇到问题。但是,更简单的包工作正常,我可以获得大部分依赖重来自 anacondas R-repositories 的包。