Google Cloud SDK中对google-auth的依赖关系错误吗?

Bru*_*ipa 7 google-app-engine google-cloud-storage google-cloud-datastore

我在标准环境应用程序中使用google cloud storage和google cloud datastore api(本地,现在)。

我在尝试运行我的测试(使用pytest)时有一种很奇怪的行为:我发现,在测试期间,我正在使用的dev_appserver.fix_sys_path命令运行pytest-bedshttps://github.com/kaste/pytest-beds/blob/ master / testbeds / plugin.py#L35)将捆绑的google-cloud库放在我的自定义版本之前:

/Users/username/google-cloud-sdk/platform/google_appengine
/Users/username/google-cloud-sdk/platform/google_appengine/lib/antlr3
/Users/username/google-cloud-sdk/platform/google_appengine/lib/fancy_urllib
/Users/username/google-cloud-sdk/platform/google_appengine/lib/ipaddr
/Users/username/google-cloud-sdk/platform/google_appengine/lib/yaml-3.10
/Users/username/google-cloud-sdk/platform/google_appengine/lib/rsa
/Users/username/google-cloud-sdk/platform/google_appengine/lib/pyasn1
/Users/username/google-cloud-sdk/platform/google_appengine/lib/pyasn1_modules
/Users/username/google-cloud-sdk/platform/google_appengine/lib/httplib2
/Users/username/google-cloud-sdk/platform/google_appengine/lib/oauth2client_devserver
/Users/username/google-cloud-sdk/platform/google_appengine/lib/six-1.9.0
/Users/username/google-cloud-sdk/platform/google_appengine
/Users/username/google-cloud-sdk/platform/google_appengine/lib/simplejson
/Users/username/google-cloud-sdk/platform/google_appengine/lib/django-1.4
/Users/username/google-cloud-sdk/platform/google_appengine/lib/endpoints-1.0
/Users/username/google-cloud-sdk/platform/google_appengine/lib/jinja2-2.6
/Users/username/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0
/Users/username/google-cloud-sdk/platform/google_appengine/lib/PyAMF-0.6.1
/Users/username/google-cloud-sdk/platform/google_appengine/lib/markupsafe-0.15
/Users/username/google-cloud-sdk/platform/google_appengine/lib/webob-1.2.3
/Users/username/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2
/Users/username/dev/project
/Users/username/.virtualenvs/project/bin
/Users/username/dev/project/app
/Users/username/.virtualenvs/project/lib/python27.zip
/Users/username/.virtualenvs/project/lib/python2.7
/Users/username/.virtualenvs/project/lib/python2.7/plat-darwin
/Users/username/.virtualenvs/project/lib/python2.7/plat-mac
/Users/username/.virtualenvs/project/lib/python2.7/plat-mac/lib-scriptpackages
/Users/username/.virtualenvs/project/Extras/lib/python
/Users/username/.virtualenvs/project/lib/python2.7/lib-tk
/Users/username/.virtualenvs/project/lib/python2.7/lib-old
/Users/username/.virtualenvs/project/lib/python2.7/lib-dynload
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Users/username/.virtualenvs/project/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

这会导致google.auth.crypt.base模块导入失败,因为google-cloud-sdk随附的软件包版本中存在该模块,而我可以在github上看到该版本1.3.0,显然与该版本相同。 SDK,做。

pyasn1_modules封装相同:版本0.2.1已存在,出厂时为0.11

我遇到的导入错误是:

from google.auth.crypt import base
ImportError: cannot import name base
Run Code Online (Sandbox Code Playgroud)

和:

from pyasn1_modules import pem
ImportError: cannot import name pem
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的环境:MACOSX。

Google Cloud SDK 184.0.0
app-engine-python 1.9.65
app-engine-python-extras 1.9.63
beta 2017.09.15
bq 2.0.28
cloud-datastore-emulator 1.3.0
core 2018.01.05
gcloud
gsutil 4.28
Run Code Online (Sandbox Code Playgroud)

更新:显然,google.cloud.storage根据标准环境的示例(https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/appengine/standard/storage/appengine -client / main.py#L23),打包cloudstorage。我将更改代码,尝试在此处更新帖子。

更新2:我创建了一个特定的github存储库,以防万一,它应该复制该问题。这里是:

https://github.com/brunoripa/gae_import_error

小智 -1

我们通常libs使用供应商系统添加到远程 API。

from google.appengine.ext import vendor
vendor.add('lib')
Run Code Online (Sandbox Code Playgroud)

当您安装时,模块pyasn1_modules会作为依赖项安装google-cloud,我不确定其背后的原因,但在远程 API 中,我观察到它丢失了pem.py. 简单的解决方法是:

# within remote API console

>>> import sys
>>> sys.modules.pop('pyasn1_modules')

<module 'pyasn1_modules' from '/Users/pjamkhande001/google-cloud-sdk/platform/google_appengine/lib/pyasn1_modules/pyasn1_modules/__init__.pyc'>
Run Code Online (Sandbox Code Playgroud)

关于您无法导入的其他问题from google.auth.crypt import base,您需要这样做gcloud auth login

gcloud auth application-default login恢复您的默认身份验证凭据,但如果您想以用户身份登录应用程序,则必须这样做gcloud auth login。希望这可以帮助。