python2.7被weakref导入错误破坏了,请帮忙!

我刚刚从16.04升级到17.10,每次尝试运行任何python2.7命令时,都会出现以下错误:
pip install --upgrade pip
Traceback (most recent call last):
File "/home/XXXX/bin/pip", line 7, in <module>
    from pip import main
  File "/home/XXXX/local/lib/python2.7/site-packages/pip/__init__.py", 
line 5, in <module>
    import logging
  File "/usr/lib/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref, 
collections
  File "/home/XXXX/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

另一个用户遇到了类似的问题,但这影响到我尝试执行的任何Python程序。我无法通过pip安装任何东西,也无法使用任何Python脚本。我真的不知道该怎么办,非常需要帮助。
"python --version" 的输出是:
Python 2.7.12

然而,“更新Python”会产生以下结果:
python is already the newest version (2.7.14-2ubuntu1).

我从17.04升级到17.10,遇到了相同的ImportError: cannot import name _remove_dead_weakref错误。我的Python版本是2.7.14。 - Csaba Toth
在我的情况下,我正在使用虚拟环境,并且我怀疑这些虚拟环境中的Python版本与系统版本不同步,以至于出现了这个错误。我怀疑重新构建虚拟环境可能会解决我的问题,尽管安装所有软件包是一场斗争。 - Csaba Toth
4个回答

这不是一个Ubuntu的解决方案,但因为这个问题在搜索结果中排名靠前,我想说一下我在OSX上遇到了这个错误,因为我的默认系统Python版本是2.7,在安装另一个软件包时我使用brew安装了"python@2"。
如果你在OSX上使用homebrew,请通过运行"brew list"来检查已安装的软件包,如果"python@2"出现在列表中,并且Python 2.7是你的系统Python版本,你可以使用"brew remove python@2 --ignore-dependencies"命令来移除brew安装的软件包。

2这是在进行brew升级后发生的,许多软件包被替换为它们的package@version新版本...谢谢! - Hugo H
2这对我有帮助。在Mac上运行swift时,我遇到了上述错误。结果发现是因为它使用了brew中的python2。移除它解决了我的问题。 - jmurphyau
2谢谢这个。它帮助解决了我的lldb警告。 - Steven Hepting
谢谢你的提醒。我刚刚更新了我的符号链接在 /usr/local/bin/python,将其指向最新的 Homebrew python,而不是系统自带的 python。 - matt

在你使用虚拟环境的情况下,你需要重新创建它。另一种可能是你使用了一些基于源码或者侧面安装的 Python 版本,与系统版本产生了冲突。在这种情况下,你需要解决正确配置文件夹和路径,从不同的环境中查看。

在我的情况下,这是与虚拟环境相关的错误。因此,为我创建一个新的虚拟环境解决了问题。以下是可能对您有帮助的命令列表。
安装虚拟环境:
pip install virtualenv

创建一个新的虚拟环境:
virtualenv -p {env_name}

激活虚拟环境:
source env_name/bin/activate

停用您的虚拟环境:
deactivate

OP没有提到使用虚拟环境,所以你的回答没有解决当不使用虚拟环境时的问题。 - Michael M

假设你需要重新创建 virtualenv:
cd <virtualenv_folder>
virtualenv .