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

Google文档翻译API非文件路径认证报错求助

Google文档翻译API认证问题:手动构建凭证后仍触发DefaultCredentialsError

对接Google文档翻译API时,因不想暴露本地JSON凭证文件,尝试从环境变量加载凭证字段构建字典,通过service_account.Credentials.from_service_account_info生成credentials,但调用翻译函数时触发错误:google.auth.exceptions.DefaultCredentialsError: Your default credentials were not found.,无法将credentials直接赋值给GOOGLE_APPLICATION_CREDENTIALS(该变量仅接受文件路径),求解决方法。

核心问题

你已经成功生成了凭证对象,但没有将其传递给Google文档翻译API的客户端实例,导致API客户端仍在尝试加载默认凭证(即查找GOOGLE_APPLICATION_CREDENTIALS指向的文件),从而触发错误。

解决步骤

1. 修正凭证字典的错误

检查环境变量键名的大小写匹配,以及私钥的格式处理:

  • 环境变量名需与JSON凭证中的key完全对应(通常为大写),比如PRIVATE_KEY而非private_key,AUTH_PROVIDER_X509_CERT_URL而非AUTH_PROVIDER_x509_CERT_URL。
  • 私钥在环境变量中存储时,换行符可能被转义为\\n,需替换为真实的换行符\n,否则会导致凭证无效。

修正后的凭证字典代码:

my_google_credentials = {
    "type": os.environ.get('TYPE'),
    "project_id": os.environ.get('PROJECT_ID'),
    "private_key_id": os.environ.get('PRIVATE_KEY_ID'),
    "private_key": os.environ.get('PRIVATE_KEY').replace('\\n', '\n'),
    "universe_domain": os.environ.get('UNIVERSE_DOMAIN'),
    "token_uri": os.environ.get('TOKEN_URI'),
    "client_email": os.environ.get('CLIENT_EMAIL'),
    "client_id": os.environ.get('CLIENT_ID'),
    "auth_uri": os.environ.get('AUTH_URI'),
    "auth_provider_x509_cert_url": os.environ.get('AUTH_PROVIDER_X509_CERT_URL'),
    "client_x509_cert_url": os.environ.get('CLIENT_X509_CERT_URL')
}

2. 将凭证传递给API客户端

生成凭证后,需要将其传入DocumentTranslationClient的构造函数,确保客户端使用你手动构建的凭证而非默认凭证。同时需为凭证添加翻译文档所需的权限范围:

完整修正代码:

from google.cloud import translate_v3 as translate
from google.oauth2 import service_account
import os

project_id = "REDACTED"
file_path = "REDACTED"  # 格式应为gs://your-bucket/input/file.docx
target_language = 'en'

# 构建凭证字典
my_google_credentials = {
    "type": os.environ.get('TYPE'),
    "project_id": os.environ.get('PROJECT_ID'),
    "private_key_id": os.environ.get('PRIVATE_KEY_ID'),
    "private_key": os.environ.get('PRIVATE_KEY').replace('\\n', '\n'),
    "universe_domain": os.environ.get('UNIVERSE_DOMAIN'),
    "token_uri": os.environ.get('TOKEN_URI'),
    "client_email": os.environ.get('CLIENT_EMAIL'),
    "client_id": os.environ.get('CLIENT_ID'),
    "auth_uri": os.environ.get('AUTH_URI'),
    "auth_provider_x509_cert_url": os.environ.get('AUTH_PROVIDER_X509_CERT_URL'),
    "client_x509_cert_url": os.environ.get('CLIENT_X509_CERT_URL')
}

# 生成带权限范围的凭证
credentials = service_account.Credentials.from_service_account_info(my_google_credentials)
scoped_credentials = credentials.with_scopes(['https://www.googleapis.com/auth/cloud-translation'])

# 初始化客户端时传入凭证
client = translate.DocumentTranslationClient(credentials=scoped_credentials)

def translate_document(project_id, file_path, target_language):
    parent = f"projects/{project_id}/locations/global"
    input_config = {"gcs_source": {"input_uri": file_path}}
    # 替换为你的GCS输出桶路径
    output_config = {"gcs_destination": {"output_uri_prefix": "gs://your-output-bucket/path/"}}
    
    request = {
        "parent": parent,
        "target_language_code": target_language,
        "input_configs": [input_config],
        "output_config": output_config
    }

    # 执行翻译请求
    operation = client.translate_document(request=request)
    response = operation.result(timeout=180)
    return response

# 调用翻译函数
response = translate_document(project_id, file_path, target_language)
print("Translation completed.")

3. 额外注意事项

  • 确保你的服务账号拥有Cloud Translation API User或相关权限,否则会触发权限错误。
  • 输入文件路径需为GCS(Google Cloud Storage)路径(gs://xxx),文档翻译API不支持本地文件直接上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:20:08