首页 文章

是否可以在下载时为R包安装外部依赖项

提问于
浏览
0

我有一个R包,它对github上的C库有某些依赖关系,目前没有repo中的依赖C库 .

通常,我会使用以下命令从GitHub安装R包:

install.packages("devtools")
library(devtools)
install_github("github_repo/package_name")

R包使用的所有C代码自然位于子文件夹 package_name/src 内 . 但我很困惑如何释放R包所需的C库依赖项 .

根据"Writing R Extensions",https://cran.r-project.org/doc/manuals/r-release/R-exts.htmlk中的文档,应列出这些依赖项:

“R系统外部的依赖关系应列在'SystemRequirements'字段中,可能在单独的README文件中放大 . ”

那讲得通 . 我可以在README中放入如何安装这些C库依赖项,甚至将库放在github repo中(如果它们不是太大) .

然而,这很容易成为人们下载的混乱,这就是为什么我喜欢Docker文件,即在 Dockerfile 内,我会添加以下内容:

RUN apt-get update && apt-get install -y \
    make \
    clang \
    require_c_library1 \
    require_c_library2 \
    require_c_library3

是否可以在R软件包安装之前以这种方式加载这些C库依赖项(即 R CMD INSTALL 调用 R CMD SHLIB ,它在 Makevars 中安装所有C代码和C依赖项)?

或者是唯一的选择:(1)将每个C依赖项放在R包中,以便在 devtools::install_github("github_repo/package_name") 下载和编译,或者(2)要求用户在README中安装所有这些依赖项,并希望它们能够正确地完成(和不要无休止地给我发电子邮件)?

可能有一些我在这里不理解的东西,所以请纠正我

1 回答

  • 1

    tl;博士:我希望!

    有早先的相关问题 . 从本质上讲,你希望拥有(精心打造的)CRAN依赖(在明确定义的宇宙中工作)在主机操作系统中变得更加通用 - 其中存在太多和太多的变体 .

    以XML,PostgreSQL,PNG或JPEG为例 . 它们的名称(和版本)因操作系统而异,所以遗憾的是,这真的很难 .

    [我确实有一个包RcppAPT,允许你以另一种方式查询 apt 's cache from R, but that only addresses flow ' - 当然只适用于一部分用户,因为它对Windows,macOS,RH / CentOS等人没用 . ]

相关问题