Search code examples
rgithubdevtools

R Unable to Install Packages From GitHub (System Error 267 @win/processx.c:1040)


TL;DR

Unable to install any package from GitHub, System Error 267

I've newly setup R (v4.1), Rstudio and just installed devtools. I also additionally installed Rtools40 and added it to my path (global environment)

Rtools seems to work properly as validated with: Sys.which("make") & maketools::rtools_find() (output below)

Problem

I am unable to install any package from GitHub, e.g. rstudio/gt. The error is nearly identical for any GitHub Package, allways stating system error 267

devtools::install_github("rstudio/gt")
Downloading GitHub repo rstudio/gt@HEAD
Error: Failed to install 'gt' from GitHub:
  create process 'C:/PROGRA~1/R/R-41~1.0/bin/x64/Rcmd.exe' (system error 267, Der Verzeichnisname ist ungültig.
) @win/processx.c:1040 (processx_exec

Update

As suggested I reinstalled R 4.1.0 to the most simple folde possible C:/R/ The error ist still the same despite now lacking tildes ~

devtools::install_github("rstudio/gt")
Downloading GitHub repo rstudio/gt@HEAD
Error: Failed to install 'gt' from GitHub:
  create process 'C:/R/bin/x64/Rcmd.exe' (system error 267, Der Verzeichnisname ist ungültig.
) @win/processx.c:1040 (processx_exec)

Update 2:

Changed the .libPaths to a folder without any special characters

.libPaths( c( "D:/tmp" , .libPaths() ) )
.libPaths()
[1] "D:/tmp"                                     "C:/Users/Björn/Documents/R/win-library/4.1"
[3] "C:/R/library"  

Error is still the same

Update 3:

I updated some packages, and checked the version of packageVersion('processx')= 3.5.2

install.packages("testthat") 
install.packages("pkgload") 
install.packages("devtools") 
install.packages("remote")

Content of Sys.getenv

 Sys.getenv('Path')
[1] "C:\\rtools40\\usr\\bin;C:\\R\\bin\\x64;C:\\rtools40\\usr\\bin;C:\\rtools40\\mingw64\\bin;

Diagnostics

Session Info

> sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19042)

Matrix products: default

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C                    LC_TIME=German_Germany.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

Rtools successful installed / setup

Sys.which("make")
                              make 
"C:\\rtools40\\usr\\bin\\make.exe" 

maketools::rtools_find()
$version
[1] ‘4.0’

$compiler
[1] "gcc 8.3.0"

$api
[1] ‘8’

$PATH
[1] "C:\\rtools40\\usr\\bin"

$BINPREF
[1] "C:/rtools40/mingw$(WIN)/bin/"

$available
[1] TRUE

$compatible
[1] TRUE   

Solution

  • The standalone mode of the remotes package solved the issue for me, as suggested by the maintainer of processx (Gábor Csárdi) here

    devtools::install_github() only calls remotes::install_github().
    However, for the remotes, there is the option to be exectued in standalone mode

    Source: Cran

    Standalone mode

    remotes will use the curl, git2r and pkgbuild packages if they are installed to provide faster implementations for some aspects of the install process. However if you are using remotes to install or update these packages (or their reverse dependencies) using them during installation may fail (particularly on Windows).

    If you set the environment variable R_REMOTES_STANDALONE="true" (e.g. in R Sys.setenv(R_REMOTES_STANDALONE="true")) you can force remotes to operate in standalone mode and use only its internal R implementations. This will allow successful installation of these packages

    With the following lines of code, gt was finally successfull installed from github.

    Sys.setenv(R_REMOTES_STANDALONE="true")
    remotes::install_github("rstudio/gt")
    

    Thanks all the commentators for your help!

    Update October / 2021

    To avoid having to do these steps (Set in standanlone mode, and install with remotes) over and over again everytime you want to install a new package from github another convenient workaround is to just rollback to the previous version of processx as adviced by @rempsy in the github issue:

    install.packages("pacman")
    pacman::p_del(processx)
    # Installing previous verison 3.5.1
    install.packages("https://cran.r-project.org/src/contrib/Archive/processx/processx_3.5.1.tar.gz", repos=NULL, type="source") 
    

    After the rollback of processx to version 3.5.1, devtools::install_github() works as expected, e.g.

    devtools::install_github("rstudio/gt")