AttributeError: il modulo "importlib" non ha l'attributo "util"
Ho appena aggiornato da Fedora 32 a Fedora 33 (che viene fornito con Python 3.9). Da allora il gcloudcomando ha smesso di funzionare:
[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'
Risposte
Aggiornamento dall'assistenza GCP
Il supporto di GCP ha affermato che la nuova versione 318.0.0rilasciata 2020.11.10dovrebbe supportare python 3.9
Ho aggiornato il mio gcloud sdk a 318.0.0e ora sembra che Python 3.9.0 sia supportato.
Per risolvere questo problema, esegui
gcloud components update
Fedora 33 include python 2.7 e per forzare GCloud SDK a usarlo impostare questa variabile d'ambiente
export CLOUDSDK_PYTHON=python2
Puoi aggiungere questo comando di esportazione al tuo file ~/.bash_profile
Python 3.9 è molto nuovo e si prevede che Gcloud SDK non supporti 3.9, è scritto per essere compatibile con 2.7.x e 3.6 - 3.8 (3.8 può causare alcuni problemi di compatibilità, consiglio di usare 3.7)
Come soluzione alternativa, configura Python 3.8 o 3.7 (questa versione funziona bene per Gcloud e la maggior parte delle distribuzioni Linux) come interprete a livello di sistema e prova a utilizzare i comandi gcloud.
Per macOS / Homebrew:
brew install [email protected]
export CLOUDSDK_PYTHON=python3.8
gcloud components update
Mi è successo dopo un aggiornamento della birra. Funziona con Python 3.8.
È necessario creare python3.8 nel percorso della shell. Ho eseguito le seguenti righe e ha funzionato
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3
Grazie!
Se non vuoi usare Python 2, puoi usare Python 3.8 su Fedora 33 finché l'SDK non inizia a supportare Python 3.9.
Installa python 3.8 usando:
sudo dnf install python3.8
Puoi verificare la tua installazione eseguendo:
python3.8 --version
Quindi impostalo come interprete di Google Cloud SDK:
export CLOUDSDK_PYTHON=python3.8
Dopo questo, l'SDK dovrebbe funzionare normalmente.
Per utenti Mac OS
Prima di tutto dovresti correre brew update.
Se hai questo errore:
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!
Esegui i comandi successivi:
git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask" fetch --unshallow
Adesso,
Aggiorna python 3.8 brew upgrade [email protected]
Aggiungi python 3.8 a PATH export PATH="/usr/local/opt/[email protected]/bin:$PATH"
Usa python 3.8 in Cloud SDK export CLOUDSDK_PYTHON=python3.8
Ora puoi aggiornare i componenti di gcloud gcloud components update