Le module 'json' de Python 3 est en fait corrompu

Oct 02 2020

Je pose cette question ici et non sur Stack Overflow car elle semble être spécifique à MacOS. Beaucoup de réponses là-bas pointent vers la recherche d'un mauvais module «json.py», mais nous pouvons voir de ce qui suit qu'aucun module aussi mauvais n'est importé.

Comment "réparer" l'installation de 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

Voici où il se trouve:

$ which python3
/usr/local/bin/python3

J'ai essayé un brew reinstall python3en vain.

Réponses

benwiggy Oct 02 2020 at 21:14

Je ne peux pas reproduire les erreurs sur deux Mac ici, l'un exécutant python 3.7.4 sur Mojave; et un en cours d'exécution 3.8.3 sur Big Sur. J'ai installé python directement à partir des packages sur 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

Les deux disent "Clang 6.0", si cela est pertinent.

Il se peut que votre installation soit corrompue et que vous deviez réinstaller python3. Si vous utilisez HomeBrew ou similaire, vous devrez peut-être les contacter pour obtenir de l'aide.

CharneyKaye Oct 02 2020 at 21:24

Eh bien, je suppose que je traiterai de "glib, graphviz et gts" plus tard, mais ce qui a fait le truc pour moi était de supprimer entièrement l'installation de brassage de Python 3:

brew uninstall --ignore-dependencies python3

Et maintenant, les choses sont revenues à la normale:

$ 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}'