【问题标题】:R tries to install old not available packages from ArtifactoryR 尝试从 Artifactory 安装旧的不可用包
【发布时间】:2020-01-27 17:43:00
【问题描述】:

解决方案

删除 Artifactory 缓存中的.RDS


问题

在 Ubuntu 上使用 R 3.6.2 和 CRAN 的企业镜像时,我遇到了一个非常奇怪的问题。假设我运行以下命令:

install.packages('rlang')

我得到的是找不到版本0.4.2。当我手动查看存储库时,我发现0.4.2 确实不存在,但0.4.3 存在。首先,我认为存储库存储索引的PACKAGES 文件有问题。但我查看了它,它指向正确且可用的 rlang 版本。

在执行install.packages() 时,R 从哪里获取它放入查询 URL 的版本号?

更新

我试过install.packages("http://private.com/src/contrib/rlang_0.4.3.tar.gz", repos=NULL) 并且它有效。接下来我将尝试在新的 Ubuntu 环境中复制该问题。也许我在安装 R 并将其升级到 3.6.2 时搞砸了


当我降级到 R 版本 3.4.4 时,问题仍然存在。也许它与公司镜像有关?我会试试官方的。


感谢 Dirks answer 我通过 available.packages() 发现镜像有问题,而不是 R 安装。

> AP <- available.packages()
> res <- AP[ AP[,1] == "rlang", ]
> str(res)
 Named chr [1:17] "rlang" "0.4.2" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...

由于镜像中PACKAGES 的可读版本包含0.4.3,我假设PACKAGES.rds 有问题。接下来,我将尝试读取该对象以确认我的假设。


Dirk 建议我检查索引的时间戳,我想我找到了问题所在。 0.4.3 不久前发布。虽然可读索引是在其他几个之前更新的,但 .rds 文件(可能由 R 使用)自 2020-01-16 以来没有更新。因此,R 尝试下载不再属于存储库的版本。

现在我想知道谁负责更新RDS 文件?存储库本身?我会在下次报告...也许在随机批处理作业更新存储库后问题会自行解决。

rlang 包:

时间戳:

PACKAGES 内容:


我手动下载了PACKAGES.rds,并在上面使用了readRDS()。它指向旧版本。我还检查了镜像的仓库。它的PACKAGES.rds 指向正确的版本。此外,我确保问题仍然存在,与我使用的发行版和图像无关。

【问题讨论】:

    标签: r package artifactory cran rlang


    【解决方案1】:

    你可以问 R 这个问题! available.packages() 函数告诉您它所知道的“一切”,其中一个条目是“存储库”。

    所以:

    R> AP <- available.packages()       ## all known packages given options("repos")
    R> res <- AP[ AP[,1] == "rlang", ]  ## find rlang
    R>
    R> str(res)
     Named chr [1:17] "rlang" "0.4.3" NA "R (>= 3.2.0)" NA NA ...
     - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...
    R> 
    R> names(res)
     [1] "Package"               "Version"              
     [3] "Priority"              "Depends"              
     [5] "Imports"               "LinkingTo"            
     [7] "Suggests"              "Enhances"             
     [9] "License"               "License_is_FOSS"      
    [11] "License_restricts_use" "OS_type"              
    [13] "Archs"                 "MD5sum"               
    [15] "NeedsCompilation"      "File"                 
    [17] "Repository"           
    R> 
    R> res["Repository"]
                                   Repository 
    "https://cloud.r-project.org/src/contrib" 
    R> 
    

    这并不奇怪,因为这是我使用的默认配置(并在 Debian / Ubuntu 包中编码)的默认存储库。

    【讨论】:

    • 很有趣,非常感谢。它给了我 0.4.2 版本。这意味着问题出在公司镜像中......存储库中有几个 PACKAGES 文件,但文件结尾不同。其中之一是 .RDS,一个 R 对象,但已序列化。也许对象没有更新(因为可读的 PACKAGES 文件肯定指向 4.3.3)。我会更新我的帖子
    • 您可以查看那些顶级索引文件的时间戳。
    • 就是这样(我希望)! 0.4.3 根据github.com/r-lib/rlang/releases 发布2020-01-25PACKAGESPACKAGES.gz 是在几小时前更新的。但是 R 使用的PACKAGES.rds 的时间戳为2020-01-16。太棒了
    【解决方案2】:

    如果你这样做了

    ?install.packages()
    

    它会给你一些关于检索函数的信息,你可以输入一个“repo”参数。大多数时候,如果我有包安装问题并且不太担心运行的确切版本:

    install.packages("rlang", dependencies = TRUE)
    

    通常对我很好

    【讨论】:

    • 我用dependencies=TRUE试过了,但还是同样的问题。 R 查找错误的版本。奇怪的是,install.packages("http://private.com/src/contrib/rlang_0.4.3.tar.gz", repos=NULL) 有效。
    猜你喜欢
    • 2018-11-20
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多