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

How can I install a R package on a offline Debian machine?

我有一个未连接到互联网的 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

然而,检查列表时仍然找不到 "shiny" 包:

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’

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

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 应该让你安装 shiny。

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

apt-offline can fully update and upgrade an APT based distribution without connecting to the network, all of it transparent to APT.

apt-offline can be used to generate a signature on a machine (with no network). This signature contains all download information required for the APT database system. This signature file can be used on another machine connected to the internet (which need not be a Debian box and can even be running windows) to download the updates. The downloaded data will contain all updates in a format understood by APT and this data can be used by apt-offline to update the non-networked machine.

在离线 os (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

下载您的包

你正处于困境中。 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,因此如果您在 VM 上使用它,则不需要任何其他东西。

sudo apt-get 更新

sudo apt-get 安装 r-cran-digest


真不敢相信竟然这么简单。我花了很长时间搜索,只得到不好的答案。这个命令只是解决一切。 我用在 trisquel

在检查了 Whosebug 上的所有答案后,我无法准确找到如何在 Debian/linux 系统上安装 r-base。所以,我已经尝试过自己并能够通过以下步骤运行:

Run below command on internet working Linux machine in a custom folder.

apt-get download r-base r-base-core r-recommended libmpfr6 libisl19 cpp cpp-8 cpp-4  gcc cpp-8 binutils-common libbinutils binutils-x86-64-linux-gn  gfortran linux-libc-dev g++ g++-8 libstdc make dpkg-dev perl-base perl-modules-5.28 libperl5.28 ibgdbm-compat4 zip  unzip  libpaper-utils xdg-utils libblas3 libblas.so.3 libcairo2 libcurl4 libgfortran5 libglib2.0-0 libice6 libicu63 libjpeg62-turbo liblapack3 liblapack.so.3 libpango-1.0-0 libpangocairo-1.0-0 libpng16-16 libsm6 libtcl8.6 libtiff5 libtk8.6 libx11-6 libxext6 libxss1 libxt6 ucf libfontconfig1 libfreetype6 libpixman-1-0 libxcb-render0 libxcb-shm0 libxcb1 libxrender1 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libldap-2.4-2 libnghttp2-14 libpsl5 librtmp1 libssh2-1 libbsd0  x11-common fontconfig  libfribidi0 libthai0 libcairo2:amd64 libfontconfig1 libfreetype6 libpango-1.0-0:amd64 libpangoft2-1.0-0 fontconfig-config libkeyutils1 libkrb5support0 libkeyutils1 libkrb5support0 libkeyutils1 libkrb5support0 libsasl2-2 libldap-common fontconfig-config libharfbuzz0b libpaper1 libsasl2-modules-db libthai-data libdatrie1 libwebp6 libjbig0 libxft2 libx11-data libxau6 libxdmcp6 fonts-dejavu-core ttf-bitstream-vera fonts-liberation libgraphite2-3 lsb-base sensible-utils  r-cran-boot r-cran-cluster r-cran-foreign r-cran-kernsmooth r-cran-lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r-cran-mass r-cran-class r-cran-nnet r-cran-spatial r-cran-codetools r-cran-matrix

This will create debian files inside the folder.

`Execute tar -zcf folder.tar.gz folder`

将此folder.tar.gz复制到离线计算机中,进入文件夹后执行以下命令。

 dpkg -i *

现在输入

检查系统中的 R
R --version