Ubuntu 16.04:软件更新程序和 pip 停止工作

Ubuntu 16.04:软件更新程序和 pip 停止工作

matplotlib今天我使用以下命令升级了 Python 库:

sudo pip3 install --upgrade matplotlib

安装过程中一切看起来都很正常。但从那时起,我遇到了两个问题。一个是它pip不再起作用。每个pip命令都会引发相同的错误消息:

    Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 7, in <module>
    from pip import main
  File "/usr/local/lib/python3.5/dist-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/usr/local/lib/python3.5/dist-packages/pip/utils/__init__.py", line 27, in <module>
    from pip._vendor import pkg_resources
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 3018, in <module>
    @_call_aside
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 3004, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 3046, in _initialize_master_working_set
    dist.activate(replace=False)
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2578, in activate
    declare_namespace(pkg)
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2152, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2092, in _handle_ns
    _rebuild_mod_path(path, packageName, module)
  File "/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path
    orig_path.sort(key=position_in_sys_path)
AttributeError: '_NamespacePath' object has no attribute 'sort

此外,Ubuntu 的软件更新程序停止工作。它看起来类似这个问题,只有解决方案不起作用,因为,嗯,pip不起作用。但我想,当pip问题解决后,软件更新程序问题就会消失。

到目前为止,我已经尝试过来自类似问题的线程的以下命令,但无济于事

sudo apt-get update
sudo apt-get upgrade
sudo apt-get -f install
sudo apt-get install --reinstall aptdaemon
sudo rm -rvf /var/lib/apt/lists/*
sudo apt install --reinstall python3-pip

显然没有pip命令可以工作,例如

sudo pip3 install --upgrade pip setuptools wheel
pip3 install --upgrade pip
pip3 install --upgrade setuptools

答案1

我发现,解决了我的问题的答案,但从长远来看,这是一种毫无用处的强硬方法。删除整个目录可能不是最优雅的方法:

sudo rm -rf /usr/local/lib/python3.5/dist-packages

后来 pip 没有安装,所以我用

sudo apt-get update
sudo apt-get install python3-pip 

pip恢复正常,软件更新程序的问题也如预期般得到解决。此“解决方案”有效,尽管它删除了许多库,例如matplotlib,之后必须重新安装。但当我重新安装matplotlib2.1.2 时,出现了同样的pip错误。我真的不推荐这种方法。

tl; dr:不要这样做。

所以又回到原点。解决问题的方法是重新安装pip和每个后续库sudo -H,例如

sudo -H apt install --reinstall python3-pip

如果没有该-H标志,安装会matplotlib引起同样的pip问题。但我仍然收到错误消息。解决方案似乎是此修改起源这里

我编辑了此文件的第 2121~2122 行:
/usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/ __init__.py

#orig_path.sort(key=position_in_sys_path)
#module.__path__[:] = [_normalize_cached(p) for p in orig_path]
orig_path_t = list(orig_path)
orig_path_t.sort(key=position_in_sys_path)
module.__path__[:] = [_normalize_cached(p) for p in orig_path_t]

这恢复了 pip/pip3,我能够安装模块了。到目前为止,一切正常。希望这将是最后一次。

编辑:一周后,问题没有再次出现,因此我将其标记为已接受的答案。

编辑 2:pip更新使问题重现。似乎更新覆盖了修改。重新引入它并消除异常行为没有问题。

相关内容