Ubuntu 16.04: программное обеспечение updater и зернышко прекратили работать

Сегодня я обновил библиотеку 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
3
задан 14 April 2018 в 03:29

1 ответ

Я нашел, что было похоже ответ, который решил мою проблему , но это скорее метод кувалды, который не помогает в долгосрочной перспективе. Удаление всего каталога, вероятно, не самый элегантный способ:

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 этого файла:
/ 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 решило проблему. Похоже, обновление перезаписало модификацию. Не было никакой проблемы снова ввести это и избавиться от неправильного поведения. [Тысяча сто двадцать семь]

1
ответ дан 1 December 2019 в 17:29

Другие вопросы по тегам:

Похожие вопросы: