authentication error in Cloud Datalab: "ImportError: No module named gce”
authentication error in Cloud Datalab: "ImportError: No module named gce”
我和其他人在各种不同的 GCP 项目中遇到过以下问题,并且在几天前相同代码工作的情况下。
我现在正在重新执行所有步骤,以确保我仍然看到相同的内容。我首先删除了我的 GCP 项目中 Cloud Datalab 的 运行ning 实例,然后我重新开始:首先部署 Datalab,然后 "start using" Datalab。
然后我 select 我有一个预先存在的笔记本,它以以下行开头:
!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
正在查看 here the specific versions required seem to be: httplib2>=0.8,<1; any oauth2client; six>=1.6.1,<2; and uritemplate>=0.6,<1. (The change to allow earlier oauth2client versions seems to have been committed on Mar 14, but Pypi shows the most recent version as 1.5.0 uploaded on Feb 20, which agrees with the Releases page 说 1.5.0 是在 2 月 19 日发布的,这可能是这个问题最初出现的时候,虽然我有几个星期没有注意到它。)
我无法进一步尝试 Anthonios 描述的 3 个选项,因为我在尝试使用 Datalab 时反复遇到 "Connection failed" 或其他错误。我会尽快尝试再次更新此问题。
您可以在 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
.
我们有 3 个选项:
- 等到 Datalab 将对
oauth2client
的支持升级到 >=2.0.0
- 安装支持
oauth2client
1.4.12 现有安装的先前版本 google-api-python-client
。例如,google-api-python-客户端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
我和其他人在各种不同的 GCP 项目中遇到过以下问题,并且在几天前相同代码工作的情况下。
我现在正在重新执行所有步骤,以确保我仍然看到相同的内容。我首先删除了我的 GCP 项目中 Cloud Datalab 的 运行ning 实例,然后我重新开始:首先部署 Datalab,然后 "start using" Datalab。
然后我 select 我有一个预先存在的笔记本,它以以下行开头:
!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
正在查看 here the specific versions required seem to be: httplib2>=0.8,<1; any oauth2client; six>=1.6.1,<2; and uritemplate>=0.6,<1. (The change to allow earlier oauth2client versions seems to have been committed on Mar 14, but Pypi shows the most recent version as 1.5.0 uploaded on Feb 20, which agrees with the Releases page 说 1.5.0 是在 2 月 19 日发布的,这可能是这个问题最初出现的时候,虽然我有几个星期没有注意到它。)
我无法进一步尝试 Anthonios 描述的 3 个选项,因为我在尝试使用 Datalab 时反复遇到 "Connection failed" 或其他错误。我会尽快尝试再次更新此问题。
您可以在 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
.
我们有 3 个选项:
- 等到 Datalab 将对
oauth2client
的支持升级到>=2.0.0
- 安装支持
oauth2client
1.4.12 现有安装的先前版本google-api-python-client
。例如,google-api-python-客户端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