gsutil 不再有效?

Posted

技术标签:

【中文标题】gsutil 不再有效?【英文标题】:gsutil no longer works? 【发布时间】:2018-04-22 08:59:45 【问题描述】:

我使用 gcloud 和 gsutil 已经有一段时间了,但现在突然对于我运行的任何 gsutil 命令都会出错:

Traceback(最近一次调用最后一次):
  文件“/Users/julian/google-cloud-sdk/bin/bootstrapping/gsutil.py”,第 12 行,在
    导入引导
  文件“/Users/julian/google-cloud-sdk/bin/bootstrapping/bootstrapping.py”,第 22 行,在
    从 googlecloudsdk.core.credentials 导入存储为 c_store
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/credentials/store.py”,第 27 行,在
    从 googlecloudsdk.core 导入 http
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/http.py”,第 31 行,在
    从 googlecloudsdk.core.resource 导入 session_capturer
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/resource/session_capturer.py”,第 32 行,在
    从 googlecloudsdk.core.resource 导入 yaml_printer
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/resource/yaml_printer.py”,第 17 行,在
    从 googlecloudsdk.core.resource 导入 resource_printer_base
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_printer_base.py”,第 38 行,在
    从 googlecloudsdk.core.resource 导入 resource_projector
  文件“/Users/julian/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_projector.py”,第 34 行,在
    从 google.protobuf 导入 json_format 作为 protobuf_encoding
ImportError:无法导入名称 json_format

我尝试了 gcloud update 和 gcloud reinstall 但仍然遇到同样的问题。与python安装有冲突吗?还有其他想法吗?

【问题讨论】:

你用什么方法安装gcloud? 我按照cloud.google.com/storage/docs/gsutil_install的说明进行操作 gcloud components update 将我撞到180.0.1 之后,这也发生在我身上 【参考方案1】:

当您安装了 google protobuf 包时会出现此问题。

您可以通过运行使用旧版本来解决此问题

gcloud components update --version 175.0.0

或者通过删除 google protobuf 包来安装 python。

pip remove protobuf

如果您不想执行其中任何一项,他们可以安装单独版本的 2.7 python(不带 protobuf)并设置 CLOUDSDK_PYTHON=/path/to/python 环境变量。

Cloud sdk 的下一个版本也应该有这个修复。

【讨论】:

pip remove protobuf 不是一个可识别的命令。我假设您的意思是 pip uninstall protobuf 但这并没有没有解决问题。您恢复到版本 175.0.0 的第一个建议确实有效 - 我的版本是 179.0.0,所以我倒退了所以不理想,但至少现在是一种解决方法。 还可以确认版本175.0.0 修复了该问题。在恢复之前,我也在180.0.1 中看到了这个问题 刚刚尝试更新到 v 180.0.1 但遇到同样的问题。恢复到 175.0.0 可以解决此问题。 @cherba那么什么给了?当您说云的下一个版本应该解决这个问题时,您是什么意思?您对 Google 发生的事情有所了解吗?还是你只是在猜测?【参考方案2】:

您也可以通过更新到最新版本的 protobuf 来修复此错误。这样您就不必降级 gcloud。

pip install protobuf --upgrade

【讨论】:

这并没有解决我的问题。我仍然必须恢复到 175.0.0。 这最初对我不起作用。但是,我尝试编辑 google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_projector.py 以查看该文件中的内容,并发现只需进行微小的更改(例如添加新行)就足以使一切都恢复正常。我猜系统需要轻推才能使用新的 protobuf?【参考方案3】:

我有同样的问题。我正在使用Mac。 查看 /usr/local/lib/python2.7/site-packages 我发现了一个自制的 protobuf 链接。 我用“rm homebrew-protobuf.pth”删除了它 然后 gsutil 开始工作了。

【讨论】:

这对我有用!谢谢! :D mdfind -name homebrew-protobuf.pth 在这里为我找到了它:/usr/local/Cellar/protobuf@2.6/2.6.1/lib/python2.7/site-packages/homebrew-protobuf.pthbrew uninstall --force protobuf.... 之后【参考方案4】:

对于使用 Google Cloud SDK rpm 安装的 CentOS 7.5(可能更早),删除 protobuf-python 包 yum remove protobuf-python 将解决此问题。

【讨论】:

【参考方案5】:

我通过更新 protobuf 的自制软件安装在我的 Mac 上解决了这个问题:

$ brew upgrade protobuf
...
==> Upgrading 1 outdated package, with result:
protobuf 2.6.1 -> 3.6.0
...

请参阅 gsutil GitHub 存储库上的 this issue。

【讨论】:

以上是关于gsutil 不再有效?的主要内容,如果未能解决你的问题,请参考以下文章

管道 gsutil 输出到文件

优化文件夹子集的 gsutil 下载

ORA-00980: 同义词翻译不再有效 00980. 00000 - “同义词翻译不再有效”

使用 gsutil 从 CSV 下载所有行

python 子进程不能很好地与 gsutil 复制/移动命令一起使用

在 gtable 对象中设置宽度折叠图;这曾经有效,但现在不再有效。