我在一个Google云存储桶中有一个文件夹结构
bucket_name = 'logs'
json_location = '/logs/files/2018/file.json'
我尝试使用此代码在json
中读取此jupyter notebook
文件
from google.cloud import storage
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "logs/files/2018/file.json"
def download_blob(source_blob_name, bucket_name, destination_file_name):
"""Downloads a blob from the bucket."""
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(source_blob_name)
blob.download_to_filename(destination_file_name)
print('Blob {} downloaded to {}.'.format(
source_blob_name,
destination_file_name))
然后调用函数
download_blob('file.json', 'logs', 'file.json')
我收到此错误
DefaultCredentialsError: File /logs/files/2018/file.json was not found.
我已经查看了所有关于stackoverflow的类似问题,但找不到解决方案。
存在json
文件,可以在Google云存储上的json_location中打开或下载该文件。
答案 0 :(得分:1)
GOOGLE_APPLICATION_CREDENTIALS
应该指向运行jupyter的本地磁盘上的文件。您需要凭据才能调用GCS,因此无法从GCS中获取它们。
实际上,最好不要在程序中完全弄乱凭据,而要保留客户端库。不要在我们的应用程序中触摸GOOGLE_APPLICATION_CREDENTIALS
。相反:
gcloud auth application-default login
。然后,您的程序将自动使用您登录时使用的任何帐户。完整说明here
答案 1 :(得分:1)
关于您引用的json文件有两种不同的观点:
1)用于向GCP进行身份验证的json文件。
2)您要从存储桶下载到本地计算机的json。
对于第一个,如果您要远程访问Jupyter服务器,则很可能json不在此类远程计算机中,而是在您的本地计算机中。如果您的情况是这样,请尝试将json上传到Jupyter服务器。在远程计算机上执行ls -l /logs/files/2018/file.json
可能有助于验证其正确性。然后,os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "JSON_PATH_ON_JUPYTER_SERVER"
应该可以工作。
另一方面,我执行了您的代码并得到:
>>> download_blob('static/upload_files_CS.png', 'bucketrsantiago', 'file2.json')
Blob static/upload_files_CS.png downloaded to file2.json.
文件gs://bucketrsantiago/static/upload_files_CS.png已下载到我的本地计算机,文件名为file2.json。这有助于弄清唯一的问题与身份验证json文件有关。