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

Sep 22 2020

Je viens de passer de Fedora 32 à Fedora 33 (fourni avec Python 3.9). Depuis lors, la gcloudcommande a 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'

Réponses

73 JanHernandez Sep 22 2020 at 13:53

Mise à jour depuis l'assistance GCP

Le support GCP a indiqué que la nouvelle version 318.0.0publiée sur 2020.11.10devrait prendre en charge Python 3.9

J'ai mis à jour mon sdk gcloud 318.0.0et 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 Gcloud SDK 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é, 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.

26 DrNic Nov 04 2020 at 21:18

Pour macOS / Homebrew:

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

Cela m'est arrivé après une mise à niveau de la 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/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3

Je vous remercie!

6 III.6 Oct 28 2020 at 10:47

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:

sudo dnf install 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:

export CLOUDSDK_PYTHON=python3.8

Après cela, le SDK devrait fonctionner normalement.

3 kurkop Dec 10 2020 at 23:39

Pour les utilisateurs de Mac OS

Tout d'abord, vous devez courir brew update.

Si vous rencontrez cette erreur:

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!

Exécutez les commandes suivantes:

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

Maintenant,

Mettre à jour python 3.8 brew upgrade [email protected]

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

Utiliser python 3.8 dans le SDK Cloud export CLOUDSDK_PYTHON=python3.8

Maintenant, vous pouvez mettre à jour les composants gcloud gcloud components update