Install.packages在Rstudio控制台中安装源,但在使用Rscript时安装二进制

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

我正在开发一个支持与一个交替形状的库结构交互的包,它支持并行安装多个版本的包(RVClibrary,很快就在CRAN上)。最近,我遇到了一些奇怪的行为,我希望有人可以解释。

安装软件包时,有时可能会有一个晚于二进制版本的源版本。在这种情况下,源(未编译的C代码)尚未编译(通过......?),但包含的版本比已编译的二进制版本更高。以下是我的案例:

  There is a binary version available but the source version is later:
      binary source needs_compilation
rlang  0.2.0  0.3.4              TRUE

为用户选择是应该相对安装还是编译A或B.换句话说,如果你想要版本0.2.0或0.3.4(你需要Rtools)。

设置install.packages.compile.from.source选项时,不会给出此选项。

> options(install.packages.compile.from.source = "always")
> install.packages('rlang', lib = "C:\\test", quiet = TRUE, repos = "http://cran.us.r-project.org")

  There is a binary version available but the source version is later:
      binary source needs_compilation
rlang  0.2.0  0.3.4              TRUE

installing the source package ‘rlang’

源已安装。

但是当我创建一个简单的脚本(我将其命名为install_test.R)时:

packageName <- commandArgs(trailingOnly = TRUE)[1]

cat(packageName, '\n')

options(install.packages.compile.from.source = "always")
install.packages(packageName, lib = "C:\\test", quiet = TRUE, repos = "http://cran.us.r-project.org")

以下行为与R中的系统和直接在CMD中的行为相同。 (确保在环境变量PATH中有Rscript.exe的路径)

> system("Rscript.exe C:\\test\\install_test.R rlang")
rlang 

  There is a binary version available but the source version is later:
      binary source needs_compilation
rlang  0.2.0  0.3.4              TRUE

  Binaries will be installed
package 'rlang' successfully unpacked and MD5 sums checked

二进制文件已安装!

我需要能够始终安装源版本,因此我不会遇到依赖性问题。 ggplot2例如取决于>= 0.2.1已...

摘要

  • 我安装了Rtools 3.5(devtools可以使用这两种路径找到并且认为它不兼容......,但是从源代码安装在Rstudio中工作正常,而且(https://cran.r-project.org/bin/windows/Rtools/)CRAN说它兼容)
  • R版:
platform       x86_64-w64-mingw32
arch           x86_64
os             mingw32
system         x86_64, mingw32
year           2016
month          06
day            21
svn rev        70800
language       R
version.string R version 3.3.1 (2016-06-21)
nickname       Bug in Your Hair

(我的编辑在这里删除以保持清洁。请参阅我的答案(或历史)阅读更多)

r rscript install.packages
1个回答
0
投票

我尝试了不同的环境变量配置,以查看是否可以通过运行install.packages的Rscript.exe实例从源代码安装/编译。

(当它从Rstudio控制台工作时,它的工作方式不同(限制性较小)。它似乎识别了注册表项。它可以在不指定环境变量的情况下工作)。

  1. 设置MAKE变量(Sys.setenv(MAKE = 'C:\\Rtools\\bin\\make.exe'))(部分成功)
  2. 设置PATH变量(附加到开头) 包括所有Rtools bin dirs(C:\\Rtools\\bin;C:\\Rtools\\mingw_32;C:\\Rtools\\mingw_64)(SUCCEEDS) 仅包括Rtools C:\\Rtools\\bin(SUCCEEDS) 仅包含Rtools C:\\Rtools\\bin(到PATH变量的末尾)(SUCCEEDS) 仅包括Rtools C:\\Rtools\\mingw_32(FAILS) 仅包括Rtools C:\\Rtools\\mingw_64(FAILS)
  3. 只设置PATH而不是MAKE变量。

在设置以下属性的条件下:options(install.packages.compile.from.source = "always")

解决方案1: install.packages函数'检查'是否应该通过查找'MAKE'环境变量nzchar(Sys.which(Sys.getenv("MAKE", "make")))来尝试从源代码构建。不幸的是,如果你只指定MAKE环境变量,你必须提供一个完整的路径来使它(Sys.which)工作,它仍然不会找到所有必需的源构建工具(Rtools / bin)似乎是必要的并且没有崩溃任何澄清:

> Sys.setenv(MAKE = 'C:\\Rtools\\bin\\make.exe')
> system("Rscript.exe C:\\R_projecten\\test\\install_test.R rlang")

     There is a binary version available but the source version is later:
         binary source needs_compilation
   rlang  0.2.0  0.3.4              TRUE

   installing the *source* package 'rlang'

   Warning messages:
   1: running command '"C:/PROGRA~1/R/R-33~1.1/bin/x64/R" CMD INSTALL -l "C:\R_projecten\test\test4" C:\Users\SB947~1.FRO\AppData\Local\Temp\RtmpwbEcl6/downloaded_packages/rlang_0.3.4.tar.gz' had status 1 
   2: In install.packages(packageName, lib = "C:\\R_projecten\\test\\test4",  :
     installation of package 'rlang' had non-zero exit status

所以解决方案1是不够的,甚至可以用解决方案3代替:

   PATH : C:\Program Files\R\R-3.3.1\bin\x64; ....  ;C:\Rtools\bin; 
   MAKE : 

     There is a binary version available but the source version is later:
         binary source needs_compilation
   rlang  0.2.0  0.3.4              TRUE

   installing the source package 'rlang'

如图所示,仅在PATH中提供C:/Rtools/bin,并且没有MAKE变量就足够了。

先前描述的检查检查MAKE变量是否存在,并使用该值,否则它将查找程序名称make(默认提供给Sys.getenv)。仅指定PATH时,可以找到make(.exe)文件,并且不需要MAKE env var。具有额外的好处,已经指向Rtools / bin目录,显然需要更多的文件。

我仍然想知道哪些文件......

注意:检查nzchar(Sys.which(Sys.getenv("MAKE", "make")))不足以证明您的环境已准备好从源构建。

© www.soinside.com 2019 - 2024. All rights reserved.