1

我想测试一些与我今天在本地运行的 GCS 交互的代码。我的计划是:

  1. 在 GDrive 中保存服务帐户 JSON 文件
  2. 将其下载到 Colaboratory 的“本地”/tmp
  3. !export GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>
  4. storage_client = storage.Client('my-project') 并使用不同的方法/属性。

我安装了!pip install --upgrade google-cloud,但是在测试第 4 项(预计会出现身份验证错误)时,我收到一条消息重新依赖问题:

ContextualVersionConflictTraceback (most recent call last)
<ipython-input-13-7346ac058842> in <module>()
----> 1 from google.cloud import storage
  2 
  3 
  4 # Authenticate to GCS.
  5 from google.colab import auth

/usr/local/lib/python2.7/dist-packages/google/cloud/storage/__init__.py in <module>()
 33 
 34 from pkg_resources import get_distribution
---> 35 __version__ = get_distribution('google-cloud-storage').version
 36 
 37 from google.cloud.storage.batch import Batch

/usr/lib/python2.7/dist-packages/pkg_resources/__init__.pyc in get_distribution(dist)
554         dist = Requirement.parse(dist)
555     if isinstance(dist, Requirement):
--> 556         dist = get_provider(dist)
557     if not isinstance(dist, Distribution):
558         raise TypeError("Expected string, Requirement, or Distribution", dist)

/usr/lib/python2.7/dist-packages/pkg_resources/__init__.pyc in get_provider(moduleOrReq)
428     """Return an IResourceProvider for the named module or requirement"""
429     if isinstance(moduleOrReq, Requirement):
--> 430         return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
431     try:
432         module = sys.modules[moduleOrReq]

/usr/lib/python2.7/dist-packages/pkg_resources/__init__.pyc in require(self, *requirements)
970         included, even if they were already activated in this working set.
971         """
--> 972         needed = self.resolve(parse_requirements(requirements))
973 
974         for dist in needed:

/usr/lib/python2.7/dist-packages/pkg_resources/__init__.pyc in resolve(self, requirements, env, installer, replace_conflicting, extras)
861                 # Oops, the "best" so far conflicts with a dependency
862                 dependent_req = required_by[req]
--> 863                 raise VersionConflict(dist, req).with_context(dependent_req)
864 
865             # push the new requirements onto the stack

ContextualVersionConflict: (google-cloud-core 0.27.1 (/usr/local/lib/python2.7/dist-packages), Requirement.parse('google-cloud-core<0.29dev,>=0.28.0'), set(['google-cloud-storage']))

我没有在 Datalab 中尝试过,但 Colaboratory 更方便。

4

2 回答 2

4

所以这里有两个问题/问题:

  1. 我可以使用服务帐户凭据吗?我怀疑事情会奏效,但是您首先会被其他事情绊倒。

  2. 为什么我在导入时出现错误google.cloud.storagegoogle.cloud这里的问题如下:我们在启动时加载了一些库子集。然后您进行升级,并尝试加载新安装的库,这些库与已加载的库冲突。

    最快的解决方法是在安装后重新启动内核(ctrl-m .),此时一切都应该正常加载。

于 2017-12-07T17:28:10.963 回答
0

是否需要服务帐户?您可以使用GCS 的 I/O 示例笔记本中显示的配方直接在 Colab 中使用您的个人凭据。

Colab 虚拟机不共享,因此关于在项目中共享的 GCE 虚拟机上的用户凭据的典型警告不适用。

如果您需要将服务帐户与 GCS 存储 Python API 一起使用,请告诉我,我将编写一个示例。

于 2017-12-02T01:09:02.617 回答