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

Я только что обновился с 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'

person Guy Carmin    schedule 22.09.2020    source источник


Ответы (6)


Обновление от службы поддержки 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.

person Jan Hernandez    schedule 22.09.2020
comment
Немного странно, что python38 не доступен для Fedora 32 или Fedora 33. Но python37 кажется доступным для обоих. - person rickhg12hs; 24.09.2020
comment
Python38 теперь доступен и в Fedora. - person Frederik Baetens; 03.10.2020
comment
Аааа, по умолчанию python на Fedora 32 — это ссылка на python3, которая в настоящее время python v 3.8. - person rickhg12hs; 08.10.2020
comment
Я отправил сообщение об ошибке выше по течению: issuetracker.google.com/issues/172647331. - person tsuna; 07.11.2020
comment
Для Debian или других дистрибутивов с несколькими версиями Python: CLOUDSDK_PYTHON=python3.8 gcloud components update - person V13; 22.12.2020
comment
Вы также можете настроить CLOUDSDK_PYTHON как абсолютный путь к бинарному файлу Python. У меня установлен python с помощью homebrew, поэтому в OSX мне пришлось сделать: CLOUDSDK_PYTHON=/usr/local/opt/[email protected]/bin/python3 gcloud components update - person Michiel Bakker; 12.05.2021

Для macOS/Доморощенного:

brew install [email protected]
export CLOUDSDK_PYTHON=python3.8
ln -s /usr/local/Cellar/[email protected]/*/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
person Dr Nic    schedule 04.11.2020
comment
Мне также пришлось создать символическую ссылку на python 3.8 в /usr/local/bin : /usr/local/bin/python3.8 -> ../Cellar/[email protected]/3.8.6_2/bin/python3.8 - person Raphaël Lemaire; 26.11.2020
comment
У меня был только [email protected], поэтому мне пришлось установить 3.8, как указано выше, а затем связать его, как рекомендовал @Raphaël brew unlink [email protected], затем brew link [email protected] - person Peter W; 06.12.2020
comment
Лично я бы не хотел прекращать использовать [email protected] где-либо еще; Я бы хотел только заморозить до 3.8 для gcloud CLI. - person Dr Nic; 07.12.2020
comment
Спасибо @RaphaëlLemaire. Теперь я добавил строку в решение. - person Dr Nic; 18.12.2020
comment
Вы также можете просто сделать CLOUDSDK_PYTHON=python2 gcloud components update - person forresthopkinsa; 11.01.2021

Для пользователей 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

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

Обновить питон 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

person kurkop    schedule 10.12.2020
comment
Это сработало, хотя у меня был Python 3.9, мне пришлось запускать вышеуказанные команды с 3.8. - person ziggrat; 19.04.2021

У меня такое случилось после обновления варки. Работает с питоном 3.8.

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

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

Благодарю вас!

person Shishir    schedule 09.11.2020
comment
Спасибо, это сработало для меня на OSX, когда ответы выше не сработали. - person Richard; 21.11.2020

Если вы не хотите использовать 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 должен работать нормально.

person III.6    schedule 28.10.2020
comment
Python 3.8 имеет некоторые проблемы с Gcloud SDK, используйте версии 3.7 или 2.7, эти версии более совместимы с Gcloud SDK. - person Jan Hernandez; 29.10.2020

gcloud обновится до версии 318 10 ноября и устранит эту проблему.

person Steve    schedule 04.11.2020
comment
Отключение отчетов не помогло мне решить проблему: gcloud config set disable_usage_reporting true CLOUDSDK_PYTHON=python3.9 gcloud config config-helper --format=json AttributeError: module 'importlib' has no attribute 'util' - person tsuna; 07.11.2020