请求升级shinyapps.io的GEOS版本或提供临时绕过方案
解决shinyapps.io上GEOS版本过低导致lwgeom安装失败的问题
我完全懂你现在的头疼事——shinyapps.io自带的GEOS版本是3.5.1,而lwgeom包要求至少3.6.0,平台还没更新,得找临时办法绕过去。下面几个方案你可以挨个试试:
方案1:安装兼容低GEOS版本的旧版lwgeom
lwgeom早期版本对GEOS的要求更低,你可以指定安装适配GEOS 3.5.1的旧版本:
- 如果你用
renv管理依赖,直接在renv.lock里把lwgeom的版本改成0.2-2(这个版本明确支持GEOS 3.5.x) - 要是没有用renv,就在你的部署脚本里指定版本安装:
install.packages("lwgeom", version = "0.2-2", repos = "https://cran.r-project.org")
注意:旧版本可能缺少一些新功能,但能保证在当前shinyapps.io环境下正常运行
方案2:用其他包替代lwgeom的功能
如果你的应用只用到了lwgeom的部分功能,可以尝试用sf包的原生函数替代:
- 比如
st_make_valid()这类常用函数,sf后来也集成了类似功能,而且sf在shinyapps.io上的版本应该适配了现有GEOS 3.5.1环境 - 梳理代码里调用
lwgeom的逻辑,看看能不能用sf或其他空间处理包的函数完成相同操作,完全去掉lwgeom的依赖
方案3:手动编译适配低GEOS版本的lwgeom(进阶)
这个方法适合有一定R包编译经验的开发者,可控性更高:
- 本地搭建和shinyapps.io一致的环境——比如用
rocker/r-ver:4.0.0镜像(错误日志显示R版本是4.0.0),在容器里安装GEOS 3.5.1 - 在这个环境下编译
lwgeom包,生成适配的二进制包或源码包 - 把编译好的包文件放到你的应用目录里,部署时优先安装本地包,而不是从CRAN拉取:
install.packages("./lwgeom_xxx.tar.gz", repos = NULL, type = "source")
方案4:临时移除lwgeom依赖(如果可行)
如果lwgeom只是应用里的非核心功能,或者只是用于测试,可以暂时注释掉相关代码和依赖声明,先完成部署,等shinyapps.io更新GEOS版本后再重新加回来。
内容的提问来源于stack exchange,提问作者Jean-Phi N
相关产品推荐
相关产品推荐

