构建含Vignettes的R包时出现'arch = x64'未安装错误求助
问题根因定位
- 核心触发源为微软Defender反恶意软件病毒库更新后新增的误判规则:R构建含Vignettes的包时,会先在系统临时目录生成完整的临时安装副本,再调用该临时副本渲染Vignettes文件,Defender实时扫描会误将临时目录下的x64架构二进制编译文件判定为风险文件直接隔离删除,导致后续环节找不到对应架构的包文件,触发
Error : package 'my_pkg' is not installed for 'arch = x64'报错。 - 半安装状态、
my_pkg::暴露非导出函数的异常,是因为Defender仅删除了架构相关的二进制文件,包的命名空间元数据、函数定义文件仍留存,不符合正常安装的目录结构但仍可被R的补全逻辑识别。 - 单独构建Vignettes、不构建Vignettes打包时可正常运行,是因为这两个场景不会触发「临时目录下完整安装包后调用副本」的流程,不会触发Defender误杀。
解决方案
临时验证方案
关闭微软Defender实时保护后重新执行devtools::build(),如果报错消失即可100%确认是误杀问题。
永久修复方案
无需关闭Defender实时防护,仅需将以下路径加入微软Defender的排除项列表即可:
- R安装目录,默认路径为
C:\Program Files\R\ - Rtools安装目录,默认路径为
C:\rtools40\(对应R 4.1.x版本) - 你当前的R包开发工作目录
- R系统临时目录:可在R控制台执行
tempdir()获取当前临时目录路径,也可先在系统环境变量中设置R_TEMP为固定路径(如C:\R\temp)后将该固定路径加入排除项 - R用户包库目录:可在R控制台执行
.libPaths()获取对应路径加入排除项
可选优化配置
如果仍偶发类似问题,可在包的DESCRIPTION文件中添加如下配置,关闭32位架构编译,减少Defender扫描触发概率:
Biarch: false
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

