AttributeError: модуль importlib не имеет атрибута util

Sep 22 2020

Я только что обновился с Fedora 32 до Fedora 33 (которая поставляется с Python 3.9). С тех пор gcloudперестала работать команда:

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

Ответы

73 JanHernandez Sep 22 2020 at 13:53

Обновление от службы поддержки GCP

Служба поддержки GCP упомянула, что новая версия, 318.0.0выпущенная на, 2020.11.10должна поддерживать python 3.9

Я обновил свой gcloud sdk до 318.0.0и теперь похоже, что поддерживается python 3.9.0.

Чтобы исправить эту проблему, запустите

gcloud components update

Fedora 33 включает python 2.7, и чтобы заставить GCloud SDK использовать его, установите эту переменную среды

export CLOUDSDK_PYTHON=python2

Вы можете добавить эту команду экспорта в свой ~/.bash_profile

Python 3.9 очень новый, и ожидается, что Gcloud SDK не поддерживает 3.9, он написан для совместимости с 2.7.x и 3.6 - 3.8 (3.8 может вызвать некоторые проблемы совместимости, я рекомендую использовать 3.7)

В качестве обходного пути настройте Python 3.8 или 3.7 (эти версии хорошо работают для Gcloud и большинства дистрибутивов Linux) в качестве общесистемного интерпретатора и попробуйте использовать команды gcloud.

26 DrNic Nov 04 2020 at 21:18

Для macOS / Homebrew:

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

Со мной случилось после апгрейда варева. Работает с python 3.8.

Вам нужно сделать python3.8 в пути к оболочке. Я выполнил следующие строки, и это сработало

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

Спасибо!

6 III.6 Oct 28 2020 at 10:47

Если вы не хотите использовать Python 2, вы можете использовать Python 3.8 в Fedora 33, пока SDK не начнет поддерживать Python 3.9.

Установите python 3.8, используя:

sudo dnf install python3.8

Вы можете проверить свою установку, запустив:

python3.8 --version

Затем установите его как интерпретатор Google Cloud SDK:

export CLOUDSDK_PYTHON=python3.8

После этого SDK должен нормально работать.

3 kurkop Dec 10 2020 at 23:39

Для пользователей Mac OS

Прежде всего вам следует бежать brew update.

Если у вас есть эта ошибка:

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!

Выполните следующие команды:

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

В настоящее время,

Обновите python 3.8 brew upgrade [email protected]

Добавить python 3.8 в PATH export PATH="/usr/local/opt/[email protected]/bin:$PATH"

Используйте python 3.8 в Cloud SDK export CLOUDSDK_PYTHON=python3.8

Теперь вы можете обновлять компоненты gcloud. gcloud components update