如何在离线 Debian 机器上安装 R 包?

Posted

技术标签:

【中文标题】如何在离线 Debian 机器上安装 R 包?【英文标题】:How can I install a R package on a offline Debian machine? 【发布时间】:2016-08-23 19:50:11 【问题描述】:

我有一个未连接到互联网的 Debian 虚拟机。然而,我仍然可以从我的本地机器上 scp 任何有互联网连接的文件。为了提供一点上下文,我试图在 VM 上托管一个闪亮的应用程序。

我仍然可以使用“apt-get”命令安装旧版本的 R 3.1.1:

sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-base-dev

但是,查看列表时仍然找不到“闪亮”的包:

sudo apt-cache search "^r-.*" | sort

所以,我正在考虑是否可以将“shiny.tar.gz”scp 到 VM 并在本地安装包?如何离线安装任何 R 包?

我尝试过类似的方法:

install.packages('/home/mli/R/dir_pkg/shiny/shiny_0.13.2.tar.gz', repos = NULL, type = "source")

然而,它没有通过,错误信息如下:

Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Error in type == "both" : 
comparison (1) is possible only for atomic and list types
Calls: install.packages
Execution halted

然后,我用另一个“R CMD”试了一下:

R CMD INSTALL /home/mli/R/dir_pkg/shiny/shiny_0.13.2.tar.gz

我收到错误消息,告诉我缺少依赖项:

* installing to library ‘/home/mli/R/x86_64-pc-linux-gnu-library/3.1’
ERROR: dependencies ‘httpuv’, ‘mime’, ‘jsonlite’, ‘xtable’, ‘digest’, ‘htmltools’, ‘R6’ are not available for package ‘shiny’
* removing ‘/home/mli/R/x86_64-pc-linux-gnu-library/3.1/shiny’

如何从源代码成功安装闪亮的包?我应该先安装所有依赖项和依赖项的依赖项吗?

【问题讨论】:

“R CMD INSTALL”命令不会自动查找和安装依赖,当依赖不满足时会拒绝安装包。可能有一种更简单的方法,但我只是在依赖项出现时检查它们(httpuv 是你被告知的更多),然后 R CMD 一个一个地安装它们。它们很容易找到,只需根据您在浏览器中下载闪亮包的链接导航到 r 项目页面(只需删除最后的闪亮部分),然后搜索您正在寻找的包。找到所需的所有依赖项通常需要 3 分钟左右。 【参考方案1】:

Shiny 有一些软件包依赖项,“R CMD INSTALL”不会为您找到它们,因此您需要手动获取它们。根据shiny的描述,它的依赖是: “Rcpp”、“httpuv”、“mime”、“jsonlite”、“xtable”、“digest”、“htmltools”、“R6”。 所以首先,从 cran 获取软件包(以下是当前版本,但它们会随着时间的推移而变化。注意以下是连接到互联网的计算机,您需要在继续之前将它们 scp 到离线计算机):

wget https://cran.r-project.org/src/contrib/Rcpp_0.12.4.tar.gz 
wget https://cran.r-project.org/src/contrib/httpuv_1.3.3.tar.gz 
wget https://cran.r-project.org/src/contrib/mime_0.4.tar.gz 
wget https://cran.r-project.org/src/contrib/jsonlite_0.9.19.tar.gz 
wget https://cran.r-project.org/src/contrib/digest_0.6.9.tar.gz 
wget https://cran.r-project.org/src/contrib/htmltools_0.3.5.tar.gz 
wget https://cran.r-project.org/src/contrib/R6_2.1.2.tar.gz 
wget https://cran.r-project.org/src/contrib/shiny_0.13.2.tar.gz

然后使用 R CMD INSTALL 以相同的顺序浏览它们。例如:

R CMD INSTALL Rcpp_0.12.4.tar.gz

一旦所有依赖项都存在,R CMD INSTALL 应该让您安装闪亮。

【讨论】:

完美运行!谢谢@rosscova!另外,感谢您为我列出所有“wget”!:)【参考方案2】:

要在 Debian 上离线安装一些软件包,您可以使用 apt-offline :

apt-offline 可以在不连接网络的情况下完全更新和升级基于 APT 的发行版,所有这些对 APT 都是透明的。

apt-offline 可用于在机器(无网络)上生成签名。此签名包含 APT 数据库系统所需的所有下载信息。此签名文件可用于连接到 Internet 的另一台机器(不必是 Debian 机器,甚至可以运行 Windows)来下载更新。下载的数据将包含 APT 可以理解的格式的所有更新,并且该数据可以被 apt-offline 用于更新未联网的机器。

在离线操作系统(Debian)上安装apt-offline,然后输入以下命令(导入丢失的密钥):

sudo apt-key exportall | sudo gpg --no-default-keyring --import --keyring /etc/apt/trusted.gpg

那你需要得到your_package_name的签名:

apt-offline set debian-install.sig --install-packages your_package_name

下一步,将debian-install.sig上传到在线系统并下载所需文件。

apt-offline get debian-install.sig --bundle debian-install.zip 

将 debian-install.zip 文件上传到离线系统,使用 apt-offline 工具安装它以更新 APT 数据库。

sudo apt-offline install debian-install.zip 

安装指定的包your_package_name

sudo apt-get install your_package_name

你可以使用windows机器下载你的包tuto

【讨论】:

谢谢@GAD3R!我以前从未使用过“apt-offline”,但探索它会很棒。然而,此时手动安装依赖项可能更直接。不过感谢您的回答! apt-offline 可以安装程序及其所有依赖项 我明白了。那么,我需要 scp “debian-install.sig” 到我的在线系统以生成“debian-install.zip”,然后将此 zip 文件上传回离线系统以完成安装?它适用于任何 R 包? apt-offline 可以找出所有需要的依赖项并构建到 zip 文件中?【参考方案3】:

你陷入困境。 R 包机制期望您连接以获取依赖项。也就是说,您可以获得一些帮助:

R> AP <- available.packages(contrib.url(options("repos")$repos[1]))
R> revs <- tools::package_dependencies("shiny", AP, recursive=TRUE)[[1]]
R> revs
 [1] "methods"   "utils"     "httpuv"    "mime"     
 [5] "jsonlite"  "xtable"    "digest"    "htmltools"
 [9] "R6"        "Rcpp"      "tools"     "stats"    
R> 

您现在可以再次查看AP 并将其输入download.packages()

另外,其中几个(全部?)在 较新的 Debian 发行版中,因此您可以在下载模式下使用 apt-get(可能按照其他问题中的建议使用 apt-offline)。

最后,我们确实提供了Docker container for shiny,所以如果你在你的虚拟机上使用它,你就不需要其他任何东西了。

【讨论】:

【参考方案4】:

sudo apt-get 更新

sudo apt-get install r-cran-digest


我无法相信这会如此简单。我花了很长时间搜索,得到的只是不好的答案。这个命令只是解决一切。 我在trisquel上用过

【讨论】:

以上是关于如何在离线 Debian 机器上安装 R 包?的主要内容,如果未能解决你的问题,请参考以下文章

关于如何让在离线环境下安装Python的pip第三方扩展包

有没有办法在离线机器上更新 Visual Studio 2013 中的 nuget?

如何在离线模式下运行 Jupyter Dash 应用程序

在离线模式下安装量角器 - webdriver-manager启动错误 - 我做错了什么

如何离线安装包?

如何在离线绘图上自定义或禁用右键菜单?