编辑:见编辑结束。
我在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
参数,但它似乎不起作用,也许它没有传递给每个依赖包安装?
编辑:
我发现情况有点复杂:
shiny
在描述中安装remote
github版本。 shiny
指定在httpuv
部分安装remote
github版本。所以这实际上是预期的行为。shiny
。编辑2:它比我以前的发现更复杂。
remote
部分,据说只需要CRAN版本。但是install_github
仍然从github安装大多数依赖项。install_github
发现了这些信息并再次“升级”它们,即使它们中的一些没有变化。这里真正的问题是,如果依赖包已经是新的,则不应该安装它。它可能是a bug of devtools。
install_github
将论据传递给devtools::install
,并且upgrade_dependencies= FALSE
甚至dependencies = FALSE
可能就是你所追求的:
install_github("you/urPackage", upgrade_dependencies = FALSE)