是否可以在下载时为 R 包安装外部依赖项
Is it possible to install external dependencies for R package on download
我有一个 R 包,它对 github 上的 C 库有一定的依赖性,目前在回购协议中没有依赖性 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 中的文档,应列出这些依赖项:
"Dependencies external to the R system should be listed in the ‘SystemRequirements’ field, possibly amplified in a separate README file."
这是有道理的。我可以将如何安装这些 C 库依赖项放入 README 中,甚至可以将这些库放入 github 存储库(如果它们不是太大)。
然而,这很容易让人们下载变得一团糟,这就是为什么我喜欢 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 依赖项放入要在 devtools::install_github("github_repo/package_name")
下载和编译的 R 包中的唯一选项,或者 (2) 要求用户在 README 中安装所有这些依赖项,并希望他们做对了(不要没完没了地给我发电子邮件)?
这里可能有不明白的地方,请指正
tl;dr:我希望!
之前有相关的问题。从本质上讲,您希望(精心打造的)CRAN 依赖项(在定义明确的宇宙中工作)在主机操作系统中变得更加通用——其中有太多太多的变体。
以 XML、PostgreSQL、PNG 或 JPEG 的示例库为例。它们的名称(和版本)会因操作系统而异,所以遗憾的是,这真的很难。
[我确实有一个 RcppAPT 包,它允许您从 R 中查询 apt
的缓存,但它只解决流 'the other way' —— 当然只适用于一部分用户因为它对 Windows、macOS、RH/CentOS 等平台上的人没有用。 ]
我有一个 R 包,它对 github 上的 C 库有一定的依赖性,目前在回购协议中没有依赖性 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 中的文档,应列出这些依赖项:
"Dependencies external to the R system should be listed in the ‘SystemRequirements’ field, possibly amplified in a separate README file."
这是有道理的。我可以将如何安装这些 C 库依赖项放入 README 中,甚至可以将这些库放入 github 存储库(如果它们不是太大)。
然而,这很容易让人们下载变得一团糟,这就是为什么我喜欢 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 依赖项放入要在 devtools::install_github("github_repo/package_name")
下载和编译的 R 包中的唯一选项,或者 (2) 要求用户在 README 中安装所有这些依赖项,并希望他们做对了(不要没完没了地给我发电子邮件)?
这里可能有不明白的地方,请指正
tl;dr:我希望!
之前有相关的问题。从本质上讲,您希望(精心打造的)CRAN 依赖项(在定义明确的宇宙中工作)在主机操作系统中变得更加通用——其中有太多太多的变体。
以 XML、PostgreSQL、PNG 或 JPEG 的示例库为例。它们的名称(和版本)会因操作系统而异,所以遗憾的是,这真的很难。
[我确实有一个 RcppAPT 包,它允许您从 R 中查询 apt
的缓存,但它只解决流 'the other way' —— 当然只适用于一部分用户因为它对 Windows、macOS、RH/CentOS 等平台上的人没有用。 ]