我已经从 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 文件凭据而不是自动身份验证),但不确定如何让自动身份验证在不超时的情况下工作。
有什么想法吗?
from google.cloud import storage
表示您正在使用 Cloud Storage(通过 Python Cloud Storage 客户端库 调用它)。因此,它将连接到“生产”,即“云”,而不是您的本地计算机,除非您启动了模拟器(例如用于数据存储的Cloud Datastore Emulator)。但是,Cloud Storage 没有这样的模拟器(我认为有第 3 方,但没有来自 Google)。
即使使用
dev_appserver.py
运行也无法解决你的问题,因为根据 Google 文档(Python 3,Python 2)
App Engine 本地开发服务器不模拟 Cloud Storage,因此所有 Cloud Storage 请求都必须通过 Internet 发送到实际的 Cloud Storage 存储桶。
在Python 2中,您可能正在做类似
import cloudstorage
的事情,这似乎是专门为GAE设计的,并且它有一个模拟器(参见this)。云存储旨在适用于不同的应用程序,而不仅仅是 GAE