Нет модуля с именем «json» после установки simplejson

Я работаю в Ubuntu 14.04, и на моей машине установлено несколько версий Python (включая python2.7 и python3.4). Несколько дней назад я установил simplejson в свою систему. Я не помню, как я это сделал, но я думаю, что это должно быть похоже на pip install simplejson. Однако теперь при попытке установить любой пакет Python начала появляться странная проблема. Например, только что я попытался установить Tkinter с помощью sudo pip3.4 install Tkinter, и он выдает следующую ошибку:

Traceback (most recent call last):
  File "/usr/local/bin/pip3.4", line 9, in <module>
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip3.4')()
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 351, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2363, in load_entry_point
    return ep.load()
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2088, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 61, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/lib/python3/dist-packages/pip/vcs/subversion.py", line 4, in <module>
    from pip.index import Link
  File "/usr/lib/python3/dist-packages/pip/index.py", line 15, in <module>
    from pip.wheel import Wheel, wheel_ext
  File "/usr/lib/python3/dist-packages/pip/wheel.py", line 25, in <module>
    from distlib.scripts import ScriptMaker
  File "/usr/share/python-wheels/distlib-0.1.8-py2.py3-none-any.whl/distlib/scripts.py", line 15, in <module>
  File "/usr/share/python-wheels/distlib-0.1.8-py2.py3-none-any.whl/distlib/resources.py", line 20, in <module>
  File "/usr/share/python-wheels/distlib-0.1.8-py2.py3-none-any.whl/distlib/util.py", line 11, in <module>
ImportError: No module named 'json'

Иногда я могу исправить это, если ошибка говорит мне, что в одном из файлов, которые у меня есть:

import json

который я просто конвертирую в

import simplejson as json

Я попытался удалить simplejson:

sudo pip uninstall simplejson

но выдает ту же ошибку: json не найден.

Может ли кто-нибудь помочь мне исправить это, чтобы я с радостью смог установить пакеты Python? Заранее спасибо.


person Peaceful    schedule 13.05.2016    source источник
comment
Если вы установили через pip, почему вы пытаетесь удалить через apt-get?   -  person jonrsharpe    schedule 13.05.2016
comment
@jonrsharpe: Это мой недостаток знаний. Простите за это. Но когда я попытался удалить с помощью pip uninstall, он выдает ту же ошибку (json не найден).   -  person Peaceful    schedule 13.05.2016
comment
Вы смотрели, где должна быть установлена ​​ваша стандартная библиотека, чтобы проверить, существует ли еще папка json?   -  person Tadhg McDonald-Jensen    schedule 15.05.2016
comment
@ TadhgMcDonald-Jensen Нет, пока нет. Не могли бы вы рассказать мне, как я могу это сделать? Спасибо   -  person Peaceful    schedule 15.05.2016


Ответы (2)


Примечание. У меня нет однозначного ответа, но я предлагаю ряд шагов, которые вы можете попробовать:

Прежде всего посмотрите, можете ли вы импортировать json из обычного интерпретатора Python:

import json
print(json.__file__) #this would be important to know if it works

Если это сработает (а также прокомментирует, что такое json.__file__), вы можете попробовать использовать pip от переводчика.

Если вы не можете нормально импортировать json:

В этом нет ничего удивительного, я не ожидал, что pip будет искать модули в нестандартном месте. Вы захотите выяснить, где пакет json должен находиться на вашем компьютере, вы можете сделать это, импортировав другой модуль из стандартной библиотеки и посмотрев на его __file__:

>>> import fractions
>>> fractions.__file__
'/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/fractions.py'

Это, очевидно, будет другим для вас, но я ожидаю, что папка json будет в той же папке, что и fractions.py

если вы не можете импортировать fractions или queue или datetime и т. д.

Если вы не можете ничего импортировать из стандартной библиотеки, вы, вероятно, захотите просто переустановить python.

Если папка json есть и содержит __init__.py

Используйте функцию переименования вашего файлового браузера, чтобы убедиться, что в нем нет странных специальных символов, но в остальном я не уверен, если вы можете импортировать fractions.py, но не пакет из той же папки, это будет означать, что что-то очень не так с механика импорта вашей версии Python.

Если папки json нет с остальной стандартной библиотекой

Возможно, ваш дистрибутив Python имеет другую структуру, чем я ожидал, по крайней мере, не помешает взглянуть на нее.

Вы можете найти папку json среди различных файлов Python, используя команду find, не совсем уверен, как это работает, но просто еще одна вещь, которую нужно попробовать. Если вы найдете его с __init__.py, encode.py, decode.py, scanner.py и tool.py (по крайней мере, они есть в моей версии), вы, вероятно, захотите выяснить, как он туда попал, но, возможно, просто переместите его в ту же папку. как и остальная часть стандартной библиотеки.

Если вы не можете найти пакет json или нашли его, но он поврежден

Ну тогда надо будет заменить! Не волнуйтесь, это не так уж сложно, просто скачайте исходный код python с сайта и извлеките из него пакет json, после распаковки папка json должна оказаться в папке Lib. Просто скопируйте/переместите его в остальную часть стандартной библиотеки, и все готово!


Я надеюсь, что это поможет вам отладить происходящее. Это охватывает все сценарии, которые я мог себе представить, и мне было бы интересно узнать, какой из них устранил вашу проблему (или что вы смогли выяснить, чтобы я мог придумать больше вариантов)

person Tadhg McDonald-Jensen    schedule 16.05.2016
comment
У вас есть какие-либо идеи, почему я, например, не смогу импортировать json, Shutil, очередь или дроби, но все еще могу, например, импортировать дату и время? - person Zaccharie Ramzi; 10.12.2019
comment
@ZaccharieRamzi понятия не имею, но, скорее всего, ваша установка повреждена. например, если он был частично отменен при установке и получал пакеты в алфавитном порядке, это могло бы объяснить, почему существует дата и время. возможно, вам удастся просто скопировать всю стандартную библиотеку с GitHub, но я бы, вероятно, просто переустановил ее заново. - person Tadhg McDonald-Jensen; 10.12.2019
comment
Да, это то, что я сделал, ничего особенного, просто очень удивительно, я использовал его в течение довольно долгого времени, и он внезапно появился. - person Zaccharie Ramzi; 10.12.2019

Я предполагаю, что вы устанавливаете его либо с помощью pip install simplejson для загрузки из PyPI, либо с помощью apt-get install python-simplejson для загрузки из репозиториев Ubuntu.

Возможно, вы загрузили библиотеку для Python2, если вы использовали любую из приведенных выше команд, и она не будет доступна для Python3 (который будет использовать pip3.4). Можете ли вы попробовать эти команды и помочь в отладке?

$ python -c "import simplejson"

$ python3.4 -c "import simplejson"

Это скажет вам, какую версию python вы устанавливали simplejson в последний раз (моя догадка в python2). Если вторая команда выдает ошибку ImportError, попробуйте:

$ pip3.4 install simplejson

а затем установите свои библиотеки.

person maxking    schedule 15.05.2016
comment
Проблема, описанная здесь, заключается в том, что json не удалось импортировать, не только это, но и при загрузке pip, поэтому использование pip для установки simplejson определенно не решит проблему. - person Tadhg McDonald-Jensen; 16.05.2016