从Python环境中移除GOOGLE_APPLICATION_CREDENTIALS并恢复Google SDK的默认位置
我正在尝试在本地运行Python和Jupyter脚本,并连接到谷歌云平台(GCP),特别是用于数据科学和大型语言模型的BigQuery和VertexAI。
最开始,我在设置这个连接时遇到了麻烦,所以我尝试创建一个服务账号密钥,并把我的GOOGLE_APPLICATION_CREDENTIALS设置为一个存储的json文件,以便连接。(我参考了这个文档:https://cloud.google.com/docs/authentication/provide-credentials-adc#how-to)但我一直没能成功。
现在,我已经成功使用谷歌云SDK的推荐连接方式,并且可以为我的项目进行身份验证。
也就是说,我可以运行以下命令,通过浏览器进行身份验证,并通过命令行访问项目的信息: gcloud auth application-default login 或者 gcloud auth application-default login --project=(项目名称)
但是,当我在Python中时,它仍然试图使用存储的json,而不是默认的连接路径。
以下代码运行失败:
from google.cloud import bigquery
import os
print(os.environ['GOOGLE_APPLICATION_CREDENTIALS'])
>> (old json path)
client = bigquery.Client()
>> DefaultCredentialsError: File (old json path) was not found
而以下代码可以正常工作:
from google.cloud import bigquery
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] ='C:/Users/(user)/AppData/Roaming/gcloud/application_default_credentials.json'
client = bigquery.Client(project=(project name))
但是当我重启内核时,os.environ['GOOGLE_APPLICATION_CREDENTIALS']又恢复到了旧的json路径。
在谷歌SDK中,我尝试像这样清除和重置GOOGLE_APPLICATION_CREDENTIALS:
GOOGLE_APPLICATION_CREDENTIALS=
(尝试将其设置为空,以便清除它)
还有
GOOGLE_APPLICATION_CREDENTIALS='C:/Users/(user)/AppData/Roaming/gcloud/application_default_credentials.json'
(尝试强制使用默认路径)
虽然这些在SDK中可以正常工作(我可以连接到GCP,看到我的所有项目等),但这些更改在Python环境中并没有反映出来。
作为额外信息,我可以使用临时解决方案,但我从一个代码库中拉取代码,每次运行前都需要编辑,然后在推送更改之前再删除这些修改。我还尝试重新创建我的虚拟环境,以防json路径存储在虚拟环境的某个地方。
我该如何让Python始终使用SDK的默认凭据,并去掉对存储json的引用呢?
(这是我的第一篇帖子,希望我表达得够清楚)
编辑补充:我还尝试在笔记本中使用谷歌的Python库(我对这个库不太了解)来运行:
import google.auth
credentials, project = google.auth.default()
但仍然出现相同的错误: DefaultCredentialsError: 文件(旧的json路径)未找到
我主要参考了这个文档: Google Cloud Client Libraries - API-Core
1 个回答
好的,我搞明白了,实际上比我想象的简单多了……
之前我把一个环境变量设置成了旧的json路径,这个路径里包含了服务账号的密钥。我以为当我更改它的时候,Google SDK会自动覆盖这个设置,但实际上并没有。
为了解决这个问题,我只需去控制面板的Windows环境变量管理器,把GOOGLE_APPLICATION_CREDENTIALS这个变量删掉就行了。
现在它就按照预期使用默认的凭证了。