如何将整个基于 renv 的项目复制到一台新 PC(无法访问互联网)?

How can I copy and entire renv based project to a new PC (which does not have internet access)?

我可以使用一台功能强大的机器,可以在上面进行 运行 大型模拟。 我用 renv 在 RStudio 项目中开发了代码。 Renv 制作所有包的本地副本并将其版本存储在锁定文件中。

目标机器(运行s Windows)无法访问互联网。我已经将项目文件、代码文件、renv 文件夹(包括包的所有本地副本、锁定文件和 .RProfile 文件复制到目标机器上的文件夹中。

当我在目标机器上打开项目时,.RProfile 执行 source("renv/activate.R")。但是,这无法加载项目,而是给我以下消息

The following package(s) are missing their DESCRIPTION files:

... Long list of packages ... 

These may be left over from a prior, failed installation attempt.
Consider removing or re-installing these packages.

问题是我无法重新安装它们,因为这台机器无法访问互联网。我可以手动浏览每个包并将二进制文件下载到我的工作机器上,然后将它们传输到目标机器上,然后一个一个地安装它们,但这似乎是一件非常痛苦的事情。

有没有办法说服 renv 或 R 本身只使用本地 renv 文件夹中的包?

最后我只是写了一个小脚本把文件复制过来。

sourceFolder = "some/path"
targetFolder = "some/other/path"
subFolders = list.files(sourceFolder)
for (i in seq_along(subFolders)) {
    subFolder = subFolders[i]
    file.copy(
        from = paste0(sourceFolder, subFolder),
        to = targetFolder,
        overwrite = TRUE,
        recursive = TRUE
    )
    paste(subFolder) |> message()
}

来自https://rstudio.github.io/renv/articles/renv.html的缓存部分:

When using renv with the global package cache, the project library is instead formed as a directory of symlinks (or, on Windows, junction points) into the renv global package cache. Hence, while each renv project is isolated from other projects on your system, they can still re-use the same installed packages as required.

我认为这意味着尝试复制 renv 文件夹意味着复制那些连接点(类似于快捷方式/symlinks),而不是实际的底层文件夹。

看起来您已经有了解决方案,但另一种选择是调用 renv::isolate() 以确保您的项目不会 link 到全局缓存中的包,而只是维护直接一个独立的库。