从GitHub装R包的错误
最近复现文献需要装一个R包。作者给的安装方式是install_github
。
# install.packages("devtools")
devtools::install_github("caravagn/revolver")
试图安装。
······
Error: Failed to install 'unknown package' from GitHub:
schannel: failed to receive handshake, SSL/TLS connection failed
咦,出错了,还是SSL/TLS connection failed
,没见过。
google一下,有人说可以添加一个环境变量。
Sys.setenv(CURL_CA_BUNDLE="C:/Users/sssimonyang/Documents/R/win-library/3.6/openssl/cacert.pem")
至于这个cacert.pem是什么呢。stackoverflow上有人讲。
cacert.pem is a bundle of CA certificates that you use to verify that the server is really the correct site you're talking to (when it presents its certificate in the SSL handshake). The bundle can be used by tools like curl or wget, as well as other TLS/SSL speaking software. The bundle should contain the certificates for the CAs you trust. This bundle is sometimes referred to as the "CA cert store".
也就是说,这是openssl软件用来进行TLS/SSL 连接需要的CA证书。
在你的电脑上,它的位置应该在R安装外部库使用的文件夹中的openssl文件夹内,如果没有openssl文件夹,应该安装这个包。
install.packages('openssl')
你也可以在cmd中输入:
git config --global http.sslCAInfo C:\Users\sssimonyang\Documents\R\win-library\3.6\openssl\cacert.pem
这种方式也是可以的。
但是也有人说不需要进行任何操作,等一会就行了,怪不得我之前没有遇到过这种错误。
在实测中,我也确实发现这个东西的有效性不是那么强。
使用了之后。

还是失败,等了几分钟。

中间我没有进行任何操作,只是玩了几分钟手机,就可以正常下载了。
猜想
对于这种玄学情况,我觉得应该是因为GitHub网站的原因。
GitHub网站不允许过于频繁的连接,当连接频繁的时候,它需要一个CA证书来进行验证。但是使用CA证书后也不能进行频繁连接,所以有时候直接就成功了,有时候就会出现仍然失败的情况。
其实问题的核心还是在于从网络上下载包,我们可以从GitHub上下载包的压缩zip文件后从本地安装。
install.packages(<path_to_package>, repos = NULL, type="source")
这样就可以规避网络相关的各种问题。
网友评论