【问题标题】:Error When Installing Packages with Dependencies from Local Repo从本地存储库安装具有依赖项的软件包时出错
【发布时间】:2016-07-29 13:16:25
【问题描述】:

当软件包有依赖项时,我在离线安装软件包时出错。这与this question 非常相似。我已按照那里的说明进行离线安装。 所以我已经将所有 CRAN 包安装到一个目录并创建了 PACKAGES 文件。

但该答案中概述的过程似乎存在一个微妙的错误

我可以使用以下命令从 Linux 上的本地 repo 安装包,没有问题,即不指定 repo:

install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",     lib="/usr/lib64/R/library")

但是,如果我想获取依赖项,我需要使用例如将其指向 repo 及其 PACKAGES 文件

install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",     lib="/usr/lib64/R/library", repos="file:///software/r_packages/")

但如果我这样做,我会得到错误:

Warning message:
package ‘/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz’ is not available (for R version 3.2.3)

我已经测试并确认它正在读取 PACKAGES 文件,因为如果我在 PACKAGES 的 ZillowR 条目中输入错字,我会收到一个错误,表明它无法正确解析条目。

【问题讨论】:

  • @Thomas 现在刚刚尝试过 - 不幸的是同样的错误
  • 是的,谢谢! (您可以输入答案以便我接受答案吗?)我最初将源文件放在软件/r_packages/src/contrib 中。当我将它们复制回 software/r_packages 但将 PACKAGES 文件保存在 software/r_packages/src_contrib 时,它工作正常。我猜当安装程序点击 PACKAGES 文件时,它会返回 2 个级别以找到实际源

标签: r installation packages offline cran


【解决方案1】:

这里应该对你有用的是:

install.packages(pkgs = "ZillowR", type = "source", 
                 lib = "/usr/lib64/R/library", 
                 contriburl = "file:///software/r_packages/")

install.packages() 的参数可能非常庞大,并且所有默认值都配置为与从 CRAN(或其他远程存储库)安装的软件包一起使用。要解开这里发生的事情,请考虑使用以下代码从 CRAN 安装 ZillowR:

install.packages(pkgs = "ZillowR")

这是设置了很多默认值,所以你实际上是在调用:

install.packages(pkgs = "ZillowR", lib = .libPaths()[1], 
                 repos = getOption("repos"),
                 contriburl = contrib.url(repos, type),
                 type = getOption("pkgType"))

两个关键的默认值是调用一些全局选项,在我的安装中设置为:

> getOption("repos")
                                CRAN                            CRANextra 
       "https://cloud.r-project.org" "http://www.stats.ox.ac.uk/pub/RWin" 
> getOption("pkgType")
[1] "both"

您需要(可能)克服这些默认值才能进行本地安装,而要克服的关键是 contriburl 的值(它继承自 repos。知道这一点,您的直觉似乎(正确地)一直按照installing a local source package的说明进行操作,如:

install.packages(pkgs = "/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz", repos = NULL, type = "source")

但是install.packages() 的行为在那里完全不同,因为pkgs 参数需要源压缩包的文件名(当repos 和因此contriburlNULL 时) .

对于本地类似 CRAN 的 repo,您​​实际上希望将 pkgs 设置为 包名称 并将 contriburl 设置为本地 repo 路径。作为参考,这里是the relevant section of the docs for contriburl

contriburl 存储库贡献部分的 URL。如果您的存储库镜像不完整,请使用此参数,例如,因为您只刻录了 CD 上的“contrib”部分,或者只有二进制包。覆盖参数存储库。与 type = "both" 不兼容。

最后一句话说明了为什么你(可能)需要设置type = "source"

【讨论】:

  • 完美运行。谢谢! @托马斯
猜你喜欢
  • 2014-06-28
  • 2019-08-03
  • 2018-02-07
  • 2014-09-20
  • 2021-06-07
  • 2021-07-17
  • 2022-10-30
  • 2014-06-18
相关资源
最近更新 更多