在 Python 项目中设置 GOOGLE_APPLICATION_CREDENTIALS 以使用 Google API

Posted

技术标签:

【中文标题】在 Python 项目中设置 GOOGLE_APPLICATION_CREDENTIALS 以使用 Google API【英文标题】:Set GOOGLE_APPLICATION_CREDENTIALS in Python project to use Google API 【发布时间】:2018-01-12 01:18:46 【问题描述】:

我是一名编程初学者,我正在努力学习如何将谷歌 API 与 Python 一起使用。

我有:

    在 Google Cloud 上创建了一个项目并启用了我想要使用的 API,Natural Language API。 创建凭证并下载凭证JSON文件,保存为apikey.JSON 在终端中我运行了这个命令:export GOOGLE_APPLICATION_CREDENTIALS=apikey.JSON,没有弹出错误。

但是,即使我为此运行了最简单的代码,我也会遇到错误,提示找不到凭据变量。

我不知道现在该做什么。请帮忙。

这是我的代码:

from google.cloud import language

def sentiment_text(text):

    client = language.LanguageServiceClient()

    sentiment = client.analyze_sentiment(text).document_sentiment

    print('Score: '.format(sentiment.score))
    print('Magnitude: '.format(sentiment.magnitude))

sampletxt='Python is great'

sentiment_text(sampletxt)

我有错误:

> Traceback (most recent call last):   File
> "/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple.py", line
> 21, in <module>
>     sentiment_text(sampletxt)
> 
>   File
> "/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple.py", line
> 5, in sentiment_text
>     client = language.LanguageServiceClient()
> 
>   File
> "/usr/local/lib/python3.6/site-packages/google/cloud/gapic/language/v1/language_service_client.py",
> line 147, in __init__
>     ssl_credentials=ssl_credentials)
> 
>   File "/usr/local/lib/python3.6/site-packages/google/gax/grpc.py",
> line 106, in create_stub
> 
>     credentials = _grpc_google_auth.get_default_credentials(scopes)   File
> "/usr/local/lib/python3.6/site-packages/google/gax/_grpc_google_auth.py",
> line 62, in get_default_credentials
>     credentials, _ = google.auth.default(scopes=scopes)
> 
>   File
> "/usr/local/lib/python3.6/site-packages/google/auth/_default.py", line
> 282, in default
> 
>     raise exceptions.DefaultCredentialsError(_HELP_MESSAGE) google.auth.exceptions.DefaultCredentialsError: Could not
> automatically determine credentials. Please set
> GOOGLE_APPLICATION_CREDENTIALS or explicitly create credential and
> re-run the application. For more information, please see
> https://developers.google.com/accounts/docs/application-default-credentials.

值不在环境中

import os 
print(os.environ['GOOGLE_APPLICATION_CREDENTIALS']) 
   File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework‌​/Versions/3.6/lib/py‌​thon3.6/os.py", line 669, in getitem  
raise KeyError(key) from None KeyError: 'GOOGLE_APPLICATION_CREDENTIALS'

【问题讨论】:

我可以看到print(os.environ['GOOGLE_APPLICATION_CREDENTIALS']) 代码运行'import os print(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])' 输出回溯(最近一次调用最后):文件“/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple.py ”,第 2 行,在 中打印(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])文件“/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6 /os.py",第 669 行,在 getitem 中引发 KeyError(key) from None KeyError: 'GOOGLE_APPLICATION_CREDENTIALS' 我不知道如何正确格式化这个东西,看起来很乱,但看起来好像是说没有'GOOGLE_APPLICATION_CREDENTIALS'这样的键。 @stovfl 是的,KeyError 表示请求的环境变量未在 Python 脚本的环境中设置。 Edit您的问题并添加 OS 版本、Python 版本。您必须从执行export ...相同 终端启动Python 脚本。 【参考方案1】:

如果您正在使用 jupyter 笔记本并希望在 Python 代码中设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量:

import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/path/to/file.json"

【讨论】:

您可以通过在此链接上选择您的项目来生成凭据和 Json 文件:console.cloud.google.com/iam-admin/serviceaccounts @marius 谢谢你,谷歌文档也不清楚 @Mim 我认为“不清楚”是对尺寸的低估! 你将如何在生产中满足这一点? 谢谢。我在谷歌上搜索了这个错误很长时间,但没有任何效果。【参考方案2】:

我知道这篇文章已得到答复,但以下是指定 GOOGLE_APPLICATION_CREDENTIALS 变量的更简洁的方法。

client = language.LanguageServiceClient.from_service_account_json("/path/to/file.json")

【讨论】:

是的,没错!这也应该在 Google Translate API 快速入门中,而不是一些环境变量,谢谢@sdikby! 2021年,这个还在API快速入门中,非常感谢!【参考方案3】:

还有一种更简单的方法可以通过明确提及凭据并将其传递给客户端来使其工作,如下所示。

import os
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file("your-json-path-with-filename.json")
client = language.LanguageServiceClient(credentials=credentials)

【讨论】:

【参考方案4】:

如果您在内存中有凭据(例如环境变量),并且您不想专门为它创建文件:

from google.cloud import storage
from google.oauth2 import service_account

gcp_json_credentials_dict = json.loads(gcp_credentials_string)
credentials = service_account.Credentials.from_service_account_info(gcp_json_credentials_dict)
client = storage.Client(project=gcp_json_credentials_dict['project_id'], credentials=credentials)

使用python3.7和google-cloud-storage==1.35.0

【讨论】:

【参考方案5】:

另一种测试方法是进入终端并输入:

# Linux/Unix
set | grep GOOGLE_APPLICATION_CREDENTIALS 

# Windows:
set | Select-String -Pattern GOOGLE_APPLICATION_CREDENTIALS 

这将显示环境变量及其所在的路径。如果这不返回任何内容,那么您还没有设置变量,或者您可能设置了错误的路径

【讨论】:

以上是关于在 Python 项目中设置 GOOGLE_APPLICATION_CREDENTIALS 以使用 Google API的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyCharm 中设置 Django 项目

如何在ortools python中设置约束

Gitlab CI/CD 中设置 Python 虚拟环境的最佳实践是啥

如何在Windows系统中设置Python程序定时运行

我可以在Eclipse Java项目运行配置中设置任意命令吗?

在python中设置延迟