簡體   English   中英

install.packages 中的警告:無法移動臨時安裝

[英]Warning in install.packages: unable to move temporary installation

在 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(2) ...重置為Sys.sleep(0.5)每次會話重新啟動時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)似乎可以解決問題,但我不能在每個軟件包安裝或更新之前繼續這樣做,並且似乎無法讓編輯保持原狀。

這是在這個問題上唯一對我有用的東西(不幸的是,卸載防病毒軟件並沒有讓我在任何地方),所以希望它對你有用。

在 Windows 系統上,有時庫的安裝可能運行得太快,從而產生“無法移動臨時安裝”的錯誤。 然后在用戶庫中沒有找到該包,因為它沒有被移過......

要修復,請嘗試: trace(utils:::unpackPkgZip, edit=TRUE)

然后轉到代碼中的第 140 行,將Sys.sleep(0.5)更改為Sys.sleep(2.5)

這是一個不錯的長期解決方案,不需要手動移動包、卸載軟件、替換管理員職責或單獨將包路由到某些位置。

我的原始回復如下,但后來我找到了更好的解決方案。

執行以下行:

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 的方法,它比單步調試調試器更痛苦,尤其是當涉及多個依賴項並且還必須安裝時。

如果您無法關閉防病毒軟件,我發現這里有一個解決方法,它不涉及編輯unpackPkgZip文件。 調試解壓縮包功能,然后逐步執行它,可以讓防病毒軟件有足夠的時間來完成其工作而不會干擾。 使用這個命令:

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

然后在安裝過程中 R 開始調試時逐步執行代碼(通過多次按 Enter 鍵)。

我在這里找到了這個解決方案。

如果您想讓此更改更持久,您可以將調試代碼添加到您的 Rprofile 文件中,請參見此處,但每次安裝軟件包時您仍需要使用單步執行解壓縮功能。

遇到同樣的錯誤 - 似乎是公司 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 時的常見問題。

我們在我的工作場所遇到了同樣的問題,我的一位同事發現了一個很好的解決方法。 不幸的是,這是您每次安裝軟件包時都需要做的臨時事情,而不是永久修復。 我們正在使用 McAfee 運行企業 Windows 8(無管理員權限),我已經在 R 3.4.0-3.4.3 中對此進行了測試。

暫時關閉 McAfee 的“按訪問掃描”功能(在威脅防護中)為我們解決了這個問題——R 包現在都按照預期的方式在第一次嘗試時安裝。 以下是關閉它的詳細步驟:

  1. 右鍵單擊任務欄右側通知區域中的 McAfee 圖標,然后選擇 McAfee Endpoint Security。
  2. 單擊威脅防護。 這將打開一個屏幕,您應該在其中看到“訪問保護”、“漏洞利用防護”和“按訪問掃描”等類別。
  3. 取消選中“啟用按訪問掃描”,然后單擊“應用”。 (注意:很容易忘記單擊“應用”,但這是必不可少的)

安裝軟件包后,最好重復該過程以重新打開按訪問掃描。

我通過刪除 R 試圖將內容移動到的文件夾的“只讀”屬性來修復此問題的實例(Windows 7)。

我從 Windows (7) 的開始菜單轉到運行命令並輸入 attrib -r +s drive:\\\\

請注意,根據 Microsoft 的此鏈接,只需右鍵單擊該文件夾並嘗試更改屬性即可: https : //support.microsoft.com/en-us/help/326549/you-cannot-view-or-更改只讀或系統屬性

希望能幫助某人。

我希望這種變化不會在其他方面讓我感到困擾。

這是為我吐出的錯誤消息:

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
....

它對我來說效果很好,因為它是唯一由於某種原因沒有下載的軟件包。 如果您必須為每個包都執行此操作,則可能沒有幫助。

如果上述解決方案在企業防病毒軟件中不起作用,我還找到了一種解決方案。 首先使用此命令更改軟件包安裝的路徑並在 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") 

我在同樣的問題上掙扎。 對我來說(在 Windows 10 上),問題是使用MalwareBytes (高級試用版)。 我卸載了它並重新使用Windows Defender,問題得到了解決。 也許如果有更多時間,我可以找到如何為 MalwareBytes 創建異常和/或文件檢查延遲(即,這是一個非常好的程序),但是用戶指南( https://www.malwarebytes.com/pdf /guides/Malwarebytes-User-Guide.pdf )對此不清楚。

在 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")

每次有新會話時都必須運行此命令。 您可以在同一個會話中多次運行它而不會出現問題。

如果您在 install.packages 表達式之前運行以下語句,則它應該安裝包:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM