如何让 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"
参数,但是好像不行,可能不是每次安装依赖包都传进去?
编辑:
我发现情况有点复杂:
- 我的应用程序指定通过描述中的
remote
安装 shiny
github 版本。 shiny
也指定在 remote
部分安装 httpuv
github 版本。所以这实际上是预期的行为。
- 我不确定是否有可用的解决方案,除了在我的包中需要
shiny
的 CRAN 版本。
编辑 2:它比我之前的发现更复杂。
- 我删除了包描述中的
remote
部分,据说只需要 CRAN 版本。但是 install_github
仍然安装来自 github. 的大多数依赖项
- 我终于发现我安装了这些依赖项 github 版本,所以它们在我的本地磁盘中的描述有 github 远程信息,并且
install_github
找到了这些信息并且 "upgrade" 再次使用它们,即使其中一些没有变化。
- 所以我需要先卸载它们,只使用CRAN版本。
这里真正的问题是,如果一个依赖包已经是新的,就不应该安装它。可以是 a bug of devtools.
install_github
将参数传递给 devtools::install
,然后 upgrade_dependencies= FALSE
甚至 dependencies = FALSE
可能就是您所追求的:
install_github("you/urPackage", upgrade_dependencies = FALSE)
编辑:见最后的编辑。
我在 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"
参数,但是好像不行,可能不是每次安装依赖包都传进去?
编辑:
我发现情况有点复杂:
- 我的应用程序指定通过描述中的
remote
安装shiny
github 版本。shiny
也指定在remote
部分安装httpuv
github 版本。所以这实际上是预期的行为。 - 我不确定是否有可用的解决方案,除了在我的包中需要
shiny
的 CRAN 版本。
编辑 2:它比我之前的发现更复杂。
- 我删除了包描述中的
remote
部分,据说只需要 CRAN 版本。但是install_github
仍然安装来自 github. 的大多数依赖项
- 我终于发现我安装了这些依赖项 github 版本,所以它们在我的本地磁盘中的描述有 github 远程信息,并且
install_github
找到了这些信息并且 "upgrade" 再次使用它们,即使其中一些没有变化。 - 所以我需要先卸载它们,只使用CRAN版本。
这里真正的问题是,如果一个依赖包已经是新的,就不应该安装它。可以是 a bug of devtools.
install_github
将参数传递给 devtools::install
,然后 upgrade_dependencies= FALSE
甚至 dependencies = FALSE
可能就是您所追求的:
install_github("you/urPackage", upgrade_dependencies = FALSE)