首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有本地二进制存储库的Packrat

带有本地二进制存储库的Packrat
EN

Stack Overflow用户
提问于 2015-07-09 10:00:27
回答 1查看 625关注 0票数 2

我想在没有互联网连接的Windows 7机器上使用packrat。我已经从http://cran.r-project.org/bin/windows/contrib/3.1/下载了所有二进制包到本地文件夹C:/xyz/CRAN_3_1中。

现在的问题是

代码语言:javascript
复制
packrat::init(options=list(local.repos="C:/xyz/CRAN_3_1"))

抛出一系列警告和错误,例如

代码语言:javascript
复制
Warning: unable to access index for repository http://cran.rstudio/bin/...
Warning: unable to access index for repository http://cran.rstudio/src/...
Fetching sources for Rcpp (0.11.4) ... Failed
Package Rcpp not available in repository or locally

就像看起来packrat试图找到

  1. CRAN上Rcpp的二进制版本(由于没有互联网连接而失败)
  2. CRAN上Rcpp的来源(由于没有互联网连接而失败)
  3. 包的本地源(失败,因为我只有二进制文件)

我不明白为什么packrat也不搜索本地二进制包..。

问题1:我可以下载源CRAN存储库来解决这个问题。但是我想从你们那里知道是否有一个更简单的解决方案,也就是,是否有可能让packrat接受本地二进制回购。

问题2:当我创建自己的包myPackage并启用packrat时,myPackage-specific本地packrat库也会包含在包中吗?也就是说,假设我将二进制myPackage压缩文件交给我的同事,他没有myPackage所依赖的包(假设是Rcpp)。当我使用Rcpp时,myPackage中会包含packrat吗?还是我的同事必须亲自安装Rcpp

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 13:43:08

我设法解决了这个问题。请记住,我以前从未使用过packrat,而且我不知道它的“正确”行为。但我的印象是黑客成功了。我就是这样做的:

  1. 打开您的项目,通过packrat加载library(packrat)
  2. 键入fixInNamespace("snapshotImpl",ns="packrat") -打开一个窗口-将其内容复制到剪贴板中
  3. 转到/yourProjDir/并创建一个文件snapshotImplFix.R
  4. 把剪贴板的内容复制到这个文件中。
  5. ..。但将第一行更改为 snapshotImplFix=function (project, available = NULL, lib.loc = libDir(project), dry.run = FALSE, ignore.stale = FALSE, prompt = interactive(), auto.snapshot = FALSE, verbose = TRUE, fallback.ok = FALSE, snapshot.sources = FALSE) 注意snapshot.sources = FALSE!保存并关闭文件。
  6. 创建/yourProjDir/.Rprofile并添加 setHook(packageEvent("packrat","onLoad"),function(...) { source("./snapshotImplFix.R"); tmpfun=get("snapshotImpl",envir=asNamespace("packrat")); environment(snapshotImplFix)=environment(tmpfun); utils::assignInNamespace(x="snapshotImpl",value=snapshotImplFix,ns="packrat");}) 第2-6点修正了默认情况下snapshot.sources参数为TRUE的问题(我没有找到更好的方法来更改.)
  7. 最后,我们必须告诉packrat使用我们的本地存储库。重要的是要有正确的文件夹结构。因此,我将回购从C:/xyz/CRAN_3_1移到了C:/xyz/CRAN_3_1/bin/windows/contrib/3.1。如果您还必须移动您的文件,请不要忘记运行library(tools);write_PACKAGES("C:/xyz/CRAN_3_1/bin/windows/contrib/3.1");
  8. 再次打开yourProjDir/.Rprofile并在末尾添加 local({r=getOption("repos");r["CRAN"]="file:///C:/xyz/CRAN_3_1";r["CRANextra"]=r["CRAN"];options(repos=r)}) 注意/后面的3 file!保存和退出文件。
  9. 关闭项目并重新打开。
  10. 现在您可以执行packrat::init()了,并且它应该没有错误地运行。

如果一个在packrat方面有更多经验的人能给出他/她的意见,我就能确定这个黑客成功了,那就太好了。当然,任何指向正确解决方案的指针都会受到高度赞赏。

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

https://stackoverflow.com/questions/31314229

复制
相关文章

相似问题

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