web-dev-qa-db-ja.com

Ubuntu 16.04:ソフトウェアアップデーターとpipが機能しなくなった

今日、次のコマンドでPythonライブラリmatplotlibをアップグレードしました。

Sudo pip3 install --upgrade matplotlib

インストールプロセス中、すべてが正常に見えました。しかし、それ以来、2つの問題が発生します。 1つは、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の問題が解決されると、Software Updaterの問題はなくなると思います。

私はこれまでのところ、同様の問題があるスレッドから次のコマンドを試してみました

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
Mr. T

私の問題を解決した答え のように見えましたが、それは長い目で見れば大した役には立たない大胆な方法です。ディレクトリ全体を削除するのは、おそらく最もエレガントな方法ではありません。

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エラーが発生しました。このアプローチは本当にお勧めできません。

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が復活し、モジュールをインストールすることができました。これまでのところ、すべてが機能しています。これが最後になることを期待しましょう。

編集:1週間後、問題は再浮上していないので、これを承認済みの回答としてマークします。

編集2:pip更新により問題が復活しました。一見、更新プログラムによって変更が上書きされたようです。それを再度導入し、異常な動作を取り除くことは問題ありませんでした。

1
Mr. T