如何阻止R与devtools重复下载系统中已安装的tar/tgz包及外部依赖
问题1解答
CRAN官方提供的macOS版R默认会内置独立的Homebrew实例,安装包时如果检测到依赖缺失会优先用这个内置实例下载安装,和你单独安装的全局Homebrew完全独立、互不关联,确实会出现重复安装的情况,默认不会互相调用。
问题2解答
你提到的修改PATH的思路是可行的,配合R专属配置可以实现优先调用本地全局Homebrew,操作步骤如下:
- 首先确认你自己安装的Homebrew路径:Intel芯片Mac默认路径为
/usr/local,Apple Silicon芯片Mac默认路径为/opt/homebrew - 新建/编辑R编译配置文件
~/.R/Makevars,添加以下内容(注意替换为对应芯片的Homebrew路径):
BREW = /opt/homebrew/bin/brew PKG_CONFIG_PATH = /opt/homebrew/lib/pkgconfig CFLAGS += -I/opt/homebrew/include LDFLAGS += -L/opt/homebrew/lib
- 新建/编辑R启动配置文件
~/.Rprofile,添加以下内容修改R的默认PATH优先级:
# 优先读取全局Homebrew路径 Sys.setenv(PATH = paste("/opt/homebrew/bin", Sys.getenv("PATH"), sep = ":"))
保存后重启R/RStudio即可生效,后续安装R包时会优先检索你本地安装的Homebrew依赖,不会重复下载内置版本。
问题3解答
默认状态下内置Homebrew的依赖和全局Homebrew的依赖不互通,R包只会优先读取内置实例的依赖。完成上述配置后即可实现依赖互通,比如你提前用全局Homebrew安装了tesseract,后续安装R的tesseract包时就会直接调用全局的tesseract程序和依赖,不会重复安装。
Tesseract语言包问题解决
要避免R的tesseract包自动下载全量语言包,只需在~/.Rprofile中额外添加一行配置,指定语言包路径指向你全局Homebrew安装的tessdata目录即可:
# 替换为对应芯片的Homebrew tessdata路径 Sys.setenv(TESSDATA_PREFIX = "/opt/homebrew/share/tessdata/")
重启R后即可生效,R会直接读取你通过Homebrew安装的指定语言包,不会额外下载冗余文件。
内容的提问来源于stack exchange,提问作者Pier-Eric Chamberland
相关产品推荐
相关产品推荐

