【问题标题】:Warning in install.packages: unable to move temporary installationinstall.packages 中的警告:无法移动临时安装
【发布时间】:2018-03-17 07:56:58
【问题描述】:

在 R/RStudio 中安装或更新软件包时,我发现了许多与此警告相关的问题,但似乎没有一个完全符合我的情况:

  • 企业级 Windows 7 系统,因此无法获得管理员权限
  • 无法更改 McAfee Anti-Virus 例外列表
  • R 完全安装在用户空间C:\Users\[myname]\R
  • RStudio 完全安装在用户空间C\Users\[myname]\RStudio
  • 两个目录都没有权限问题...我对它们有完全的访问控制权
  • 问题仅在安装 R 3.4 后出现,但 RStudio 在启动时随机失败或挂起几个月
  • R_LIBS_USER 添加为用户环境变量,指向正确的目录
  • .libPaths() 显示正确的目录,包括系统和用户
  • R 版本 3.4.2,RStudio 版本 1.0.153
  • 卸载了 R 和 Rstudio 并彻底重新安装了两者
  • 尝试 trace(utils:::unpackPkgZip,edit = T) 并将第 140 行 Sys.sleep(0.5) 编辑为 Sys.sleep(2),这有时会暂时有效,但编辑不会保持不变...在每次会话重新启动时重置为 Sys.sleep(0.5)
  • 在 RStudio 和 RGui 中都发生
  • 任何大于几 Kb 的包都会给出以下信息:

    package ‘packagename’ successfully unpacked and MD5 sums checked
    Warning in install.packages :
      unable to move temporary installation ‘C:\Users\[myname]\R\win-library\3.4\file2b884fc37c13\packagename’ to ‘C:\Users\[myname]\R\win-library\3.4\packagename’
    

软件包无法安装或更新。所以,我的问题是:

  1. 有没有不需要管理员权限或更改防病毒策略的方法来完全避免该问题?
  2. 有没有办法让unpackPkgZip的编辑永久保存?

在这一点上,我很难过。我怀疑它与下载后临时锁定文件/目录的防病毒软件有关,但我对此无能为力。 Sys.sleep(2) 似乎可以解决问题,但我不能在每个软件包安装或更新之前一直这样做,而且似乎无法让编辑保持不变。

【问题讨论】:

  • trace 用于交互式调试,如果您想永久更改包源文件 - see the answer to this question 了解如何执行此操作 - 这不是我做过的事情我自己。
  • @TomNewton - 啊。谢谢你。我应该意识到这一点,但认为跟踪上的“保存”按钮实际上会保存到包中(为什么还有一个?)。我将根据链接查看包编辑,看看这对我来说是否可行。
  • 是的,我明白为什么这是误导,也许“应用”会更好。它看起来相当简单,如果您确实取得了成功,值得在此处发布作为答案以供将来参考。

标签: r rstudio


【解决方案1】:

如果您无法在此处关闭防病毒软件,这是我发现的一种解决方法,它不涉及编辑 unpackPkgZip 文件。调试解压缩包功能,然后单步执行它可以让防病毒软件有足够的时间在不干扰的情况下完成其工作。使用这个命令:

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

然后在安装过程中 R 开始调试时单步执行代码(按多次回车)。

我找到了这个解决方案here

如果您想使此更改更加永久,您可以将调试代码添加到您的 Rprofile 文件中,请参阅here,但您仍然需要在每次安装包时使用逐步解压缩功能。

【讨论】:

  • 我也遇到过。如果您要安装或更新一两个,那么合理的 hack... 更多内容会变得乏味,尤其是当存在大量依赖项或安装任​​务视图或来自 bioconductor 来源的任何内容时。
  • 是的,我同意。我不确定是否有一种方法可以在调试模式下自动单步执行代码,该模式足够慢以允许此修复工作。我会看看我能找到什么。恐怕这是 R 或 McAfee 都需要解决的问题,因为我看到它在过去几个月中变得越来越普遍。
【解决方案2】:

我原来的回复如下,但后来我找到了更好的解决方案。

执行以下行:

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

注意这里有三个冒号,而不是两个。

然后编辑第142行,从Sys.sleep(0.5)到:Sys.sleep(2.0),点击保存编辑(行号可能略有不同)。不幸的是,这不适用于 R 会话,但只需 10 秒即可完成此操作,然后您就可以为当前会话安装包,以满足您的需求。

