Estou tentando usar a ferramenta de linha de comando gsutil
para criar um intervalo e estou recebendo o seguinte erro: ImportError: cannot import name json_format
(rastreamento de pilha completo abaixo). Mesmo executando um simples gsutil --help
causa isso.
Não tive esse tipo de problema ao usar gsutil
e não consigo me lembrar de nenhuma alteração específica em meu ambiente que pudesse causar esse erro. Só me lembro de atualizar gcloud components
para 201.0.0 antes de ver esse erro. De qualquer forma, segui esta sugestão no Stack Overflow para reverter para gcloud components versão 175.0.0 executando gcloud components update --version 175.0.0
e este erro continua mesmo assim.
Quando poderemos usar gustil
na gcloud components
versão 201.0.0? Ou há alguma configuração que estou perdendo?
Traceback (most recent call last):
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 12, in <module>
import bootstrapping
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 19, in <module>
from googlecloudsdk.core.credentials import store as c_store
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/credentials/store.py", line 31, in <module>
from googlecloudsdk.core import http
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/http.py", line 32, in <module>
from googlecloudsdk.core.resource import session_capturer
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/session_capturer.py", line 34, in <module>
from googlecloudsdk.core.resource import yaml_printer
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/yaml_printer.py", line 21, in <module>
from googlecloudsdk.core.resource import resource_printer_base
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_printer_base.py", line 42, in <module>
from googlecloudsdk.core.resource import resource_projector
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_projector.py", line 40, in <module>
from google.protobuf import json_format as protobuf_encoding
ImportError: cannot import name json_format
Traceback (most recent call last):
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/bootstrapping/gsutil.py", line 12, in <module>
import bootstrapping
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/bootstrapping/bootstrapping.py", line 19, in <module>
from googlecloudsdk.core.credentials import store as c_store
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/credentials/store.py", line 31, in <module>
from googlecloudsdk.core import http
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/http.py", line 32, in <module>
from googlecloudsdk.core.resource import session_capturer
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/session_capturer.py", line 34, in <module>
from googlecloudsdk.core.resource import yaml_printer
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/yaml_printer.py", line 21, in <module>
from googlecloudsdk.core.resource import resource_printer_base
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_printer_base.py", line 42, in <module>
from googlecloudsdk.core.resource import resource_projector
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/core/resource/resource_projector.py", line 40, in <module>
from google.protobuf import json_format as protobuf_encoding
ImportError: cannot import name json_format
Obrigado e felicidades!
Parece que há várias versões atrás, a equipe do Cloud SDK adicionou o pacote google / protobuf [1] em seus scripts de inicialização (usados para iniciar o gsutil e outras ferramentas). Parece que se o seu sistema tiver outra / uma versão mais antiga desse pacote, ele pode ter precedência sobre a versão que gcloud includes com seu pacote, causando este erro de importação. Se você tiver esse módulo instalado na instalação do sistema Python, tente desinstalá-lo para que a versão do gcloud seja usada. Se você estiver no macOS e usando homebrew, executar brew unlink protobuf@[YOUR INSTALLED VERSION]
deve funcionar.
Semelhante ao que @gouglum disse acima, em uma VM bastante antiga meu sistema tinha o protobuf instalado em /usr/local/lib/python2.7/dist-pacakges
. A atualização do gcloud não atualizou este protobuf, então tive que recorrer à execução: sudo pip install protobuf --upgrade
que resolveu o problema.
Não tenho certeza se é porque eu estava atualizando de um gcloud (149) muito antigo ou se de alguma forma eu realmente tinha instalado o protobuf nos pacotes do sistema no início da vida da VM.
Isso interrompe efetivamente o gsutil no RHEL ou Centos7. Existe alguma outra solução para corrigir isso além de remover o pacote python-protobuf? Esse pacote é necessário em meus sistemas para outros propósitos; removê-lo não é uma opção.
Comentários muito úteis
Semelhante ao que @gouglum disse acima, em uma VM bastante antiga meu sistema tinha o protobuf instalado em
/usr/local/lib/python2.7/dist-pacakges
. A atualização do gcloud não atualizou este protobuf, então tive que recorrer à execução:sudo pip install protobuf --upgrade
que resolveu o problema.Não tenho certeza se é porque eu estava atualizando de um gcloud (149) muito antigo ou se de alguma forma eu realmente tinha instalado o protobuf nos pacotes do sistema no início da vida da VM.