我和其他人在各种不同的 GCP 项目中遇到了以下问题,并且在几天前相同代码工作的情况下。
我现在再次完成所有步骤,只是为了确保我仍然看到相同的东西。我从删除 GCP 项目中正在运行的 Cloud Datalab 实例开始,然后重新开始:首先部署 Datalab,然后“开始使用”Datalab。
然后,我选择一个预先存在的笔记本,它以以下几行开头:
!pip install --upgrade google-api-python-client
from httplib2 import Http
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
http = Http()
credentials.authorize(http)
这在过去对我和其他人都有效。现在我得到了这个 ImportError:
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-deffc94100d1> in <module>()
1 from httplib2 import Http
2 from oauth2client.client import GoogleCredentials
----> 3 credentials = GoogleCredentials.get_application_default()
4 http = Http()
5 credentials.authorize(http)
/usr/local/lib/python2.7/dist-packages/oauth2client/client.pyc in get_application_default()
1202 GoogleCredentials.get_application_default().
1203
-> 1204 Args:
1205 access_token: string, access token.
1206 client_id: string, client identifier.
/usr/local/lib/python2.7/dist-packages/oauth2client/client.pyc in _get_implicit_credentials(cls)
1187 """
1188
-> 1189 NON_SERIALIZED_MEMBERS = (
1190 frozenset(['_private_key']) |
1191 OAuth2Credentials.NON_SERIALIZED_MEMBERS)
/usr/local/lib/python2.7/dist-packages/oauth2client/client.pyc in _implicit_credentials_from_gce()
1123
1124 def _in_gae_environment():
-> 1125 """Detects if the code is running in the App Engine environment.
1126
1127 Returns:
/usr/local/lib/python2.7/dist-packages/oauth2client/client.pyc in _get_application_default_credential_GCE()
1378 """Get the Application Default Credentials for the current environment.
1379
-> 1380 Raises:
1381 ApplicationDefaultCredentialsError: raised when the credentials
1382 fail to be retrieved.
ImportError: No module named gce
有什么改变吗?以前名为“gce”的模块是否已重命名?我需要创建凭据吗?(该项目有一个默认的 App Engine 服务帐户和一个默认的 Compute Engine 服务帐户,并且我认为可能需要启用的所有 API 都已启用。)
2016 年 4 月 20 日更新:大约一个月没有尝试重复此操作后,我昨天再次查看此内容。我第一次尝试重新运行我上个月使用的同一个笔记本时,我需要取出我因这个问题而添加的修复程序才能让它工作。但是今天同样的代码将再次不起作用。与此同时,我注意到建议已经更新,所以我现在将介绍推荐的方法。
!pip show google-api-python-client
---
Name: google-api-python-client
Version: 1.5.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: httplib2, uritemplate, six, oauth2client
在这里查看所需 的特定版本似乎是: httplib2>=0.8,<1; 任何oauth2client;六>=1.6.1,<2; 和 uritemplate>=0.6,<1。(允许早期 oauth2client 版本的更改似乎已在 3 月 14 日提交,但Pypi显示最新版本为 2 月 20 日上传的 1.5.0,这与发布页面一致,即 1.5.0 于 2 月 19 日发布,这可能是这个问题最初出现的时候,虽然我有几个星期没有注意到它。)
我无法进一步尝试 Anthonios 描述的 3 个选项,因为我在尝试使用 Datalab 时反复出现“连接失败”或其他错误。我将尽快再次尝试更新此问题。