Сегодня я обновил библиотеку Python matplotlib
со следующей командой:
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 Updater прекратило работать. Это выглядит подобным этой проблеме, только решение не будет работать, потому что, ну, в общем, pip
не работает. Но я предполагаю, программное обеспечение проблема Updater исчезнет, когда 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
Я нашел, что было похоже ответ, который решил мою проблему , но это скорее метод кувалды, который не помогает в долгосрочной перспективе. Удаление всего каталога, вероятно, не самый элегантный способ:
sudo rm -rf /usr/local/lib/python3.5/dist-packages
Впоследствии pip не был установлен, поэтому я переустановил его с помощью
sudo apt-get update
sudo apt-get install python3-pip
pip
, вернувшись и работая, и проблема с Software Updater, как и ожидалось, также была решена. Это «решение» работает, хотя оно удаляет многие библиотеки, такие как matplotlib
, которые впоследствии должны быть переустановлены. Но когда я переустановил matplotlib
2.1.2, возникла та же самая ошибка pip
. Я действительно не могу рекомендовать этот подход.
тл; Доктор: Не делай этого.
Итак, вернемся к исходной точке. Проблема была решена путем переустановки pip
и каждой следующей библиотеки с sudo -H
, например
sudo -H apt install --reinstall python3-pip
Без флага -H
установка matplotlib
вызывала ту же проблему pip
. Но все же я получил сообщение об ошибке. Решение, по-видимому, заключается в этой модификации , происходящей здесь здесь :
Я отредактировал строку # 2121 ~ 2122 этого файла:
blockquote>
/ 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
решило проблему. Похоже, обновление перезаписало модификацию. Не было никакой проблемы снова ввести это и избавиться от неправильного поведения. [Тысяча сто двадцать семь]