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

how to make devtools install_github to install dependency packages from CRAN instead of compiling source

编辑:见最后的编辑。

我在 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。似乎二进制与源包的默认行为是

An alternative (and the current default) is "both" which means ‘use binary if available and current, otherwise try source’. The action if there are source packages which are preferred but may contain code which needs to be compiled is controlled by getOption("install.packages.compile.from.source").

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

我试过在install_github中给一个type = "binary"参数,但是好像不行,可能不是每次安装依赖包都传进去?

编辑:

我发现情况有点复杂:

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

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

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

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

install_github 将参数传递给 devtools::install,然后 upgrade_dependencies= FALSE 甚至 dependencies = FALSE 可能就是您所追求的:

install_github("you/urPackage", upgrade_dependencies = FALSE)