Search code examples
pythonrknitrgeopandasreticulate

Cannot import geopandas using reticulate in RStudio when knitting with knitr


I am trying to knit an Rmd file using reticulate and Python inside of a virtualenv. The following is my R set up chunk:

```{r r-setup}
library(reticulate)

venv_path <- "/path/to/venv/"
use_virtualenv(venv_path, required = TRUE)
```

This works as expected. However, the next step breaks when I try to import geopandas:

```{python}
import geopandas as gpd
```

The traceback is as follows:

Error in py_module_import... OSError: Could not find lib c or load any variants...

The traceback error points to the shapely package from shapely.geometry import shape, Point File. Other Python libraries load with no issue within the chunk e.g. import os.

From these messages, I'm guessing that it is not loading the OGR/GDAL bindings. However, I'm not sure how to solve this.

import geopandas runs without error when I run the chunk inside of the notebook e.g. not knitting. It also works within the repl_python() shell of my project. So the issue seems to be principally with knitr and knitting.

My RStudio version is: 1.1.456.

The output of session_info() is:

sessionInfo()

R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin17.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

locale:
[1] en_NZ.UTF-8/en_NZ.UTF-8/en_NZ.UTF-8/C/en_NZ.UTF-8/en_NZ.UTF-8

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

other attached packages:
[1] reticulate_1.10 stringr_1.3.1   dplyr_0.7.6     ggplot2_3.0.0  

loaded via a namespace (and not attached):
[1] Rcpp_0.12.18     pillar_1.3.0     compiler_3.5.1   plyr_1.8.4      
[5] bindr_0.1.1      tools_3.5.1      digest_0.6.17    packrat_0.4.9-3 
[9] jsonlite_1.5     evaluate_0.11    tibble_1.4.2     gtable_0.2.0    
[13] lattice_0.20-35  pkgconfig_2.0.2  rlang_0.2.2      Matrix_1.2-14   
[17] yaml_2.2.0       bindrcpp_0.2.2   withr_2.1.2      knitr_1.20      
[21] rprojroot_1.3-2  grid_3.5.1       tidyselect_0.2.4 glue_1.3.0      
[25] R6_2.2.2         rmarkdown_1.10   purrr_0.2.5      magrittr_1.5    
[29] scales_1.0.0     backports_1.1.2  htmltools_0.3.6  assertthat_0.2.0
[33] colorspace_1.3-2 stringi_1.2.4    lazyeval_0.2.1   munsell_0.5.0   
[37] crayon_1.3.4

Solution

  • I managed to solve this by removing the "DYLD_FALLBACK_LIBRARY_PATH" which points to my brew installed R libraries. The solution was within a python chunk as follows:

    ```{python}
    import os
    FALLBACK_PATH = {"DYLD_FALLBACK_LIBRARY_PATH" : "/usr/local/Cellar/r/3.5.1/lib/R/lib"}
    del os.environ["DYLD_FALLBACK_LIBRARY_PATH"]
    
    import geopandas
    
    # Reset the environmental variable.
    os.environ.update(FALLBACK_PATH)
    ```
    

    I'm not sure if this is the cleanest solution but it works. Also not sure if this is a Mac OSX problem only as well.