AttributeError: módulo 'importlib' não tem atributo 'util'
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
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.
Para macOS / Homebrew:
brew install [email protected]
export CLOUDSDK_PYTHON=python3.8
gcloud components update
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!
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.
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