Ubuntu 16.04: Atualizador de software e pip parou de funcionar

1

Hoje atualizei a biblioteca Python matplotlib com o seguinte comando:

sudo pip3 install --upgrade matplotlib

Tudo parecia normal durante o processo de instalação. Mas desde então, tenho dois problemas. Uma é que pip não funciona mais. Cada comando pip evoca a mesma mensagem de erro:

    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

Além disso, o Atualizador de Software do Ubuntu parou de funcionar. Parece similar a este problema para este problema a solução não funcionará, porque, bem, pip não funciona. Mas eu acho que o problema do Atualizador de Software desaparecerá, quando o problema pip for resolvido.

Eu tentei até agora os seguintes comandos de threads com problemas semelhantes sem sucesso

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

E, obviamente, nenhum comando pip funcionará, por exemplo

sudo pip3 install --upgrade pip setuptools wheel
pip3 install --upgrade pip
pip3 install --upgrade setuptools
    
por Mr. T 24.02.2018 / 16:48

1 resposta

1

Eu encontrei, o que parecia ser uma resposta que resolveu o meu problema , mas é um método de marreta que não faz Ajudar a longo prazo. Excluir um diretório inteiro provavelmente não é a maneira mais elegante:

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

Depois pip não foi instalado, então eu reinstalei com

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

pip estava de volta e funcionando e o problema com o Atualizador de Software também estava resolvido como esperado. Essa "solução" funciona, embora remova muitas bibliotecas como matplotlib , que precisam ser reinstaladas posteriormente. Mas quando eu reinstalei o matplotlib 2.1.2, o mesmo erro pip foi induzido. Eu realmente não posso recomendar essa abordagem.

tl; dr: Não faça isso.

Então, de volta à estaca zero. O que resolveu o problema foi reinstalar pip e todas as bibliotecas a seguir com sudo -H , por exemplo,

sudo -H apt install --reinstall python3-pip

Sem o sinalizador -H , uma instalação de matplotlib evocou o mesmo problema pip . Mas ainda recebi a mensagem de erro. A solução parece ser esta modificação originando aqui :

I edited line #2121~2122 of this file:
/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]

Este pip / pip3 recuperado e eu conseguimos instalar módulos. Até agora, tudo está funcionando. Vamos torcer para que isso seja o último.

Editar: Uma semana depois, o problema não ressurgiu, então eu marquei isso como a resposta aceita.

Editar 2: A pip update reviveu o problema. Aparentemente, a atualização substituiu a modificação. Não foi problema reintroduzi-lo novamente e livrar-me do comportamento aberrante.

    
por Mr. T 24.02.2018 / 17:36