我有一个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 回答
tl;博士:我希望!
有早先的相关问题 . 从本质上讲,你希望拥有(精心打造的)CRAN依赖(在明确定义的宇宙中工作)在主机操作系统中变得更加通用 - 其中存在太多和太多的变体 .
以XML,PostgreSQL,PNG或JPEG为例 . 它们的名称(和版本)因操作系统而异,所以遗憾的是,这真的很难 .
[我确实有一个包RcppAPT,允许你以另一种方式查询
apt
's cache from R, but that only addresses flow ' - 当然只适用于一部分用户,因为它对Windows,macOS,RH / CentOS等人没用 . ]