1

我和其他人在各种不同的 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 时反复出现“连接失败”或其他错误。我将尽快再次尝试更新此问题。

4

1 回答 1

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

可以在此处找到所需的特定版本。

步骤 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.

我们有 3 个选项:

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

    !pip install google-api-python-client==1.5.0 --no-deps
    !pip install uritemplate

于 2016-03-22T01:39:00.000 回答