2015-11-05 83 views
1

我正在使用gcloud为Django编写自定义文件存储。如何覆盖gcloud中的GOOGLE_APPLICATION_CREDENTIALS for python

并且在寻找服务帐户JSON的gloud路径时遇到问题。 我尝试使用GOOGLE_APPLICATION_CREDENTIALS变量:

GOOGLE_APPLICATION_CREDENTIALS = os.path.join(BASE_DIR, 'google.json') 

但它没有任何效果。它总是在我的项目的上层文件夹中查找google.json(如果我把它放在那里,它工作正常)。我得到这个错误:

oauth2client.client.ApplicationDefaultCredentialsError: File ../DjangoProjects/folder/google.json (pointed by GOOGLE_APPLICATION_CREDENTIALS environment variable) does not exist! 

所以我的计划是在File ../DjangoProjects/folder/project_folder/google.json

所以,我该怎么处理呢?

回答

2

GOOGLE_APPLICATION_CREDENTIALS应该具有指向文件的环境变量的名称;它本身不应该有文件路径。此变量的默认值只是“GOOGLE_APPLICATION_CREDENTIALS”。如果您将名称为GOOGLE_APPLICATION_CREDENTIALS的环境变量设置为您要使用的文件路径,它应该适用于您。

+0

你想说什么,因为它看起来像一个没有意义的 – akostadinov

+2

他的意思是说GOOGLE_APPLICATION_CREDENTIALS是一个环境变量,而不是Python变量。试试os.environ ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.join(BASE_DIR,'google.json')。 – Adam

3

这只是为了澄清加勒特琼斯的答案。这里可能会出现一些微妙的混淆:

在给出的代码示例中,GOOGLE_APPLICATION_CREDENTIALS是一个python变量名。它应该是指向该文件中的环境变量的

GOOGLE_APPLICATION_CREDENTIALS = "GOOGLE_APPLICATION_CREDENTIALS" 

在这个例子中,我们假设有一个名为“GOOGLE_APPLICATION_CREDENTIALS”,其价值是一个文件中的环境变量路径(类似于“/home/anon/workspace/myProject/google_creds.json”)

可以在环境中使用特定于操作系统的方法或使用python本身来设置环境变量,它可以在程序运行时修改环境(这是Adam对Garrett的回答的评论正在演示,使用os.environ)。