本地R包在第二个R项目中的引用与高效更新方案咨询
解决R包开发中本地包更新的权限与占用问题
方法1:用devtools::load_all()跳过安装步骤
- 开发
functionPackage时,不用每次安装到系统库,直接在开发包的RStudio会话里执行:
这会把修改后的源码直接加载到当前会话,无需安装。devtools::load_all("path/to/functionPackage") - 第二个项目如果需要引用最新版本,不要用
library(functionPackage)加载系统库的包,而是同样用load_all()指向functionPackage的源码文件夹,修改源码后重新执行load_all()就能实时更新,完全绕开安装/卸载的权限问题。
方法2:自定义R库路径,避开系统默认的AppData目录
- 新建一个自己完全有权限的文件夹,比如
C:/MyRPackages,然后在R中设置库路径优先使用这个文件夹:.libPaths(c("C:/MyRPackages", .libPaths())) - 把这个配置加到你的
.Rprofile文件中(可以用usethis::edit_r_profile()打开编辑),每次启动R自动生效。 - 安装包时指定这个自定义路径:
后续更新时,因为是自己创建的文件夹,不会出现系统权限锁定的问题。devtools::install("path/to/functionPackage", lib = "C:/MyRPackages")
方法3:彻底卸载占用的包再更新
- 如果必须安装到系统库,更新前先在所有引用了
functionPackage的R会话里执行:
强制卸载包,确保没有会话在占用它。detach("package:functionPackage", unload = TRUE, force = TRUE) - 之后再执行
remove.packages("functionPackage")和重装操作,就不会出现“无法移除旧版本”的报错。
方法4:用renv隔离项目依赖
- 给第二个项目初始化本地依赖环境,避免和系统库冲突:
# 在第二个项目的R会话中执行 renv::init() renv::install("path/to/functionPackage") - 后续更新
functionPackage时,直接在该项目的renv环境中重装:
每个项目的依赖都是独立的,不会出现跨会话占用的问题,权限也更可控。renv::install("path/to/functionPackage")
内容的提问来源于stack exchange,提问作者altwood
相关产品推荐
相关产品推荐

