【问题标题】:Offline install of R package and dependencies离线安装 R 包和依赖项
【发布时间】:2012-06-04 04:30:08
【问题描述】:

假设我需要在没有 Internet 连接的 (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,但找不到从本地文件安装源包的示例,包括它的依赖项。

【问题讨论】:

  • 好像repos="file://path/to/DVD" 可以工作。
  • 您应该使用此信息添加答案。

标签: r cran


【解决方案1】:

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

关键是将参数添加到reposcontriburl 的前面加上file://。所以在 Unixy 系统中可以这样做:

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

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

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

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

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

【讨论】:

  • 我不得不使用contriburl 而不是contrib.url
  • 该命令在大多数情况下可以正确安装包,但在安装时需要下载额外数据的包中失败,例如'stringi'。我手动下载数据,但是如何让R 知道数据路径吗?
  • 当我尝试这个时,我收到一个错误,上面写着“install.packages : error reading from connection”... 请帮帮我。我可以编写包来生成索引文件,但使用 contriburl 的 install.packages 失败
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 1970-01-01
      • 2018-06-17
      • 2018-11-11
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2018-09-04
      相关资源
      最近更新 更多