Modul Python 3 'json' sebenarnya rusak

Oct 02 2020

Saya menanyakan pertanyaan ini di sini dan bukan di Stack Overflow karena tampaknya khusus untuk MacOS. Banyak jawaban di sana mengarah untuk mencari modul "json.py" yang buruk namun kita dapat melihat dari berikut ini bahwa tidak ada modul buruk seperti itu yang sedang diimpor.

Bagaimana cara "memperbaiki" instalasi Python 3?

$ python3
Python 3.7.7 (default, Mar 10 2020, 15:43:33) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> import json
>>> d = {'a' : 100, 'b' : 200}
>>> json.dumps(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'json' has no attribute 'dumps'

>>> print(json.__file__)
None

Di sinilah lokasinya:

$ which python3
/usr/local/bin/python3

Saya sudah mencoba tetapi brew reinstall python3tidak berhasil.

Jawaban

benwiggy Oct 02 2020 at 21:14

Saya tidak dapat mereproduksi kesalahan pada dua Mac di sini, satu menjalankan python 3.7.4 di Mojave; dan satu menjalankan 3.8.3 di Big Sur. Saya menginstal python langsung dari paket di python.org.

>>> json.dumps(d)
'{"a": 100, "b": 200}'
>>> print(json.__file__)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py

Keduanya mengatakan "Clang 6.0", jika relevan.

Mungkin instalasi Anda rusak, dan Anda perlu menginstal ulang python3. Jika Anda menggunakan HomeBrew atau sejenisnya, Anda mungkin perlu menghubungi mereka untuk mendapatkan dukungan.

CharneyKaye Oct 02 2020 at 21:24

Saya kira saya akan berurusan dengan "glib, graphviz dan gts" nanti, tetapi apa triknya bagi saya adalah menghapus sepenuhnya instalasi buatan Python 3:

brew uninstall --ignore-dependencies python3

Dan sekarang semuanya kembali normal:

$ python3
Python 3.7.3 (default, Apr 24 2020, 18:51:23) 
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> d = {'a' : 100, 'b' : 200}
>>> json.dumps(d)
'{"a": 100, "b": 200}'