原答案:

我在工作中遇到了同样的问题。我能够使用 Sheldon 建议的方法,但如前所述,这很快就会变得乏味。作为替代方案,我发现我可以转到我的临时目录中下载的 zip 文件的位置(由 install.packages 报告),解压缩文件(如果有依赖包,将会有多个 zip 文件),然后将所有解压缩的目录直接移动或复制到我的 R\win-library\3.4 目录中。这也不是很有趣,但我发现按照 Sheldon 的方法,它比单步调试器更痛苦,尤其是在涉及多个依赖项并且还必须安装时。

【讨论】:

  • 是的 trace(utils:::unpackPkgZip, edit=TRUE)- 区分大小写
【解决方案3】:

遇到同样的错误 - 似乎是公司 gp / 访问安全问题。

检查它无法写入的文件夹是否具有只读结构(右键单击 - 属性)可能也是值得的。这个文件夹的地址可以通过运行:.libPaths()[1] in R.

找到

解决此问题的一个特殊解决方案是使用下面的一段 R 代码解压缩并存储下载的(但未移动的)包。您将收到一条错误消息,说明二进制包的位置(例如:C:/Users/....AppData/...

现在您可以简单地将文件从此处解压缩到您的 .libPaths() 位置

zipF <- list.files("C:/Users/<YOURNAMEHERE>/AppData/Local/Temp/Rtmp4Apz6Z/downloaded_packages", full.names = TRUE)
outDir <- .libPaths()[1]

for(i in 1: length(zipF)) {
unzip(zipF[i],exdir=outDir)
}

一个更通用的解决方案仍然非常值得,因为不幸的是,这是在 Windows 上更新 R 时的常见问题。

【讨论】:

    【解决方案4】:

    我通过删除文件夹 R 试图将内容移动到的“只读”属性来修复了这个问题的实例(Windows 7)。

    我从 Windows (7) 的“开始”菜单转到“运行”命令并键入 属性 -r +s 驱动器:\\

    请注意,根据 Microsoft 的此链接,只需右键单击文件夹并尝试更改属性并没有:https://support.microsoft.com/en-us/help/326549/you-cannot-view-or-change-the-read-only-or-the-system-attributes-of-fo

    希望对某人有所帮助。

    我希望这种变化不会以其他方式困扰我。

    【讨论】:

    • 不幸的是,这不是权限问题...这是一个内部超时,当防病毒软件扫描下载的文件时,它会阻止它被移动。
    【解决方案5】:

    这是为我吐出的错误消息:

    package ‘mlogit’ successfully unpacked and MD5 sums checked
    Warning in install.packages :
    unable to move temporary installation ‘C:\Users\E\Documents\R\win-
    library\3.4\file9ec6cfb5e40\mlogit’ to ‘C:\Users\E\Documents\R\win-
    library\3.4\mlogit’
    
    The downloaded binary packages are in
    C:\Users\E\AppData\Local\Temp\RtmpS0uNDm\downloaded_packages
    

    我所做的是去下载包的地方 (C:\Users\E\AppData\Local\Temp\RtmpS0uNDm\downloaded_pa​​ckages) 然后将该压缩文件复制到桌面然后使用 Winzip 解压缩到我的文件目录R 的所有包都存储在其中(C:\Users\E\Documents\R\win-library\3.4)。它现在将加载到 R 中。

    library("mlogit")
    Loading required package: Formula
    Loading required package: maxLik
    Loading required package: miscTools
    ....
    

    它对我来说效果很好,因为它是唯一一个由于某种原因没有下载的包。如果您必须为每个包都这样做,可能没有帮助。

    【讨论】:

    • 我通常要处理十几个包,所以这很快就会变得笨拙。
    • @Scared。我同意。适用于似乎不起作用的一次性软件包,而不是解决软件包安装的总体问题
    【解决方案6】:

    我们在我的工作场所遇到了同样的问题,我的一位同事发现了一个很好的解决方法。不幸的是,这是您每次安装软件包时都需要做的临时事情,而不是永久修复。我们正在使用 McAfee 运行企业 Windows 8(无管理员权限),我已经在 R 3.4.0-3.4.3 中对此进行了测试。

    暂时关闭 McAfee 的“按访问扫描”功能(在威胁防护中)为我们解决了这个问题 - 现在,R 包都在第一次尝试时按预期方式安装。以下是关闭它的详细步骤:

    1. 右键单击右侧通知区域中的 McAfee 图标 您的任务栏,然后选择 McAfee Endpoint Security。
    2. 单击威胁防护。这会打开一个屏幕,您应该会在其中看到“访问保护”、“漏洞利用防护”和“访问时扫描”等类别。
    3. 取消选中“启用按访问扫描”,然后单击应用。 (注:这是 很容易忘记点击应用,但这是必不可少的)

    安装软件包后,最好重复该过程以重新打开按访问扫描。

    【讨论】:

    • 我会试试看的。我们也使用 McAfee。比 traceutils 解决方法容易得多。
    • 不行...用我们的系统,我们只能查看状态和日志。无法暂时禁用按访问扫描。回到trace(utils:::unpackPkgZip,edit = T) 解决方法...
    【解决方案7】:

    这是在这个问题上唯一对我有用的东西(不幸的是,卸载防病毒软件并没有让我到任何地方),所以希望它对你有用。

    在 Windows 系统上,有时库的安装可能运行得太快,从而产生错误“无法移动临时安装”。然后在用户库中找不到这个包,因为还没有被移过来……

    要修复,请尝试:trace(utils:::unpackPkgZip, edit=TRUE)

    然后转到代码中的第140行,将Sys.sleep(0.5)更改为Sys.sleep(2.5)

    这是一个不错的长期解决方案,不需要手动移动包、卸载软件、替换管理员职责或单独将包路由到某些位置。

    【讨论】:

    • 这就是我一直在做的事情,而且它(通常)有效。当然,如果您出于任何原因重新启动 R 会话,您还必须记住再次执行此操作!
    • 在发布六个月后查看此内容。有同样的问题。这很容易解决了我的问题。
    【解决方案8】:

    如果上述解决方案不适用于企业防病毒软件,我还找到了一种解决方案。 首先更改包安装路径使用此命令并在R中执行:

    install.packages('caTools','D:\\ML\\Tools\\Installed\\RPackages')
    

    现在它将显示无法移动的控制台错误,并且包裹被放置到某个位置。只要记住这个位置,我们需要这个 zip 文件来进行进一步的操作。

    现在使用这个命令:

    install.packages("D:/ML/Tools/Installed/RPackages/caTools_1.17.1.zip", repos = NULL, type = "win.binary", lib="D:/ML/Tools/Installed/R-3.4.3/library") 
    

    【讨论】:

      【解决方案9】:

      我在同样的问题上苦苦挣扎。对我来说(在 Windows 10 上),问题在于使用 MalwareBytes(高级试用版)。我将其卸载并重新使用 Windows Defender,问题已解决。也许如果有更多时间,我可以找到如何为 MalwareBytes 创建异常和/或文件检查延迟(即,这是一个非常好的程序),但用户指南 (https://www.malwarebytes.com/pdf/guides/Malwarebytes-User-Guide.pdf) 对此并不清楚。

      【讨论】:

        【解决方案10】:

        如果您在 install.packages 表达式之前运行以下语句,那么它应该安装包:

        trace("unpackPkgZip", where=asNamespace("utils"), quote(Sys.sleep(2.5)), at=14L, print=FALSE)
        

        【讨论】:

          【解决方案11】:

          在 unpackPkgZip 函数的第 142 行将 Sys.sleep 值扩展到 3.5 可以手动通过

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

          但是,也可以通过在install.packages 之前运行以下代码以编程方式完成:

          localUnpackPkgZip <- utils:::unpackPkgZip
          body(localUnpackPkgZip)[[14]][[4]][[4]][[4]][[3]][[3]][[2]][[2]] <- substitute(3.5)
          assignInNamespace("unpackPkgZip", localUnpackPkgZip, "utils")
          

          每次有新会话时都必须运行此程序。您可以在同一个会话中多次运行它而不会出现问题。

          【讨论】:

          • 区分大小写:trace(utils:::unpackPkgZip, edit=TRUE)
          猜你喜欢
          • 1970-01-01
          • 2017-06-14
          • 1970-01-01
          • 2011-08-07
          • 2017-09-21
          • 2014-03-14
          • 2012-06-21
          相关资源
          最近更新 更多