Windows 7,update.packages问题:“无法移动临时安装”?

76
我正在使用Windows 7上的R 2.13.0,在给予我的用户完全访问权限后,就像这里所述一样,我可以轻松安装新的软件包。
然而,在使用update.packages()命令更新现有软件包时,我一直遇到以下错误(例如,当我尝试更新MASS包时):
“package 'MASS' successfully unpacked and MD5 sums checked Warning: unable to move temporary installation 'C:\Program Files\R\R-2.13.0\library\file6cae3bcf\MASS' to 'C:\Program Files\R\R-2.13.0\library\MASS'”
请问如何解决这个问题? p.s:以管理员身份运行R或将库位置移到Program Files之外不是解决方案(这只是一个hack),我正在寻找真正的解决方案。

1
相关问题:https://dev59.com/lm445IYBdhLWcg3wDWGc - Andrie
这只是一个警告。 sessionInfo(package =“MASS”)的结果是什么? - Andrie
2
你正在使用Windows操作系统。因此,唯一可靠的解决方案是在Program Files之外安装R。您确定在尝试更新时未加载MASS软件包吗?也就是说,在您执行detach(package:MASS)之后更新时是否收到相同的警告? - Joris Meys
我将R安装在Program Files之外,但它仍然无法工作。 - xiaodai
4
六年后,我来到这里,试图为R 3.4.2安装软件包并遇到了这个问题。有趣的是,这是一个间歇性的问题 - 有时安装成功,有时失败。可能取决于杀毒软件扫描器最近下载的签名。 Sheldon的回答 比去公司IT部门更有效。 - Stephan Kolassa
显示剩余2条评论
13个回答

106

我发现问题确实是由于杀毒软件的“实时文件系统保护”。我按照以下步骤来解决问题:

trace(utils:::unpackPkgZip, edit=TRUE)

我编辑第140行(在R 3.4.4中为第142行):

Sys.sleep(0.5)

致:
Sys.sleep(2)

看起来是杀毒软件阻止了包临时目录的创建。将其更改为2秒后,错误消失了。

编辑:要以编程方式执行此操作

trace(utils:::unpackPkgZip, quote(Sys.sleep(2)), at = which(grepl("Sys.sleep", body(utils:::unpackPkgZip), fixed = TRUE)))

(原作者:@DavidArenburg)


7
我已经多次这样做(暂时有效),但因某些原因编辑无法保留...一段时间后或任何会话重新启动后,它又会回到“Sys.sleep(0.5)”状态。我该如何使编辑变为永久性的? - JSCard
2
还发现这只是一个临时解决方案,重启后Sys.sleep返回0.5秒 - 希望下一个R更新可以解决这个问题。 - Markm0705
3
我昨天安装了R 3.5,问题消失了,Sys.sleep(0.5)这行也被删除了,所以我猜现在不再需要它了! - Gerhard Burger
4
你也可以通过编程的方式来解决这个问题,例如:trace(utils:::unpackPkgZip, quote(Sys.sleep(2)), at = which(grepl("Sys.sleep", body(utils:::unpackPkgZip), fixed = TRUE))) - David Arenburg
1
@DavidArenburg,不错!(我想你的意思是编程式的:P) - Gerhard Burger
显示剩余2条评论

64

更新一下,我(认为)找到了问题的根源:杀毒软件

"实时文件系统保护"阻止了R在下载文件后复制文件夹之间的操作。 将R目录添加到例外列表中(再加上添加用户权限和安装R在D:\ R上),问题就解决了。经过这么多努力,我可能也要转向Linux(我应该真的这么做...)

我在我的帖子中更新了上述信息:http://www.r-statistics.com/2011/04/how-to-upgrade-r-on-windows-7/

希望它能在将来帮助到某个人, Tal


