2

我已经获得了可以运行大型模拟的强大机器的访问权限。我已经用 renv 在 RStudio 项目中开发了代码。Renv 制作所有包的本地副本并将其版本存储在锁定文件中。

目标计算机(运行 Windows)无法访问 Internet。我已将项目文件、代码文件、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 文件夹中的包?

4

2 回答 2

1

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

将 renv 与全局包缓存一起使用时,项目库将形成为符号链接目录(或在 Windows 上,连接点)到 renv 全局包缓存中。因此,虽然每个 renv 项目都与系统上的其他项目隔离,但它们仍然可以根据需要重新使用相同的已安装包。

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

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

于 2021-06-28T21:41:09.757 回答
0

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

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()
}
于 2021-06-28T18:18:47.517 回答