首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >renv::restore()错误:无法检索'package‘(使用私有包)

renv::restore()错误:无法检索'package‘(使用私有包)
EN

Stack Overflow用户
提问于 2021-03-04 08:15:37
回答 1查看 1.4K关注 0票数 5

我打算使用R中的重调包在linux服务器上设置全局缓存,其他用户将能够: i)通过创建到我创建的重调库的符号链接来使用包(因此,不将它安装到自己的私有库中可以节省内存和时间);以及(2)在包的几个版本之间快速切换(取决于项目)。

目标是能够快速地复制人员代码,而无需事先安装或讨论设置。唯一需要的是一个锁文件,使用renv按照相应的锁文件相同地设置他/她的环境,然后运行/复制代码。

请考虑以下示例:

我完成了一个项目,它使用来自CRAN的公共包,也使用了我自己开发的包。现在通过设置以下设置创建共享/全局缓存:

代码语言:javascript
复制
Sys.setenv(RENV_PATHS_CACHE = "/path/to/global/cache")

然后跑:

代码语言:javascript
复制
renv::init()

它按照预期创建一个包含所有包的文件夹。

不过,如果我想通过创建一个新项目来测试这一点,请将renv.lock文件复制到新的项目文件夹中,然后运行

代码语言:javascript
复制
renv::restore()

它无法检索私有包,因为它试图从CRAN存储库中检索它:

错误:除了:警告消息:无法检索用于url 'https://cran.rstudio.com/src/contrib‘跟踪的可用包(最近一次调用):9: renv::还原() 8: renv_restore_run_actions(项目、diff、当前、锁文件、重新构建) 7: renv_retrieve(包) 6:处理程序(包,Renv_retrieve_impl(包) 5: renv_retrieve_impl(包) 4: renv_retrieve_unknown_source(记录) 3: renv_retrieve_repos(记录) 2: stop(“未能检索包‘'%s'",记录$包) 1:停止(sprintf(fmt,.),调用。=打电话

我如何“强制”重调::restore直接从全局缓存(而不是CRAN存储库)创建所谓的符号链接?

我现在的解决方法是将RENV_PATHS_LOCAL变量设置为与全局缓存相同的路径,并将private_package.tar.gz文件复制到全局缓存中。不过,这不应该是必要的,因为我已经在设置全局缓存时安装了包。有了这个解决办法,用户必须使用.tar.gz文件将私有包安装到自己的私有renv库中(在本例中这不是一个符号链接,并为每个用户存储一个重复版本)。

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 19:36:21

通常,如果在全局缓存中可以找到所请求的包,renv::restore()将从全局缓存中查找和使用包,因此我认为根本的问题是为什么renv未能解决缓存中的包问题。

您的包在renv.lock中的条目是什么样子的?它有Hash字段吗?该Hash字段解析到renv缓存中的正确位置吗?这是renv在尝试解析全局缓存中的包时使用的关键。

您可以使用:

代码语言:javascript
复制
renv:::renv_cache_list(packages = "<package>")

若要查看特定包的缓存项,请执行以下操作。

另一种选择是设置一个本地R包存储库,并从该存储库中提供您的私有包。这甚至可以是带有文件URI的网络文件系统上的包存储库;例如:

代码语言:javascript
复制
options(repos = c(ORG = "file:///path/to/local/repository"))

miniCRAN包在创建这样的存储库时可能很有用。

如果这些信息都不够,我建议在https://github.com/rstudio/renv/issues上提交一个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66471027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档