Cloud Datalab中的身份验证错误:" ImportError:没有名为gce的模块“

时间:2016-03-21 22:22:20

标签: google-oauth google-cloud-datalab

我和其他人在各种不同的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

有什么变化吗?有一个以前命名的模块&#34; gce&#34;被重命名?我需要创建凭据吗? (该项目既有默认的App Engine服务帐户,也有默认的Compute Engine服务帐户,并且我认为可能需要启用的所有API都已启用。)

20-apr-2016更新:在没有尝试重复这个约一个月后,我昨天再次看到这个。我第一次尝试重新运行上个月使用的相同笔记本时,我需要 out 我为此问题添加的修补程序才能使其正常工作。但是今天相同的代码再次无效。在同一时间,我注意到建议已经更新,所以我现在将介绍推荐的方法。

!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

查看here所需的特定版本似乎是:httplib2&gt; = 0.8,&lt; 1; 任何 oauth2client; 6&GT = 1.6.1,&2;并且uritemplate&gt; = 0.6,&lt; 1。 (允许早期oauth2client版本的更改似乎已在3月14日提交,但Pypi显示最新版本为2月20日上传的1.5.0,这与Releases page表示同意1.5 .0于2月19日发布,这可能是这个问题最初出现的时候,虽然我几周没有注意到它。)

我无法进一步尝试Anthonios描述的3个选项,因为我反复得到&#34;连接失败&#34;或尝试使用Datalab时的其他错误。我将尽快再次尝试更新此问题。

1 个答案:

答案 0 :(得分:1)

您可以在Datalab中安装其他python库,但必须确保安装不会破坏正在运行的Datalab环境。确保这一点的最佳方法是检查附加python库所需的依赖关系当前是否安装在Datalab中。请按照以下步骤操作:

步骤1:确认您要安装的库需要哪些依赖项

使用!pip show <python library>

例如,使用以下命令查看google-api-python-client所需的依赖关系:

>>> !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

可以找到所需的特定版本here

步骤2:确定是否已在Datalab中安装任何依赖项

在Datalab中,运行以下代码并检查步骤1中的依赖关系

>>> import pip
>>> for dist in pip.get_installed_distributions():
>>>   print dist
GCPData 0.1.0
GCPDataLab 0.1.0
wheel 0.26.0
tensorflow 0.6.0
protobuf 3.0.0a3
nbformat 4.0.1
ipykernel 4.2.2
jsonschema 2.5.1
nose 1.3.7
singledispatch 3.4.0.3
pyparsing 2.0.7
pandas 0.17.1
futures 3.0.3
pyasn1-modules 0.0.8
mock 1.3.0
MarkupSafe 0.23
cycler 0.9.0
ipython 4.0.3
terminado 0.6
path.py 8.1.2
certifi 2015.11.20.1
Pygments 2.1
funcsigs 0.4
backports-abc 0.4
jupyter-client 4.1.1
pexpect 4.0.1
backports.ssl-match-hostname 3.5.0.1
statsmodels 0.6.1
seaborn 0.6.0
scikit-learn 0.16.1
rsa 3.3
jupyter-core 4.0.6
brewer2mpl 1.4.1
py-dateutil 2.2
patsy 0.4.1
ptyprocess 0.5
PyYAML 3.11
Jinja2 2.8
decorator 4.0.6
pandocfilters 1.2.4
pickleshare 0.6
sympy 0.7.6
pytz 2015.7
httplib2 0.9.2
functools32 3.2.3-2
notebook 4.0.2
tornado 4.3
simplegeneric 0.8.1
numpy 1.10.4
matplotlib 1.5.1
scipy 0.17.0
pyasn1 0.1.9
pbr 1.8.1
python-dateutil 2.4.2
traitlets 4.1.0
oauth2client 1.4.12
ipython-genutils 0.1.0
nbconvert 4.1.0
ggplot 0.6.5
mistune 0.7.1

根据此示例中的输出,一个冲突是Datalab当前安装了oauth2client个版本1.4.12,而google-api-python-client库需要oauth2client版本的2.0.0大于或等于oauth2client

我们有3个选择:

  • 等到Datalab升级支持>=2.0.0google-api-python-client
  • 安装支持oauth2client 1.4.12现有安装的google-api-python-client的先前版本。例如,google-api-python-client 1.4.2
  • 尝试安装最新的oauth2client,同时保持现有的google-api-python-client安装。这可以通过安装没有依赖项的!pip install google-api-python-client==1.5.0 --no-deps,然后手动安装Datalab中尚未安装的任何缺少的依赖项来实现。 (库有可能无法正常工作,但我们不太可能破坏工作的Datalab环境)。例如:

    !pip install uritemplate
    "abcd" -> {(0 < sizeof "abcd"? "abcd"[0] : 0), (1 < sizeof "abcd"? "abcd"[1] : 0), ...}