Heroku部署Python+R应用时安装rgdal/terra遇gdal-config缺失错误
解决Heroku上R找不到gdal-config的问题
一、GDAL在Heroku的固定安装路径
Heroku-geo-buildpack会将GDAL、GEOS、PROJ安装到以下固定目录:
- gdal-config 路径:
/app/.heroku/vendor/gdal/bin/gdal-config - GDAL库路径:
/app/.heroku/vendor/gdal/lib - PROJ相关路径:
/app/.heroku/vendor/proj/bin、/app/.heroku/vendor/proj/lib、/app/.heroku/vendor/proj/share/proj - GEOS相关路径:
/app/.heroku/vendor/geos/bin、/app/.heroku/vendor/geos/lib
二、两种解决方法
方法1:在init.R开头设置环境变量
在执行包安装逻辑前,先配置R的环境变量,让它能定位到GDAL工具和依赖库:
# 配置GDAL、PROJ、GEOS的环境变量 Sys.setenv( PATH = paste("/app/.heroku/vendor/gdal/bin", "/app/.heroku/vendor/proj/bin", "/app/.heroku/vendor/geos/bin", Sys.getenv("PATH"), sep = ":"), LD_LIBRARY_PATH = paste("/app/.heroku/vendor/gdal/lib", "/app/.heroku/vendor/proj/lib", "/app/.heroku/vendor/geos/lib", Sys.getenv("LD_LIBRARY_PATH"), sep = ":"), GDAL_CONFIG = "/app/.heroku/vendor/gdal/bin/gdal-config", PROJ_INCLUDE = "/app/.heroku/vendor/proj/include", PROJ_LIB = "/app/.heroku/vendor/proj/share/proj" ) # 安装依赖包 install.packages(c("rgdal", "terra"), type = "source", dependencies = TRUE)
方法2:通过Heroku全局配置变量设置
在本地终端执行以下命令,将环境变量添加到Heroku应用的全局配置中,确保R和Python进程都能访问:
heroku config:set PATH="/app/.heroku/vendor/gdal/bin:/app/.heroku/vendor/proj/bin:/app/.heroku/vendor/geos/bin:$PATH" heroku config:set LD_LIBRARY_PATH="/app/.heroku/vendor/gdal/lib:/app/.heroku/vendor/proj/lib:/app/.heroku/vendor/geos/lib:$LD_LIBRARY_PATH" heroku config:set GDAL_CONFIG="/app/.heroku/vendor/gdal/bin/gdal-config" heroku config:set PROJ_INCLUDE="/app/.heroku/vendor/proj/include" heroku config:set PROJ_LIB="/app/.heroku/vendor/proj/share/proj"
三、验证配置是否生效
可以在init.R中添加调试代码,确认路径配置正确:
# 检查gdal-config是否可被找到 cat("GDAL Config Path:\n") system("which gdal-config") # 打印当前PATH环境变量 cat("\nCurrent PATH:\n") print(Sys.getenv("PATH"))
内容的提问来源于stack exchange,提问作者user3324491
相关产品推荐
相关产品推荐

