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

时间:2018-01-11 13:19:30

标签: google-app-engine google-cloud-datastore google-cloud-storage

我在标准环境应用中使用谷歌云存储和谷歌云数据存储api(目前在本地)。

我有一个非常奇怪的行为试图运行我的测试(使用pytest):我发现,在测试期间,dev_appserver.fix_sys_path命令运行pytest-beds我正在使用({{3在我的自定义版本之前放置捆绑的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

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

pyasn1_modules包相同:版本0.2.1现有,发货0.11

我遇到的导入错误是:

from google.auth.crypt import base
ImportError: cannot import name base

from pyasn1_modules import pem
ImportError: cannot import name pem

最后但并非最不重要的是环境: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

更新:显然,我正在使用google.cloud.storage而我应该使用,根据标准环境(https://github.com/kaste/pytest-beds/blob/master/testbeds/plugin.py#L35)的示例,包cloudstorage。我将更改代码,尝试在此处更新帖子。

UPDATE 2 :我已经创建了一个特定的github仓库,应该复制问题,以防万一。这是:

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/appengine/standard/storage/appengine-client/main.py#L23

2 个答案:

答案 0 :(得分:0)

我们通常将libs添加到具有供应商系统的远程API。

from google.appengine.ext import vendor
vendor.add('lib')

在安装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'>

关于另一个无法导入from google.auth.crypt import base的问题,您需要gcloud auth login

gcloud auth application-default login恢复了默认的身份验证凭据,但是如果要以用户身份登录到应用程序,则必须gcloud auth login。希望这会有所帮助。

答案 1 :(得分:0)

如果在测试期间问题完全在本地主机上,则可以运行: pip安装密码学

这样Google图书馆甚至不需要pem。