AttributeError: moduł „importlib” nie ma atrybutu „util”

Sep 22 2020

Właśnie zaktualizowałem Fedorę 32 do Fedory 33 (która jest dostarczana z Pythonem 3.9). Od tego czasu gcloudpolecenie przestało działać:

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

Odpowiedzi

73 JanHernandez Sep 22 2020 at 13:53

Aktualizacja z obsługi GCP

Obsługa GCP wspomniała, że nowa wersja 318.0.0wydana na 2020.11.10powinna obsługiwać Python 3.9

Zaktualizowałem zestaw SDK gcloud do 318.0.0i teraz wygląda na to, że obsługiwany jest Python 3.9.0.

Aby rozwiązać ten problem, uruchom

gcloud components update

Fedora 33 zawiera język Python 2.7 i aby zmusić pakiet GCloud SDK do korzystania z niego, ustaw tę zmienną środowiskową

export CLOUDSDK_PYTHON=python2

Możesz dodać to polecenie eksportu do swojego pliku ~/.bash_profile

Python 3.9 jest bardzo nowy i oczekuje się, że Gcloud SDK nie obsługuje 3.9, jest napisany pod kątem zgodności z 2.7.xi 3.6 - 3.8 (3.8 może powodować pewne problemy ze zgodnością, polecam używać 3.7)

Aby obejść ten problem, skonfiguruj Pythona 3.8 lub 3.7 (ta wersja działa dobrze dla Gcloud i większości dystrybucji Linuksa) jako interpreter całego systemu i spróbuj użyć poleceń gcloud.

26 DrNic Nov 04 2020 at 21:18

W przypadku systemu macOS / Homebrew:

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

Zdarzyło mi się po ulepszeniu naparu. Działa z Pythonem 3.8.

Musisz dodać python3.8 do ścieżki powłoki. Wykonałem następujące linie i zadziałało

export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3

Dziękuję Ci!

6 III.6 Oct 28 2020 at 10:47

Jeśli nie chcesz używać Pythona 2, możesz używać Pythona 3.8 w Fedorze 33, dopóki SDK nie zacznie obsługiwać Pythona 3.9.

Zainstaluj Pythona 3.8 używając:

sudo dnf install python3.8

Możesz zweryfikować swoją instalację, uruchamiając:

python3.8 --version

Następnie ustaw go jako interpreter Google Cloud SDK:

export CLOUDSDK_PYTHON=python3.8

Po tym SDK powinien działać normalnie.

3 kurkop Dec 10 2020 at 23:39

Dla użytkowników Mac OS

Przede wszystkim powinieneś biec brew update.

Jeśli masz ten błąd:

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!

Uruchom następne polecenia:

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

Teraz,

Zaktualizuj Pythona 3.8 brew upgrade [email protected]

Dodaj Pythona 3.8 do PATH export PATH="/usr/local/opt/[email protected]/bin:$PATH"

Użyj Pythona 3.8 w Cloud SDK export CLOUDSDK_PYTHON=python3.8

Teraz możesz zaktualizować komponenty gcloud gcloud components update