在我的64位Windows 10上安装依赖于Java/rJava的软件包时,我遇到了一个奇怪的问题:
> devtools::install_github("ropensci/tabulizer", INSTALL_opts = "--no-multiarch")
Downloading GitHub repo ropensci/tabulizer@master
from URL https://api.github.com/repos/ropensci/tabulizer/zipball/master
Installing tabulizer
Downloading GitHub repo ropensci/tabulizerjars@master
from URL https://api.github.com/repos/ropensci/tabulizerjars/zipball/master
Installing tabulizerjars
"C:/PROGRA~1/R/R-34~1.2/bin/x64/R" --no-site-file --no-environ --no-save --no-restore --quiet CMD INSTALL \
"C:/Users/binis/AppData/Local/Temp/Rtmpiw2khr/devtools4d7472ae39f9/ropensci-tabulizerjars-60b7cec" \
--library="C:/Users/binis/Documents/R/win-library/3.4" --install-tests
* installing *source* package 'tabulizerjars' ...
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
Error: package or namespace load failed for 'tabulizerjars':
.onLoad failed in loadNamespace() for 'rJava', details:
call: inDL(x, as.logical(local), as.logical(now), ...)
error: unable to load shared object 'C:/Users/binis/Documents/R/win-library/3.4/rJava/libs/i386/rJava.dll':
LoadLibrary failure: %1 is not a valid Win32 application.
Error: loading failed
Execution halted
*** arch - x64
ERROR: loading failed for 'i386'
* removing 'C:/Users/binis/Documents/R/win-library/3.4/tabulizerjars'
Installation failed: Command failed (1)
"C:/PROGRA~1/R/R-34~1.2/bin/x64/R" --no-site-file --no-environ --no-save --no-restore --quiet CMD INSTALL \
"C:/Users/binis/AppData/Local/Temp/Rtmpiw2khr/devtools4d744e067cae/ropensci-tabulizer-3aad163" \
--library="C:/Users/binis/Documents/R/win-library/3.4" --install-tests
ERROR: dependency 'tabulizerjars' is not available for package 'tabulizer'
* removing 'C:/Users/binis/Documents/R/win-library/3.4/tabulizer'
Installation failed: Command failed (1)现在我意识到这看起来像是我弄乱了Java版本或路径信息。但事实并非如此(据我所知):
> library(rJava)
> .jinit()
> .jcall("java/lang/System", "S", "getProperty", "java.version")
[1] "1.8.0_151"
> .jcall("java/lang/System", "S", "getProperty", "java.home")
[1] "C:\\Program Files\\Java\\jre1.8.0_151"
> .jcall("java/lang/System", "S", "getProperty", "sun.arch.data.model")
[1] "64"
> .jcall("java/lang/System", "S", "getProperty", "os.arch")
[1] "amd64"这表明操作系统架构和Java架构匹配(R也是64位),java.home设置正确,而且rJava在我的机器上运行良好。
现在我不确定我是否正确理解了错误消息,但似乎R在安装过程中试图加载32位版本的rJava,但失败了。我通过在我的机器上将java home更改为32位安装来进行测试:
> options(java.home="C:/Program Files (x86)/Java/jre1.8.0_151") #32-bit version
> library(rJava)
Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: inDL(x, as.logical(local), as.logical(now), ...)
error: unable to load shared object 'C:/Users/binis/Documents/R/win-library/3.4/rJava/libs/x64/rJava.dll':
LoadLibrary failure: %1 is not a valid Win32 application.错误是相同的,这支持了我的假设。然而,我不明白为什么R会在安装过程中尝试使用不同的Java版本,或者我如何阻止它。我已经测试了INSTALL_opts = c("--no-multiarch", "--no-test-load"), type="source"是否会执行任何操作,但错误保持不变...
发布于 2017-12-14 00:17:24
在我花了更多的时间在google/stackoverflow上之后,我发现install_github的语法显然与install.packages略有不同。使用“args”调用选项,而不是´INSTALL_opts´。因此,下面的命令将安装示例包,而不会出现“投诉”:
devtools::install_github("ropensci/tabulizer",
args = c("--no-multiarch", "--no-test-load"))我把这个留在这里,以防其他人遇到同样的问题。
https://stackoverflow.com/questions/47795124
复制相似问题