On 11-Oct-13 3:15, Henrik Bengtsson wrote:
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.
There is an option to avoid the corrupted installations when running multiple instances of R:
options(install.lock = TRUE)
https://stat.ethz.ch/pipermail/r-help/2010-December/263722.html
Not sure if this will solve the original problem though.

Best wishes,
Jon


/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


--
Jon Olav Skøien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit

Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY

jon.sko...@jrc.ec.europa.eu
Tel:  +39 0332 789205

Disclaimer: Views expressed in this email are those of the individual and do 
not necessarily represent official views of the European Commission.

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to