88 votes

AttributeError : le module 'importlib' ne possède pas d'attribut 'util'.

Je viens de passer de Fedora 32 à Fedora 33 (qui est livré avec Python 3.9). Depuis lors gcloud 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'

117voto

Jan Hernandez Points 3322

Mise à jour du support GCP

Mention du support GCP que la nouvelle version 318.0.0 publié le 2020.11.10 devrait supporter python 3.9

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

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

gcloud components update

Fedora 33 inclut python 2.7 et pour forcer le GCloud SDK à 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 récent et il est prévu que le SDK Gcloud ne supporte pas 3.9, il est écrit pour être compatible avec 2.7.x & 3.6 - 3.8 (3.8 peut causer quelques problèmes de compatibilité, je recommande d'utiliser 3.7).

Comme solution de contournement, configurez Python 3.8 ou 3.7 (ces versions fonctionnent bien pour Gcloud et la plupart des distros linux) comme interpréteur général du système et essayez d'utiliser les commandes gcloud.

98voto

Dr Nic Points 330

Pour macOS/Homebrew :

brew install python@3.8
export CLOUDSDK_PYTHON=python3.8
ln -s /usr/local/Cellar/python@3.8/*/bin/python3.8 /usr/local/bin/python3.8

gcloud components update

# the issue is now resolved and you can return to python 3.9
unset CLOUDSDK_PYTHON

3 votes

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

5 votes

J'avais seulement python@3.9 et j'ai donc dû installer 3.8 comme ci-dessus et ensuite le lier comme @Raphaël l'a recommandé. brew unlink python@3.9 puis brew link python@3.8

0 votes

Personnellement, je ne voudrais pas arrêter d'utiliser python@3.9 partout ailleurs ; je ne voudrais geler à la 3.8 que pour le CLI de gcloud.

19voto

kurkop Points 125

Pour les utilisateurs de Mac OS

Tout d'abord, vous devez exécuter brew update .

Si vous avez 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,

Mise à jour de python 3.8 brew upgrade python@3.8

Ajouter python 3.8 à PATH export PATH="/usr/local/opt/python@3.8/bin:$PATH"

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

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

0 votes

Cela a fonctionné, même si j'avais python 3.9, j'ai dû exécuter les commandes ci-dessus avec 3.8.

13voto

Shishir Points 221

Ça m'est arrivé après une mise à niveau de la brasserie. Fonctionne avec python 3.8.

Vous devez ajouter python3.8 à votre chemin 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 !

0 votes

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

6voto

III.6 Points 65

Si vous ne voulez pas utiliser Python 2, vous pouvez utiliser Python 3.8 sur Fedora 33 jusqu'à ce que le SDK commence à supporter Python 3.9.

Installer python 3.8 en utilisant :

sudo dnf install python3.8

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

python3.8 --version

Définissez-le ensuite comme l'interprète du SDK Google Cloud :

export CLOUDSDK_PYTHON=python3.8

Après cela, le SDK devrait fonctionner normalement.

0 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X