【发布时间】:2018-01-11 13:19:30
【问题描述】:
我在标准环境应用程序中使用谷歌云存储和谷歌云数据存储 api(目前是本地)。
我在尝试运行我的测试(使用 pytest)时有一个非常奇怪的行为:我发现,在测试期间,我正在使用的 pytest-beds 运行的 dev_appserver.fix_sys_path 命令(https://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
这会导致 google.auth.crypt.base 模块导入失败,因为它确实不存在于 google-cloud-sdk 附带的软件包版本中,而我可以看到该版本 1.3.0 github,这显然与 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/GoogleCloudPlatform/python-docs-samples/blob/master/appengine/standard/storage/appengine-client/main.py#L23) 的示例,我应该使用包 cloudstorage。我将更改代码,尝试在此处更新帖子。
更新 2:我已经创建了一个特定的 github 存储库,它应该复制问题,以防万一。这里是:
【问题讨论】:
-
我不是 flex env 用户,所以我对此并不完全确定,但这种行为可能是因为
dev_appserver.py仅针对标准 env 设计,不支持 flex环境。尝试在不使用它的情况下运行测试。 -
好吧,因为我使用的是 appengine 机器,所以禁用插件(通过使用
--no-gae运行测试)不是一个选项。非常奇怪的行为:/ -
嗯,flex env 与“使用 appengine 机器”中的标准 env 非常不同,我什至敢说它实际上并没有使用它。一个 flex env 应用程序是一个独立的应用程序,一个标准的 env 应用程序只是一些由 GAE“机器”(无论是真实的还是
dev_server.py的)执行的 Python 代码。 -
好吧,对不起,我的错。我正在谈论的应用程序是标准环境应用程序(与运行良好的 flex 应用程序混淆)。我所描述的一切都发生在标准环境中(将更新帖子)。对不起
-
一段时间过去了,所以我在这里回复评论。 pytest-beds 的作者回复了我提交的 bug,这是他知道的。在这里找到它:github.com/kaste/pytest-beds/issues/4
标签: google-app-engine google-cloud-datastore google-cloud-storage