36
votes

AttributeError: le module 'importlib' n'a pas d'attribut 'util'

Je viens de passer de Fedora 32 à Fedora 33 (fourni avec Python 3.9). Depuis lors, la commande gcloud cessé de fonctionner:

[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'


0 commentaires

5 Réponses :


60
votes

Mise à jour depuis l'assistance GCP

Le support GCP a mentionné que la nouvelle version 318.0.0 publiée le 2020.11.10 devrait prendre en charge python 3.9

J'ai mis à jour mon sdk gcloud vers 318.0.0 et il semble maintenant que python 3.9.0 est pris en charge.

Pour résoudre ce problème, exécutez

gcloud components update

Fedora 33 inclut python 2.7 et pour forcer le SDK GCloud à l'utiliser, veuillez définir cette variable d'environnement

export CLOUDSDK_PYTHON=python2

Vous pouvez ajouter cette commande d'exportation à votre ~/.bash_profile

Python 3.9 est très nouveau et on s'attend à ce que le SDK Gcloud ne prenne pas en charge 3.9, il est écrit pour être compatible avec 2.7.x & 3.6 - 3.8 (3.8 peut causer des problèmes de compatibilité que je recommande d'utiliser 3.7)

Pour contourner le problème, configurez Python 3.8 ou 3.7 (cette version fonctionne bien pour Gcloud et la plupart des distributions Linux) en tant qu'interpréteur à l'échelle du système et essayez d'utiliser les commandes gcloud.


4 commentaires

Un peu bizarre quepython38 ne soit pas disponible pour Fedora 32 ou Fedora 33 . Maispython37 semble disponible pour les deux.


Python38 est également disponible sur fedora.


Ahhh, le python par défaut sur Fedora 32 est un lien vers python3 qui est actuellement python v 3.8 .


J'ai déposé un bug en amont: issuetracker.google.com/issues/172647331



6
votes

Si vous ne souhaitez pas utiliser Python 2, vous pouvez utiliser Python 3.8 sur Fedora 33 jusqu'à ce que le SDK commence à prendre en charge Python 3.9.

Installez python 3.8 en utilisant:

export CLOUDSDK_PYTHON=python3.8

Vous pouvez vérifier votre installation en exécutant:

python3.8 --version

Ensuite, définissez-le comme interpréteur du SDK Google Cloud:

sudo dnf install python3.8

Après cela, le SDK devrait fonctionner normalement.


1 commentaires

Python 3.8 a quelques problèmes avec le SDK Gcloud, veuillez utiliser 3.7 ou 2.7 ces versions sont plus compatibles avec le SDK Gcloud



-1
votes

gcloud passera à la version 318 le 10 novembre et résoudra ce problème.


1 commentaires

La désactivation de la génération de rapports n'a pas gcloud config set disable_usage_reporting true le problème pour moi: gcloud config set disable_usage_reporting true CLOUDSDK_PYTHON=python3.9 gcloud config config-helper --format=json AttributeError: module 'importlib' has no attribute 'util'



16
votes

Pour macOS / Homebrew:

brew install python@3.8
export CLOUDSDK_PYTHON=python3.8
gcloud components update


1 commentaires

J'ai également dû créer un lien symbolique vers python 3.8 dans /usr/local/bin : /usr/local/bin/python3.8 -> ../Cellar/python@3.8/3.8.6_2/bin/python3.8



7
votes

Cela m'est arrivé après une mise à niveau de bière. Fonctionne avec python 3.8.

Vous devez faire de python3.8 le chemin de votre shell. J'ai exécuté les lignes suivantes et cela a fonctionné

export PATH="/usr/local/opt/python@3.8/bin:$PATH"
alias python=/usr/local/opt/python@3.8/bin/python3

Merci!


1 commentaires

Merci, cela a fonctionné pour moi sur OSX alors que les réponses ci-dessus n'ont pas fonctionné.