R版本从3.3.0升级至3.5.0后如何批量更新所有R包
R版本升级后批量更新不兼容R包方案
问题原因
R 3.5.0对内部数据结构做了不向下兼容的ABI调整,所有R 3.4及更早版本编译安装的R包都无法在3.5.0环境下运行,触发的报错为:
Error : package 'stringi' was installed by an R version with different internals; it needs to be reinstalled for use with this R version
仅需对所有旧版安装的R包执行重新编译安装即可解决。
方案1:现有环境内批量强制重装
适合已经升级完R版本,直接在现有环境修复的场景:
- 第一步:导出当前已安装的所有R包列表,在R交互终端执行以下命令:
# 提取所有已安装包名 installed_pkgs <- rownames(installed.packages()) # 可选:将包名存到本地文件,方便后续校验 writeLines(installed_pkgs, "r_installed_pkgs.txt") - 第二步:批量强制重装所有包,自动拉取适配R 3.5.0的版本并编译:
install.packages( installed_pkgs, repos = "适配R3.5版本的CRAN镜像地址", dependencies = TRUE, force = TRUE ) - 第三步:校验修复结果,加载报错的包确认无兼容性提示:
无报错即说明该包已适配新版本,可批量校验所有包确认修复完成。library(stringi)
方案2:Docker镜像构建层面根治
适合重新构建Debian 8 (Jessie) 镜像的场景,从根源避免旧版本包残留:
- 在Dockerfile中升级R版本前,先清理所有旧R相关文件:
# 卸载系统层面的旧R包,删除所有旧R包安装目录 RUN apt-get purge -y r-base r-base-dev && \ rm -rf /usr/local/lib/R/site-library /usr/lib/R/site-library /usr/lib/R/library && \ apt-get autoremove -y && apt-get clean - 后续按原有流程编译安装R 3.5.0,再批量安装需要的R包即可。
- 若有固定版本需求的R包,可提前准备包列表,通过
devtools::install_version指定版本安装:# 先安装devtools install.packages("devtools", dependencies = TRUE) # 安装指定版本的包 devtools::install_version("stringi", version = "1.1.7", force = TRUE)
内容的提问来源于stack exchange,提问作者goeggtart
相关产品推荐
相关产品推荐

