R远程仓库长密码致文件名过长问题的解决办法
解决R仓库长密码导致的文件名过长问题
我们此前通过以下方式添加R远程仓库已使用多年:
local({ r <- list("internal-repo" = "https://username:password@remote.repo.com/") options(repos = r) })
但公司针对技术用户推出新密码政策后,密码变得极长,导致安装包时出现如下错误:
2: In gzfile(file, mode) : cannot open compressed file '/tmp/RtmpQA3EHC/repos_https%3A%2F%2Ftechuser% ... verylongstring ...%remote.repo%2Fsrc%2Fcontrib.rds', probable reason 'File name too long'
以下是无需额外包管理系统的解决方法:
用环境变量存储认证信息
不在仓库URL中直接嵌入用户名和密码,而是通过专属环境变量传递认证信息。在你的.Rprofile中修改为:local({ r <- list("internal-repo" = "https://remote.repo.com/") options(repos = r) # 环境变量命名规则:REPO_加上仓库名的大写形式 Sys.setenv(REPO_INTERNAL_REPO = "username:verylongpassword") })R的包安装流程会自动识别对应仓库的
REPO_*环境变量,以此完成认证,这样生成的临时文件名不再包含长密码,避免长度超限。用.netrc文件存储认证(类Unix系统适用)
在用户主目录下创建.netrc文件,写入仓库的认证详情:machine remote.repo.com login username password verylongpassword为了安全,设置文件仅自己可读:
chmod 600 ~/.netrc之后在
.Rprofile中只需设置仓库基础URL即可:local({ r <- list("internal-repo" = "https://remote.repo.com/") options(repos = r) })R会自动读取
.netrc中的认证信息访问仓库,彻底避免URL中出现长密码。修改临时文件存储路径(应急方案)
通过设置R_USER_CACHE_DIR环境变量,指定一个路径更短的缓存目录,减少临时文件名的总长度。比如在启动R前执行:export R_USER_CACHE_DIR="/tmp/r-cache"或者在
.Rprofile中添加:Sys.setenv(R_USER_CACHE_DIR = "/tmp/r-cache")这种方法只是缓解路径长度问题,不如前两种方法从根源解决认证信息暴露在URL中的问题。
内容的提问来源于stack exchange,提问作者Markus Zinser
相关产品推荐
相关产品推荐

