安装自定义包的依赖

Install dependencies of custom package

我开发了一个本地包,它依赖于 CRAN 上可用的其他包(例如,pool)。因此,当我尝试使用标准

安装包时
install.packages("/path/to/package",
                 repos = NULL,
                 type = "source")

我收到一个错误,因为没有安装依赖项。 install.packages 有一个参数 dependencies ,默认情况下会尝试安装这些依赖项。但是,如手册页所述(并在下面的链接问题中评论),repos = NULL 表示依赖项被忽略。

为了解决这个问题,我使用包 miniCRAN 创建了一个包含我的包的回购协议,希望我可以做一个 repos = c("myRepo", getOption("repos")) 让它工作。

现在我可以使用

安装我的包了
install.packages("package",
                 repos = c("/path/to/repo", getOptions("repos"),
                 type = "source")

但前提是我已经安装了 pool。如果没有,我仍然会得到一个错误,因为它找不到依赖项。

所以我调用了 miniCRAN::addPackage("pool"),它将那个包及其许多依赖项添加到我的存储库中,如果我调用 miniCRAN::pkgAvail(),它们都会出现。

但是,如果我再次尝试安装我的软件包,我仍然会收到 there is no package called 'pool' 错误。

有趣的是,如果我尝试从存储库安装 pool 本身,它会起作用。

install.packages("pool",
                 repos = "/path/to/repo",
                 type = "source")
install.packages("package",
                 repos = "/path/to/repo",
                 type = "source")

然而,显然,这种方式胜过将 pool 添加到存储库的要点:我还不如从 CRAN 安装它。

那么这里发生了什么,这真的是安装本地包 它们的 CRAN 依赖项的唯一方法吗?

想通了。

问题是我对 roxygen 的误解,我一直将其用于我的文档。我假设它处理了 DESCRIPTION 文件的 Imports: 部分,但它没有处理 ((1), (2))。因此,虽然 NAMESPACE 文件具有所有必要的 importFrom(pool, ...) 调用,但 pool 实际上并不在我的描述中。

修复该疏忽后,使用 remote::install_local("path/to/pkg")(或 devtools::install())((3))起作用:它安装了我的包并从 CRAN 中提取了它的依赖项。