我有一个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库依赖项。
根据“编写R扩展”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中安装所有这些依赖项,以及希望他们能正确地做到(并且不要无休止地给我发电子邮件)?
这里可能有一些我不理解的东西,所以请纠正我
答案 0 :(得分:1)
tl;博士:我希望!
之前有相关问题。从本质上讲,你希望拥有(精心打造的)CRAN依赖项(在明确定义的宇宙中工作)在主机操作系统中变得更加通用 - 其中存在太多,变体太多。
获取XML,PostgreSQL,PNG或JPEG的示例库。他们的名字(和版本)在操作系统中会有所不同,所以很遗憾,这真的很难。
[我确实有一个包RcppAPT,它允许您从R查询apt
的缓存,但这只能解决流的问题,反之亦然。 - 当然只适用于一部分用户,因为它对Windows,macOS,RH / CentOS等人没用。 ]