R语言cloudml包提交云端任务时gcloud调用失败求助
我猜你肯定头疼坏了——刚装好R的cloudml包,结果提交任务时就碰到路径报错。这个问题其实很常见,根源就是Google Cloud SDK的安装路径里有空格(C:\Users\vidar\AppData\Local\Google\Cloud SDK),Windows的cmd执行命令时没给路径加引号,导致系统只识别到空格前的C:\Users\vidar\AppData\Local\Google\Cloud,自然就报错说这不是可执行命令了。
给你几个实用的解决办法,按从易到难或者彻底程度排序:
临时修复:手动给gsutil路径加引号
先定位cloudml包的安装路径:system.file(package = "cloudml")进入这个目录,找到处理云端命令的脚本(比如
R/cloudml.R或者类似文件),搜索gsutil.cmd相关的代码行,把原来的路径用双引号括起来。举个例子,把:gsutil_path <- "C:\\Users\\vidar\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gsutil.cmd"修改成:
gsutil_path <- "\"C:\\Users\\vidar\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gsutil.cmd\""这样cmd执行时就能正确识别带空格的路径了。
彻底解决:重装Cloud SDK到无空格路径
直接把Google Cloud SDK卸载,然后重新安装到没有空格的路径,比如C:\GoogleCloudSDK。之后在R里重新配置cloudml的SDK路径:cloudml::gcloud_install(sdk_path = "C:/GoogleCloudSDK")这样后续所有调用都不会再碰到空格路径的坑。
曲线救国:用Windows短路径替代
Windows支持8.3格式的短路径,你可以先打开cmd,输入以下命令获取Cloud SDK的短路径:dir /x "C:\Users\vidar\AppData\Local\Google"输出里会看到
Cloud SDK对应的短名称(比如CLOUD~1),然后把cloudml里的gsutil路径改成短路径形式:gsutil_path <- "C:\\Users\\vidar\\AppData\\Local\\Google\\CLOUD~1\\google-cloud-sdk\\bin\\gsutil.cmd"这种方法不用重装,也能绕开空格问题。
内容的提问来源于stack exchange,提问作者Viðar Ingason

