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'
5 Réponses :
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.
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
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.
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
gcloud passera à la version 318 le 10 novembre et résoudra ce problème.
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'
Pour macOS / Homebrew:
brew install python@3.8 export CLOUDSDK_PYTHON=python3.8 gcloud components update
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
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!
Merci, cela a fonctionné pour moi sur OSX alors que les réponses ci-dessus n'ont pas fonctionné.