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

时间:2017-08-04 07:50:07

标签: python google-api

我是一名编程初学者,并且学习如何在Python中使用Google API。

我有:

  1. 在Google Cloud上创建了一个项目,并启用了我想要使用的API,Natural Language API。
  2. 创建了凭据并下载了凭据JSON文件,并将其另存为apikey.JSON
  3. 在终端我运行了这个命令:导出GOOGLE_APPLICATION_CREDENTIALS = apikey.JSON,没有弹出错误。
  4. 然而,即使我为此运行了最简单的代码,我也有错误,表示找不到凭证varialbe。

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

    这是我的代码:

    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(最近一次调用最后一次):文件   “/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple.py”,line   21,在       sentiment_text(sampletxt)

         

    文件   “/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple.py”,line   5,在sentiment_text中       client = language.LanguageServiceClient()

         

    文件   “/usr/local/lib/python3.6/site-packages/google/cloud/gapic/language/v1/language_service_client.py”   第147行,在 init 中       ssl_credentials = ssl_credentials)

         

    文件“/usr/local/lib/python3.6/site-packages/google/gax/grpc.py”,   第106行,在create_stub中

    credentials = _grpc_google_auth.get_default_credentials(scopes)   File
    
         

    “的/ usr /本地/ LIB / python3.6 /站点包/谷歌/ GAX / _grpc_google_auth.py”,   第62行,在get_default_credentials中       凭证,_ = google.auth.default(范围=范围)

         

    文件   “/usr/local/lib/python3.6/site-packages/google/auth/_default.py”,一行   282,默认

    raise exceptions.DefaultCredentialsError(_HELP_MESSAGE) google.auth.exceptions.DefaultCredentialsError: Could not
    
         

    自动确定凭据。请设置   GOOGLE_APPLICATION_CREDENTIALS或明确创建凭据和   重新运行该应用程序。有关详细信息,请参阅   https://developers.google.com/accounts/docs/application-default-credentials

    import os 
    print(os.environ['GOOGLE_APPLICATION_CREDENTIALS']) 
    
      

    输出回溯(最近一次呼叫最后一次):

      File "/Users/YELI1/Downloads/googlecloud/sentimentanalysis/simple‌​.py", line 2, in <module>  
    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'
    

5 个答案:

答案 0 :(得分:71)

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

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

# Linux/Unix
set | grep GOOGLE_APPLICATION_CREDENTIALS 

# Windows:
set | Select-String -Pattern GOOGLE_APPLICATION_CREDENTIALS 

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

答案 3 :(得分:0)

我知道此帖子已被确认,但是以下是指定GOOGLE_APPLICATION_CREDENTIALS

的更简洁的方法
client = language.LanguageServiceClient.from_service_account_json("/path/to/file.json")

答案 4 :(得分:0)

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

    import os
    from google.oauth2 import service_account

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