AttributeError: il modulo "importlib" non ha l'attributo "util"

Sep 22 2020

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

73 JanHernandez Sep 22 2020 at 13:53

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.

26 DrNic Nov 04 2020 at 21:18

Per macOS / Homebrew:

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

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!

6 III.6 Oct 28 2020 at 10:47

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.

3 kurkop Dec 10 2020 at 23:39

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