R包和依赖项的脱机安装

假设我需要在没有互联网连接的(Linux)机器上安装一些软件包。 假设我下载了一个cran的副本,并将其刻录到一个DVD,并将其带到离线位置:

wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz 

我甚至可以添加一个PACKAGES文件,其中包含所有源代码包及其依赖关系的概述:

 library(tools) write_PACKAGES() 

我怎样才能使用这个离线安装一个源程序包,以解决和从本地文件安装依赖关系? 例如,有人想安装包ggplot2,它具有相当深的依赖性结构。 假设ggplot2的源代码包及其所有依赖关系在当前工作目录中作为源包提供。 如果我做:

 install.packages("ggplot2_0.9.1.tar.gz", repos=NULL) 

这会导致错误,因为依赖关系根本没有解决。 或者:

 install.packages(list.files(pattern="*.tar.gz"), repos=NULL) 

但是,这也忽略了依赖结构,并尝试按字母顺序安装包,这也将失败。

我看着available.packagescontrib.url但我找不到一个从本地文件安装源包的例子,包括它的依赖关系。

Joshua Ulrich在这个问题的评论中给出了正确的答案:

关键是将参数前缀为file:// reposcontriburl 。 所以在Unixy系统中可以这样做:

 install.packages("ggplot2", contriburl="file:///path/to/packages/") 

这假设所有必需的源包,以及PACKAGES索引文件都可以在/path/to/packages 。 如果不存在PACKAGES文件,则应首先使用以下命令生成该文件:

 library(tools) write_PACKAGES("/path/to/packages/") 

这将生成该目录中find的所有源代码包的索引。 请注意,在该示例中, file:后面有3个斜杠file:前缀。 第三个斜杠表示相对于文件系统根目录的path。

reposcontriburl参数之间的区别在于, repos会将另一个/src/contrib附加到指定的path,因为这通常位于官方CRAN存储库镜像中的源包。

参照上面的Answer,如果安装在Windows中,那么write_PACKAGES()会在'/ path / to / packages /'目录下生成两个文件:PACKAGES和PACKAGES.gz,其中放置所有的zip文件。 文件PACKAGES.gz应该在install.packages()函数正确能够读取单独的PACKAGES文件之前被删除,否则“无法打开压缩文件”错误出现。

在离线安装期间,我遇到了同样的问题。 不知何故,它不能通过命令行工作。

我下载,提取所有的依赖关系(保持检查最小版本需要),并粘贴到库文件夹中的文件夹。 这样只有我的问题得到解决。