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
,之后必须重新安装。但当我重新安装matplotlib
2.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
更新使问题重现。似乎更新覆盖了修改。重新引入它并消除异常行为没有问题。