安装simplejson后出现“没有名为'json'的模块”错误

5
我正在使用Ubuntu 14.04,在我的计算机上安装了多个Python版本(包括python2.7和python3.4)。几天前,我在系统上安装了simplejson。我不记得我是怎么做的,但我想它肯定类似于pip install simplejson。然而,现在当我尝试安装任何Python包时,就开始出现奇怪的问题。例如,刚才我尝试使用sudo pip3.4 install Tkinter安装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包吗?提前感谢您的帮助。

2
如果你是通过 pip 安装的,为什么要尝试通过 apt-get 卸载呢? - jonrsharpe
@jonrsharpe:那是我的知識不足,對此感到抱歉。但當我嘗試使用pip uninstall卸載時,它會顯示相同的錯誤(找不到json)。 - Peaceful
你是否查看了标准库应该安装在哪里,以检查文件夹 json 是否仍然存在? - Tadhg McDonald-Jensen
@TadhgMcDonald-Jensen:到目前为止我还没有。你能告诉我如何做吗?谢谢。 - Peaceful
2个回答

6
注意:我没有确定的答案,但会提供一系列您可以尝试的步骤:
首先,请尝试从通常的Python解释器中导入JSON。
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'

这显然对你来说会有所不同,但我希望在与fractions.py相同的文件夹中有一个json文件夹。
如果您无法导入fractions或queue或datetime等内容。
如果您无法从标准库中导入任何内容,则可能只需重新安装python即可。
如果json文件夹存在并包含__init__.py。
使用文件浏览器的重命名功能确保没有奇怪的特殊字符,但除此之外我不确定,如果您可以导入fractions.py但无法从同一文件夹导入软件包,则意味着您的python版本的导入机制出了问题。
如果json文件夹不在标准库的其他文件夹中。
您的python发行版可能具有与我预期不同的结构,至少可以查看它是否存在。
你可以使用find命令在各个Python文件中搜索json文件夹,不确定它的工作原理,但这是另一个尝试的方法。如果你在__init__.pyencode.pydecode.pyscanner.pytool.py(至少这些是我版本中的文件)中找到了它,你可能想弄清楚它是如何出现在那里的,但也许只需将其移动到与标准库其他部分相同的文件夹中。

如果你找不到json包或者找到了它而且它已经损坏了

那么你需要替换它!别担心,这并不难,只需从网站上下载Python的源代码发布版并从中提取json包,一旦解压缩,json文件夹应该在Lib文件夹中。只需将其复制/移动到标准库的其他部分,你就可以开始使用了!


我希望这可以帮助你调试出发生了什么,这涵盖了我能想象到的所有场景,我很感兴趣知道哪一个修复了你的问题(或者你能够找出什么,这样我就可以提供更多选项)。

你有没有想过为什么我不能导入json、shutil、queue或fractions,但是还能导入datetime呢? - Zaccharie Ramzi
@ZaccharieRamzi 没有头绪,但很可能是你的安装已经损坏了。比如说,如果在安装过程中取消了一部分,并且按字母顺序获取软件包,那么datetime就会出现在那里。你也许可以从GitHub上复制整个标准库,但我建议重新安装。 - Tadhg McDonald-Jensen
是的,那就是我所做的,没什么大不了的,只是非常令人惊讶,我已经使用它相当长一段时间了,突然出现了这种情况。 - Zaccharie Ramzi

-1

我猜你可以使用pip install simplejsonPyPI下载,或者使用apt-get install python-simplejson从Ubuntu存储库中下载。

如果你使用上述任何命令下载了Python2的库,则可能无法在Python3中使用(pip3.4将使用它)。 你能否尝试这些命令并帮助自己进行调试?

$ python -c "import simplejson"

$ python3.4 -c "import simplejson"

这将告诉你上次安装simplejson时使用的Python版本(我猜测是Python2)。 如果第二个命令出现ImportError错误,请尝试:

$ pip3.4 install simplejson

然后再安装你的库。


这里描述的问题是json无法导入,不仅如此,当加载pip时,使用pip安装simplejson肯定也无法解决问题。 - Tadhg McDonald-Jensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接