11
很遗憾,由于我们处于公司设置中,防病毒设置被锁定了。 - xiaodai
2
对于遇到卡巴斯基这个问题的用户,该网站展示了如何添加排除规则的方法:http://support.kaspersky.com/11146 - ahfoss
谢谢!这正是我的问题。我关闭了麦卡菲,重新安装了我的软件包,加载后再打开它,然后它就能工作了! - Paul
@xiaodai,请看一下我的答案,了解绕过企业杀毒软件策略的解决方法。 - Sheldon
1
嗨 Tal,我有一个有点不同的问题,非常感谢您的帮助。我的问题是,我无法使用library("packageName")require("packageName")加载任何R包。我收到以下错误:Error: package or namespace load failed for ‘packageName’ in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]): namespace ‘tibble’ 1.3.0 is already loaded, but >= 1.3.1 is required - rnorouzian

41

如果您因为公司政策等原因无法关闭您的防病毒软件,这里是我找到的一个解决方法。调试解压缩包函数并逐步执行它会给防病毒软件足够的时间完成工作而不会干扰。使用以下命令:

debug(utils:::unpackPkgZip)
install.packages("packageName")

当R开始调试安装过程时,可以通过多次按下回车键来逐步执行代码。

我在这里找到了解决方案here


14

如果您可以直接从CRAN下载二进制文件。在Windows上下载时,它将是一个zip文件。现在手动将其解压缩到R的..library/文件夹中(.libPaths())。这对于某些软件包对我有效。


1
在进行此操作时,有任何需要担心的事情吗? - rrs
@rrs 它不会安装依赖项,所以您必须自己确保处理它们。 - Dason

7

我在安装 swirl 和 dplyr 时遇到了问题。我使用的是 Windows 64 位系统。

警告:无法移动临时安装文件

我所做的是访问 C: 驱动器上的临时文件,并打开文件提取程序,将临时文件中的文件手动复制到 C: 驱动器上我的 R 程序文件中。这对于 dpylr 和 swirl 都起作用。激动人心!

祝好,

Peach


+1 这是唯一一个在我的 Windows 10 个人电脑上成功安装 swirl 的解决方案。其他所有的解决方案都没有起作用。 - GISHuman

2
您能否不使用lib.loc参数来仅更新个人库中的软件包(在用户中)? 不应该有任何一种方法使普通的非增强用户更改程序文件夹中的文件,因此您唯一可以做的事情(如果您不想增强用户)是让R不更新程序文件夹中的软件包。
一个解决方法是避免将R安装在程序文件夹中(这可能比只是将库位置移到其外部更为恶劣,具体取决于您的观点)。
最后,如果lib.loc无法满足要求,您可以查看update.packages的源代码并创建自己的定制版本,以始终避免程序文件夹中的常见库位置。

谢谢Nick,但我希望在保留R程序文件的同时解决这个问题。 - Tal Galili

2

我之前也遇到过同样的问题,解决方法是你需要使用原始的R软件来安装包(此外,你需要选择正确的镜像站点,因为有些被屏蔽了)。刚开始我使用Rstudio安装包,结果遇到了和你一样的问题。希望这对你有所帮助。


1

我刚才进入了图书馆文件夹(Windows XP),并删除了所有名为fileXXXX的文件夹。重新运行安装程序,它就可以正常工作了。


这对我有用,因为我遇到了与rJava类似的问题。我在R / library中手动创建了一个名为R / library / rJava的文件夹,它完美地解决了问题。 - JohnL_10

1
我遇到了这个错误好几次。在我的情况下,这是因为我们的管理员希望我们使用远程虚拟磁盘(在Windows 7上)来存储文件,并且所有的文件都被严密地锁定起来。我唯一能够使用R包的方法就是在远程虚拟磁盘上的lib目录中。这本来不是问题,但是网络并不总是快速稳定的。因此,当我需要一个包时,尤其是带有其他多个包的包(例如MBESS),我要么要多次执行get.packages()过程,直到它最终完成,要么让IT为我快速处理。我不能总是等待IT。

0

我也曾遇到同样的问题。由于问题似乎是杀毒软件阻止下载文件传输引起的,因此我尝试在install.packages中使用不同的下载方法,并且这种方法行得通。

例如:

install.packages("stringr", method = "curl")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接