安装自定义程序包的依赖项

时间:2019-10-03 16:46:32

标签: r package repository

我已经开发了一个本地程序包,该程序包依赖于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依赖项的唯一方法吗?

1 个答案:

答案 0 :(得分:0)

想通了。

问题是我一直在使用roxygen来做文档方面的误解。我假设它处理了Description文件的Imports:部分,但没有((1)(2))。因此,尽管NAMESPACE文件具有所有必要的importFrom(pool, ...)调用,但pool实际上并未出现在我的DESCRIPTION上。

在纠正了这种疏忽之后,使用remote::install_local("path/to/pkg")(或devtools::install())((3))工作了:它安装了我的软件包,并从CRAN中提取了其依赖项。