安装自定义包的依赖
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 中提取了它的依赖项。
我开发了一个本地包,它依赖于 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 中提取了它的依赖项。