首页 > 解决方案 > GAE 迁移到 Python3 google auth 库导入问题

问题描述

我正在尝试将我的 Google App Engine Web 应用程序从 Python 2.7 迁移到 Python 3。我正在密切关注官方说明:https ://cloud.google.com/appengine/docs/standard/python/migrate-to-python3

我已经在 Cloud NDB 步骤上停留了一段时间,从这里开始执行以下步骤:https ://cloud.google.com/appengine/docs/standard/python/migrate-to-python3/migrate-to-cloud-ndb

我的应用程序正在使用 NDB 模型,因此,正如指南所建议的,我正在尝试在更新 python 版本之前将其更新到 Cloud NDB。这应该保持应用程序可测试并进行增量更改。

首先,我按照建议安装了 Cloud NDB 库,将它们放在 requirements.txt 文件中并运行

pip install --upgrade -t lib -r requirements.txt

我被警告说这些软件包的现有版本已经存在,所以我添加了升级标志。

然后我将 grpcio 添加到我的 app.yaml 文件中,并且我还按照指南中的建议修改了 appengine_config.py 文件。

现在下一步是替换要使用的导入语句 from google.cloud import ndb。无论我是否这样做,当我尝试运行我的应用程序时都会收到以下错误:

Traceback (most recent call last):
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 238, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 309, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 83, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/main.py", line 5, in <module>
    from routes.upload import *
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/routes/upload.py", line 5, in <module>
    from google.cloud import ndb
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/lib/google/cloud/ndb/__init__.py", line 28, in <module>
    from google.cloud.ndb.client import Client
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/lib/google/cloud/ndb/client.py", line 24, in <module>
    from google.cloud import _helpers
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/lib/google/cloud/_helpers.py", line 31, in <module>
    import google.auth
  File "/base/data/home/apps/e~specknet-pyramid-test/dts2.434714995801533235/lib/google/auth/__init__.py", line 19, in <module>
    from google.auth import version as google_auth_version
ImportError: cannot import name version

Traceback (most recent call last):
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 238, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 309, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/base/alloc/tmpfs/dynamic_runtimes/python27g/6138304582e07bba/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 83, in LoadObject
    obj = __import__(path[0])
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/main.py", line 5, in <module>
    from routes.upload import *
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/routes/upload.py", line 5, in <module>
    from google.cloud import ndb
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/cloud/ndb/__init__.py", line 28, in <module>
    from google.cloud.ndb.client import Client
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/cloud/ndb/client.py", line 24, in <module>
    from google.cloud import _helpers
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/cloud/_helpers.py", line 31, in <module>
    import google.auth
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/auth/__init__.py", line 20, in <module>
    from google.auth._default import default, load_credentials_from_file
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/auth/_default.py", line 30, in <module>
    import google.auth.transport._http_client
  File "/base/data/home/apps/e~specknet-pyramid-test/dts.434713705952965384/lib/google/auth/transport/__init__.py", line 41, in <module>
    @six.add_metaclass(abc.ABCMeta)
AttributeError: 'module' object has no attribute 'add_metaclass'

两者似乎都来自 google-auth 包。我还尝试创建一个新的虚拟环境,手动删除 lib 文件夹中的文件,重新安装一切新鲜的东西。我还尝试在 requirements.txt 文件中指定谷歌云包的版本,以匹配 2020 年 1 月的版本,当时应该进行迁移。没有任何效果,我遇到了同样的错误。

我在这里缺少一些非常简单的东西吗?任何帮助将不胜感激,非常感谢!

标签: pythongoogle-app-enginemigrationgoogle-auth-library

解决方案


推荐阅读