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'
คำตอบ
อัปเดตจากการสนับสนุน 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
สำหรับ macOS / Homebrew:
brew install [email protected]
export CLOUDSDK_PYTHON=python3.8
gcloud components update
เกิดขึ้นกับฉันหลังจากการอัพเกรดเบียร์ ทำงานร่วมกับ python 3.8
คุณต้องทำให้ python3.8 เป็นเชลล์พา ธ ฉันดำเนินการตามบรรทัดต่อไปนี้และมันใช้งานได้
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3
ขอขอบคุณ!
หากคุณไม่ต้องการใช้ 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 จะทำงานได้ตามปกติ
สำหรับผู้ใช้ 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