首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R packrat快照:升级程序包时出现“过时”错误

R packrat快照:升级程序包时出现“过时”错误
EN

Stack Overflow用户
提问于 2019-05-17 05:58:31
回答 1查看 276关注 0票数 1

我正在使用packrat冻结应用程序的所有依赖项版本。有时我会遇到“陈旧”的问题。

例如,今天我将一个包升级到了一个新版本。为此,我在packrat-managed项目中启动了R:

代码语言:javascript
复制
% R --quiet
Packrat mode on. Using library in directory:
- "~/git/myapp/app/packrat/lib"
> install.packages('MyPackage')
Installing package into ‘/Users/kwilliams/git/myapp/app/packrat/lib/x86_64-apple-darwin17.7.0/3.5.3’
(as ‘lib’ is unspecified)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 3537k  100 3537k    0     0  5530k      0 --:--:-- --:--:-- --:--:-- 5527k
* installing *source* package ‘MyPackage’ ...
** R
** data
*** moving datasets to lazyload DB
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (MyPackage)

The downloaded source packages are in
    ‘/private/var/folders/zp/hj5hqfw970z0_78mrb_802lm0001z9/T/RtmpzfYDUz/downloaded_packages’

但是,当我尝试生成一个新的快照文件时,什么也没有发生:

代码语言:javascript
复制
> packrat::snapshot()
Snapshot written to '/Users/kwilliams/git/myapp/app/packrat/packrat.lock'

(该文件与以前没有什么不同-仍会列出旧版本的MyPackage。)

我验证了确实安装了新版本,并再次尝试快照:

代码语言:javascript
复制
> packageVersion('MyPackage')
[1] ‘7.4’
> packrat::snapshot()

The following packages are stale:
              _    
    MyPackage   7.4

These packages must be updated by calling packrat::restore() before
snapshotting. If you are sure you want the installed versions of these
packages to be snapshotted, call packrat::snapshot() again with
ignore.stale=TRUE.
--
Snapshot operation was cancelled, no changes were made.

哈?不确定为什么两次结果不同。

status()似乎确实正确地知道了情况:

代码语言:javascript
复制
> packrat::status()

The following packages are out of sync between packrat and your current library:
                    packrat   library
    MyPackage   7.3.1-22287       7.4

Use packrat::snapshot() to set packrat to use the current library, or use
packrat::restore() to reset the library to the last snapshot.

我想我会强制它,所以我添加了ignore.stale=TRUE

代码语言:javascript
复制
> packrat::snapshot(ignore.stale=TRUE)

Upgrading these packages already present in packrat:
                       from    to
    MyPackage   7.3.1-22287   7.4

Fetching sources for MyPackage (7.4) ... FAILED
Error in snapshotSources(project, activeRepos(project), allRecordsFlat) : 
  Errors occurred when fetching source files:
Error in getSourceForPkgRecord(pkgRecord, sourceDir, availablePkgs, repos) : 
  Could not find sources for MyPackage (7.4).

真扫兴。这是否与以下事实有关:这是一个本地创建的包,是从本地CRAN安装的?这可能是一个packrat错误,因为(如上所述) install.packages()可以很好地找到源包。

所以我认为这里有两个潜在的packrat错误:

  1. 无法为新安装的package
  2. Inability创建快照以下载软件包

的源代码

另外,我认为第一个问题与这里的情况是相同的:https://groups.google.com/forum/#!topic/packrat-discuss/HvD45u6w4Zg,在这里,Kevin Ushey (packrat的作者/维护者)说“围绕‘陈旧’包的逻辑可能会消失。”

EN

回答 1

Stack Overflow用户

发布于 2019-05-17 05:58:31

以下是我用来重回正轨的变通方法:

  1. 如上所述,即使在认为内容过时的情况下,也可以使用ignore.stale=TRUE强制快照。
  2. 手动将源包复制到packrat/src/MyPackage/.

现在它成功了:

代码语言:javascript
复制
> packrat::snapshot(ignore.stale=TRUE)

Upgrading these packages already present in packrat:
                       from    to
    MyPackage   7.3.1-22287   7.4

Snapshot written to '/Users/kwilliams/git/myapp/app/packrat/packrat.lock'

packrat/packrat.lock文件已正确更新:

代码语言:javascript
复制
% git diff
diff --git a/app/packrat/packrat.lock b/app/packrat/packrat.lock
index 6c17020..f717d29 100644
--- a/app/packrat/packrat.lock
+++ b/app/packrat/packrat.lock
@@ -30,9 +30,9 @@ Hash: 9772da3bc51603a19a2b75f008fd63e3

 Package: MyPackage
 Source: source
-Version: 7.3.1-22287
+Version: 7.4
 SourcePath: lib/MyPackage
-Hash: 4fe20417f5711b3c7c90a4efe3bb4bc7
+Hash: 880a308537e8de571106893e839386f6
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56177110

复制
相关文章

相似问题

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