如何让 App Engine 的本地开发服务器在 Python 3 中使用本地模拟的 Google Cloud Storage?

问题描述 投票:0回答:1

我已经从 Python 2.7 webapp2 迁移到 Python 3 Flask。

在访问 Google Cloud Storage 时,我目前一直在尝试让 Python 3 运行时模仿 Python 2 运行时行为。

旧的Python 2.7运行时自动使用本地Cloud Storage模拟器,但我只能将Python 3运行时保存到基于云的Google Cloud Storage。

这意味着在本地开发上运行的任何使用云存储对象的 blob 键(例如图像 API)的东西都会失败。

我尝试使用云存储进行自动身份验证,如下所示:

from google.cloud import storage
from google.auth.app_engine import Credentials
    
credentials = Credentials()
    
client = storage.Client(credentials=credentials)

那么对 Cloud Storage 的任何调用(例如 stat())都会超时。

为了让它正常工作,我下载了一个 JSON 凭证文件并使用它:

from google.cloud import storage
from google.auth.app_engine import Credentials

from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file('/file/path.json')

client = storage.Client(credentials=credentials)

我怀疑这是罪魁祸首(使用 JSON 文件凭据而不是自动身份验证),但不确定如何让自动身份验证在不超时的情况下工作。

有什么想法吗?

google-app-engine google-cloud-storage dev-appserver dev-appserver-2
1个回答
0
投票
  1. from google.cloud import storage
    表示您正在使用 Cloud Storage(通过 Python Cloud Storage 客户端库 调用它)。因此,它将连接到“生产”,即“云”,而不是您的本地计算机,除非您启动了模拟器(例如用于数据存储的Cloud Datastore Emulator)。但是,Cloud Storage 没有这样的模拟器(我认为有第 3 方,但没有来自 Google)。

    即使使用

    dev_appserver.py
    运行也无法解决你的问题,因为根据 Google 文档(Python 3Python 2

    App Engine 本地开发服务器不模拟 Cloud Storage,因此所有 Cloud Storage 请求都必须通过 Internet 发送到实际的 Cloud Storage 存储桶。

  2. 在Python 2中,您可能正在做类似

    import cloudstorage
    的事情,这似乎是专门为GAE设计的,并且它有一个模拟器(参见this)。云存储旨在适用于不同的应用程序,而不仅仅是 GAE

© www.soinside.com 2019 - 2024. All rights reserved.