使用renv手动加载时仍调用系统库版本的问题咨询
renv手动加载环境时加载系统旧包的原因及解决
问题核心
在项目目录内启动R可正常加载rasterVis_0.51.5,但在外部目录通过renv::load('~/venv/modelling/renv')加载环境时,却加载了系统库的rasterVis_0.50版本。
原因分析
对比两种场景的.libPaths()输出就能定位问题:
- 项目内启动时的库路径:
Project '/gpfs0/home/user/venv/modelling' loaded. [renv 0.15.5] > .libPaths() [1] "/gpfs0/home/user/venv/modelling/renv/library/R-4.0/x86_64-pc-linux-gnu" [2] "/gpfs0/global/software/easybuild-broadwell/software/R/4.0.4-foss-2020b-2/lib64/R/library" - 手动加载后的库路径:
> renv::load('~/venv/modelling/renv') * Project '~/venv/modelling/renv' loaded. [renv 0.15.5] > .libPaths() [1] "/gpfs0/home/user/venv/modelling/renv/renv/library/R-4.0/x86_64-pc-linux-gnu" [2] "/gpfs0/global/software/easybuild-broadwell/software/R/4.0.4-foss-2020b-2/lib64/R/library"
关键差异在于第一个路径多了一层renv/:你调用renv::load()时传入的是项目内的renv子目录,而非项目根目录。renv的逻辑是将传入路径视为项目根目录,再在其下寻找renv/library作为环境库路径。当你传入~/venv/modelling/renv时,renv会尝试加载不存在的~/venv/modelling/renv/renv/library,最终只能 fallback 到系统库。
解决方法
调用renv::load()时传入项目根目录而非renv子目录:
renv::load('~/venv/modelling')
执行后.libPaths()的第一个路径会和项目内启动时一致,此时加载rasterVis即可获取项目环境内的0.51.5版本。
内容的提问来源于stack exchange,提问作者Annegret
相关产品推荐
相关产品推荐

