You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用服务账号JSON密钥上传GCS时他人端认证失败,求排查

问题分析与解决方案

直接报错原因

你的报错是因为shutil.which("gcloud")返回了None——对方机器上没有安装Google Cloud CLI(gcloud),或者gcloud未添加到系统PATH中,导致找不到可执行文件,传给subprocess.run的第一个参数为None,触发类型错误。

冗余操作优化

另外,代码里调用gcloud auth activate-service-account完全是多余的:storage.Client.from_service_account_json()会直接使用指定的JSON密钥完成认证,不需要通过gcloud CLI做额外激活操作。这一步不仅没用,还强制依赖了gcloud CLI,增加了他人使用的门槛。

具体修复步骤

1. 移除冗余的gcloud CLI调用

修改config_gcloud函数,去掉subprocess调用部分,直接初始化storage客户端:

def config_gcloud():
    storage_client = storage.Client.from_service_account_json(CREDENTIALS_LOCATION)
    return storage_client

2. 确保对方的密钥路径正确

  • 要求对方将CREDENTIALS_LOCATION设置为绝对路径,避免因脚本运行目录与密钥存放目录不一致导致的文件找不到问题。
  • 确认密钥文件真实存在,文件名/路径无拼写错误,且文件权限允许读取(比如Windows下的权限限制)。

3. GCP UI端无需额外操作

你已经创建了权限充足的服务账号并提供了JSON密钥,GCP UI端不需要做额外认证操作——只要对方密钥文件正确、路径配置无误,就能直接通过代码完成认证。

备选:若必须保留gcloud CLI调用(不推荐)

如果因特殊需求必须使用gcloud CLI,需让对方:

  • 安装Google Cloud CLI,并确保gcloud可执行文件在系统PATH中;或者直接在代码里指定gcloud的绝对路径(比如"C:/Program Files/Google/Cloud SDK/google-cloud-sdk/bin/gcloud.cmd"或"/usr/bin/gcloud")。

内容的提问来源于stack exchange,提问作者Sana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:45:39