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

时间:2018-02-26 19:00:09

标签: r devtools

编辑:请参阅最后的修改。

我在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
  3. 编辑2:它比我以前的发现更复杂。

    1. 我在我的包描述中删除了remote部分,据说只需要CRAN版本。但是install_github仍然从github安装大多数依赖项。
    2. 我终于发现我安装了这些依赖项github版本,所以他们在我本地磁盘中的描述有github远程信息,install_github找到了这些信息并再次“升级”它们,即使它们中的一些没有变化。
    3. 所以我需要先卸载它们,只使用CRAN版本。
    4. 这里真正的问题是,如果依赖包已经是新的,则不应该安装它。它可能是a bug of devtools

1 个答案:

答案 0 :(得分:2)

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

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