如何使devtools install_github从CRAN安装依赖包而不是编译源代码

问题描述 投票:0回答:1

编辑:见编辑结束。

我在github上有一个R包,我正在使用devtools::install_github来安装它,它也安装依赖包。

最近这个过程将安装httpuv作为源包,但在Mac中编译它会遇到automake(类似于this)的错误。我安装了automake,然后clang: error: unsupported option '-fopenmp'出错了。

问题和可能的解决方案1 2似乎相当复杂。我认为httpuv的CRAN版本可能对我有用,我不希望我的用户经历这么多错误并修复编译器错误。

我想从二进制文件中安装CRAN的所有依赖包。对于某些需要更新版本的软件包,我已在remote部分的软件包描述中指定了它。

我检查了install_github,然后install,然后install.packages。似乎二进制vs源包的默认行为是

另一种选择(和当前默认值)是“both”,这意味着“如果可用则使用二进制和当前,否则尝试源”。如果有源包是首选但可能包含需要编译的代码的操作由getOption(“install.packages.compile.from.source”)控制。

我的getOption("install.packages.compile.from.source")interactive。这实际上是我的首选行为。但是我从来没有看到交互式提示。

我试图在type = "binary"中给出一个install_github参数,但它似乎不起作用,也许它没有传递给每个依赖包安装?

编辑:

我发现情况有点复杂:

  1. 我的应用程序指定通过shiny在描述中安装remote github版本。 shiny指定在httpuv部分安装remote github版本。所以这实际上是预期的行为。
  2. 我不确定是否有可用的解决方案,除了在我的包中要求CRAN版本的shiny

编辑2:它比我以前的发现更复杂。

  1. 我在我的包描述中删除了remote部分,据说只需要CRAN版本。但是install_github仍然从github安装大多数依赖项。
  2. 我终于发现我安装了这些依赖github版本,所以他们在我的本地磁盘中的描述有github远程信息,install_github发现了这些信息并再次“升级”它们,即使它们中的一些没有变化。
  3. 所以我需要先卸载它们,只使用CRAN版本。

这里真正的问题是,如果依赖包已经是新的,则不应该安装它。它可能是a bug of devtools

r devtools
1个回答
1
投票

install_github将论据传递给devtools::install,并且upgrade_dependencies= FALSE甚至dependencies = FALSE可能就是你所追求的:

install_github("you/urPackage", upgrade_dependencies = FALSE)
© www.soinside.com 2019 - 2024. All rights reserved.