我和其他人在各种不同的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时的其他错误。我将尽快再次尝试更新此问题。
答案 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个选择:
>=2.0.0
到google-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), ...}