在Google Compute Engine R集群安装httr/curl包遇Anticonf错误求助
解决GCE R集群安装curl/httr包时的libcurl缺失问题
Hi Neal, 这个问题我在部署GCE R集群时也踩过坑!本质是R的curl包依赖系统层面的libcurl开发库,但默认的r-base镜像并没有预装这个编译依赖,所以执行install.packages("curl")时会触发ANTICONF配置失败。下面给你两种实用的解决办法:
方法一:创建集群时预配置(推荐,更高效)
如果还没创建集群,或者可以重新搭建,最好在节点初始化阶段就把系统依赖装好。你可以通过googleComputeEngineR的startup_script参数,给每个节点添加启动时自动执行的shell脚本:
library(googleComputeEngineR) # 定义启动脚本:更新包源并安装libcurl开发库 startup_script <- " #!/bin/bash apt-get update -y apt-get install -y libcurl4-openssl-dev " # 创建集群时指定启动脚本 cl <- gce_vm_cluster( template = "r-base", name_prefix = "r-cluster", num_nodes = 3, # 替换成你的实际节点数 startup_script = startup_script )
这样节点启动后会自动完成系统依赖的安装,之后再执行clusterEvalQ(cl, install.packages(c("curl", "httr")))就不会报错了。
方法二:给已运行的集群节点补装依赖
如果集群已经创建好了,不想重新搭建,可以通过googleComputeEngineR的SSH工具给所有节点批量安装系统依赖:
- 先给所有节点执行系统包安装命令:
# 遍历集群所有节点,执行apt安装操作 lapply(cl, function(vm) { gce_ssh(vm, "sudo apt-get update -y && sudo apt-get install -y libcurl4-openssl-dev") })
- 等所有节点安装完成后,再安装R包:
clusterEvalQ(cl, install.packages("curl")) clusterEvalQ(cl, install.packages("httr"))
小补充
为什么要装libcurl4-openssl-dev而不是普通的libcurl4?因为R的curl包需要编译,必须依赖包含头文件和编译库的开发版包,普通的运行时库满足不了编译需求哦。
内容的提问来源于stack exchange,提问作者Neal Barsch
相关产品推荐
相关产品推荐

