My guess is that the DLL of the already installed XML package is loaded by another R session and that prevents the corresponding DLL file:
> path <- system.file("libs", package="XML") > list.files(path, recursive=TRUE, pattern="dll$") [1] "i386/XML.dll" "x64/XML.dll" from being deleted by install.packages() -> unpackPkgZip() -> ret <- unlink(instPath, recursive=TRUE, force=TRUE) which gives the warnings. You can verify this by checking that all files but the DLLs are deleted; > path <- system.file("libs", package="XML") > list.files(path, recursive=TRUE) REPRODUCIBLE EXAMPLE: # Download package with native code (=has DLLs) url <- "http://cran.r-project.org/bin/windows/contrib/r-release/png_0.1-6.zip" pkgfile <- basename(url) if (!file_test("-f", pkgfile)) download.file(url, dest=pkgfile, mode="wb") # Setup temporary library if (!file_test("-d", "local-libs")) dir.create("local-libs") # Install to temporary library install.packages(pkgfile, repos=NULL, lib="local-libs") # Record package path path <- system.file(package="png", lib.loc="local-libs") # Launch *another* session that loads the package Rscript <- file.path(R.home("bin"), "Rscript") code <- "library('png', lib.loc='local-libs'); img <- readPNG(system.file('img','Rlogo.png',package='png')); Sys.sleep(60)" code <- "library('png', lib.loc='local-libs'); Sys.sleep(60)" system2(Rscript, args=c("-e", dQuote(code)), wait=FALSE) # Try to install; will fail install.packages(pkgfile, repos=NULL, lib="local-libs") ## Gives: ## package 'png' successfully unpacked and MD5 sums checked ## Warning: cannot remove prior installation of package 'png' files <- list.files(path, recursive=TRUE) print(files) ## [1] "libs/x64/png.dll" SUGGESTION: The problem is that unlink(..., recursive=TRUE) is not atomic, leaving a corrupt installation behind. A better solution would be to use file.rename() to move the existing installation to a temporary directory/location, move the new installation in place, and then remove the temporary/old one. The last step will fail if there is a session holding onto the DLL, but at least it does not leave a corrupt installation behind. /Henrik On Thu, Oct 10, 2013 at 4:28 PM, Dan Tenenbaum <dtene...@fhcrc.org> wrote: > Hi, > > Starting with the XML package installed: > >> "XML" %in% rownames(installed.packages()) > [1] TRUE >> > > I ran the following script: > > pkgs <- c("XML") > > for (i in 1:100) > { > install.packages(pkgs, repos="http://cran.fhcrc.org") > if (!all(pkgs %in% rownames(installed.packages()))) > { > print("failed to install pkgs!") > print(paste("Iteration", i)) > break > } > } > > And it failed on the third iteration: > > trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip' > Content type 'application/zip' length 4287270 bytes (4.1 Mb) > opened URL > downloaded 4.1 Mb > > package 'XML' successfully unpacked and MD5 sums checked > > The downloaded binary packages are in > C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages > trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip' > Content type 'application/zip' length 4287270 bytes (4.1 Mb) > opened URL > downloaded 4.1 Mb > > package 'XML' successfully unpacked and MD5 sums checked > > The downloaded binary packages are in > C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages > trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip' > Content type 'application/zip' length 4287270 bytes (4.1 Mb) > opened URL > downloaded 4.1 Mb > > package 'XML' successfully unpacked and MD5 sums checked > Warning: cannot remove prior installation of package 'XML' > > The downloaded binary packages are in > C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages > [1] "failed to install pkgs!" > [1] "Iteration 3" > > At this point the XML package is not installed: > >> "XML" %in% rownames(installed.packages()) > [1] FALSE > > Any idea what could cause this? There is no virus scanner running. > > I notice the warning about failing to remove prior installation, but it looks > like it removed enough of it so that XML is no longer installed. > > I realize my script is a little contrived but I'm trying to track down an > elusive problem in our build system that is causing a lot of grief....this > may or may not be the same problem but it's certainly a problem, so I thought > I'd report it. > > Is there a workaround? > > I've only ever seen this issue on Windows. > > I did try running the same script on a vanilla windows machine and it did not > fail. In fact, it does not always fail on the machine where it fails above. > But once is enough to mess us up. > > >> sessionInfo() > R version 3.0.2 (2013-09-25) > Platform: i386-w64-mingw32/i386 (32-bit) > > locale: > [1] LC_COLLATE=English_United States.1252 > [2] LC_CTYPE=English_United States.1252 > [3] LC_MONETARY=English_United States.1252 > [4] LC_NUMERIC=C > [5] LC_TIME=English_United States.1252 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > Thanks, > Dan > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel