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 distros ส่วนใหญ่) เป็นตัวแปลข้อมูลทั้งระบบและพยายามใช้คำสั่ง 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