Google cloud storage python client AttributeError: 'ClientOptions' object has no attribute 'scopes' occurs after deployment

Google cloud storage python client AttributeError: 'ClientOptions' object has no attribute 'scopes' occurs after deployment

我正在将云存储与 App Engine Flex 结合使用。部署成功后,我突然开始收到此错误消息

我的 Flask 应用程序中的这些行发生了错误。

from google.cloud import storage, datastore
client = storage.Client()
File "/home/vmagent/app/main.py", line 104, in _load_db
    client = storage.Client()
  File "/env/lib/python3.6/site-packages/google/cloud/storage/client.py", line 110, in __init__
    project=project, credentials=credentials, _http=_http
  File "/env/lib/python3.6/site-packages/google/cloud/client.py", line 250, in __init__
    Client.__init__(self, credentials=credentials, client_options=client_options, _http=_http)
  File "/env/lib/python3.6/site-packages/google/cloud/client.py", line 143, in __init__
    scopes = client_options.scopes or self.SCOPE
AttributeError: 'ClientOptions' object has no attribute 'scopes'

这与基于大量 SO 线程对 grpcio 和 google-api-core 和 google-cloud-storage 包进行的中断升级有关。但是,我不知道这是哪里发生的。

我的requirements.txt如下:

setuptools>=40.3
grpcio<=1.27.2
google-api-core<1.17.0
Flask

gevent>=0.13

gunicorn>=19.7.1
numpy>=1.18.0
numpy-financial
scipy>=1.4
pvlib>=0.7
google-cloud-storage==1.28.0
google-cloud-datastore==1.12.0
google-cloud-pubsub
pandas==1.0.5

我的app.yaml如下:

service: app-preprod
runtime: custom
env: flex
entrypoint: gunicorn -t 600 -c gunicorn.conf.py -b :$PORT main:app


runtime_config:
   python_version: 3.6
manual_scaling:
    instances: 1
resources:
    cpu: 1
    memory_gb: 4
beta_settings:
    cloud_sql_instances: xxxx:europe-west6:component-cost
   
endpoints_api_service:
  name: apipreprod-dot-xxxx.appspot.com
  rollout_strategy: managed

查看发布历史,几天前发布了 google-cloud-storage 等的一些新版本,但我试图保持相同的旧版本号。

荒谬的是,对于这些完全相同的 requirements.txt,我有一个完全相同的产品应用程序引擎,运行良好 --- 但我已经有一个星期没有重新部署了。 显然,从我的本地计算机到 运行 客户端的完全相同版本的存储和数据存储完全没有问题。

--编辑-- 显然根据

https://github.com/googleapis/google-cloud-python/issues/10471

我应该加上

google-cloud-core==1.3.0 至 requirements.txt 这似乎是一种解决方法 --- 是否有更好的永久性方法来确保这种中断不会让我措手不及?

这是由于 https://github.com/googleapis/google-cloud-python/issues/10471

我建议将 google-cloud-coregoogle-api-core 升级到包含错误修复的最新版本。

此错误消息表明您需要为 ClientOptions 对象设置属性“范围”。

我建议您查看 ClientOptions 的文档。 “scopes”属性应该是“OAuth access token override scopes”。您可以将其设置为 None。请检查您的那部分代码。

另一方面,请确保您已正确准备好环境以使用 Datastore client libraries