AttributeError: módulo 'importlib' não tem atributo 'util'

Sep 22 2020

Acabei de atualizar do Fedora 32 para o Fedora 33 (que vem com o Python 3.9). Desde então, o gcloudcomando parou de funcionar:

[guy@Gandalf32 ~]$ gcloud 
Error processing line 3 of /home/guy/.local/lib/python3.9/site-packages/XStatic-1.0.2-py3.9-nspkg.pth:

  Traceback (most recent call last):
    File "/usr/lib64/python3.9/site.py", line 169, in addpackage
      exec(line)
    File "<string>", line 1, in <module>
    File "<frozen importlib._bootstrap>", line 562, in module_from_spec
  AttributeError: 'NoneType' object has no attribute 'loader'

Remainder of file ignored
Traceback (most recent call last):
  File "/usr/lib64/google-cloud-sdk/lib/gcloud.py", line 104, in <module>
    main()
  File "/usr/lib64/google-cloud-sdk/lib/gcloud.py", line 62, in main
    from googlecloudsdk.core.util import encoding
  File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/__init__.py", line 23, in <module>
    from googlecloudsdk.core.util import importing
  File "/usr/lib64/google-cloud-sdk/lib/googlecloudsdk/core/util/importing.py", line 23, in <module>
    import imp
  File "/usr/lib64/python3.9/imp.py", line 23, in <module>
    from importlib import util
  File "/usr/lib64/python3.9/importlib/util.py", line 2, in <module>
    from . import abc
  File "/usr/lib64/python3.9/importlib/abc.py", line 17, in <module>
    from typing import Protocol, runtime_checkable
  File "/usr/lib64/python3.9/typing.py", line 26, in <module>
    import re as stdlib_re  # Avoid confusion with the re we export.
  File "/usr/lib64/python3.9/re.py", line 124, in <module>
    import enum
  File "/usr/lib64/google-cloud-sdk/lib/third_party/enum/__init__.py", line 26, in <module>
    spec = importlib.util.find_spec('enum')
AttributeError: module 'importlib' has no attribute 'util'

Respostas

73 JanHernandez Sep 22 2020 at 13:53

Atualização do suporte do GCP

O suporte do GCP mencionou que a nova versão 318.0.0lançada em 2020.11.10deve ser compatível com o python 3.9

Atualizei meu gcloud sdk para 318.0.0e agora parece que o python 3.9.0 é compatível.

Para corrigir este problema, execute

gcloud components update

O Fedora 33 inclui python 2.7 e para forçar o GCloud SDK a usá-lo, defina esta variável de ambiente

export CLOUDSDK_PYTHON=python2

Você pode adicionar este comando de exportação ao seu ~/.bash_profile

Python 3.9 é muito novo e espera-se que o Gcloud SDK não suporte 3.9, ele foi escrito para ser compatível com 2.7.x e 3.6 - 3.8 (3.8 pode causar alguns problemas de compatibilidade, eu recomendo usar 3.7)

Como alternativa, configure o Python 3.8 ou 3.7 (esta versão funciona bem para Gcloud e a maioria das distros Linux) como interpretador de todo o sistema e tente usar os comandos gcloud.

26 DrNic Nov 04 2020 at 21:18

Para macOS / Homebrew:

brew install [email protected]
export CLOUDSDK_PYTHON=python3.8
gcloud components update
10 Shishir Nov 09 2020 at 10:47

Aconteceu comigo depois de um upgrade de cerveja. Funciona com o python 3.8.

Você precisa fazer python3.8 em seu caminho de shell. Eu executei as seguintes linhas e funcionou

export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3

Obrigado!

6 III.6 Oct 28 2020 at 10:47

Se você não quiser usar o Python 2, pode usar o Python 3.8 no Fedora 33 até que o SDK comece a oferecer suporte ao Python 3.9.

Instale o python 3.8 usando:

sudo dnf install python3.8

Você pode verificar sua instalação executando:

python3.8 --version

Em seguida, defina-o como o interpretador do Google Cloud SDK:

export CLOUDSDK_PYTHON=python3.8

Depois disso, o SDK deve funcionar normalmente.

3 kurkop Dec 10 2020 at 23:39

Para usuários de Mac OS

Em primeiro lugar, você deve correr brew update.

Se você tiver este erro:

Error: homebrew-core is a shallow clone. To `brew update` first run:
  git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core. We don't do this for you automatically to avoid
repeatedly performing an expensive unshallow operation in CI systems (which
should instead be fixed to not use shallow clones). Sorry for the inconvenience!

Execute os próximos comandos:

git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask" fetch --unshallow

Agora,

Atualizar python 3.8 brew upgrade [email protected]

Adicionar python 3.8 ao PATH export PATH="/usr/local/opt/[email protected]/bin:$PATH"

Use python 3.8 no Cloud SDK export CLOUDSDK_PYTHON=python3.8

Agora você pode atualizar os componentes do gcloud gcloud components update