プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

pip3 のアップデートに失敗しました

別の記事で書きました、 aws cli からクロスアカウントを使う設定をする際に、いろいろと試していました。

その時、

mor@DESKTOP-H6IEJF9:~$ aws --version
aws-cli/1.16.269 Python/3.6.6 Linux/4.4.0-18362-Microsoft botocore/1.13.5

となっていたので、aws cli を更新してみるかと思い、 一度 aws cli をアップデートしてみました。

まずは、最新版を確認しようとして

mor@DESKTOP-H6IEJF9:~$ pip3 list -o

とすると

mor@DESKTOP-H6IEJF9:~$ pip3 list -o
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
Exception:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/lib/python3/dist-packages/pip/commands/list.py", line 157, in run
    packages = self.get_outdated(packages, options)
  File "/usr/lib/python3/dist-packages/pip/commands/list.py", line 168, in get_outdated
    dist for dist in self.iter_packages_latest_infos(packages, options)
  File "/usr/lib/python3/dist-packages/pip/commands/list.py", line 169, in 
    if dist.latest_version > dist.parsed_version
TypeError: '>' not supported between instances of 'Version' and 'Version'
mor@DESKTOP-H6IEJF9:~$

エラーとなります。

ググってみると、

exception error when ```pip3 list --outdated``` · Issue #6786 · pypa/pip · GitHub

とのことで、pip3 のバージョンを上げれば修正されてるっぽいです。

ということで、まずは、pip3 を更新してみました。

mor@DESKTOP-H6IEJF9:~$ pip3 install --upgrade pip
Collecting pip
  Cache entry deserialization failed, entry ignored
  Using cached https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl
Installing collected packages: pip
Successfully installed pip-19.3.1
mor@DESKTOP-H6IEJF9:~$

あれ?pip3 ではなく pip がインストールされたっポイぞ。

mor@DESKTOP-H6IEJF9:~$ pip --version
pip 19.3.1 from /home/mor/.local/lib/python3.6/site-packages/pip (python 3.6)
mor@DESKTOP-H6IEJF9:~$

pip3 はどうなってるんだろうか?

mor@DESKTOP-H6IEJF9:~$ pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in 
    from pip import main
ImportError: cannot import name 'main'
mor@DESKTOP-H6IEJF9:~$

エラーになってる・・・。

まあ、気にせず、 pip で更新してみると

mor@DESKTOP-H6IEJF9:~$ pip install --upgrade awscli
(中略)
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] 許可がありません: '/usr/local/lib/python3.6/dist-packages/botocore'
Consider using the `--user` option or check the permissions.

mor@DESKTOP-H6IEJF9:~$

途中でエラーになります。 やっちゃったようです。

まあ、よくよく考えてみると、原因は、pip3 は apt 経由でパッケージで入れてるので、これと、 pip3 自身でアップデートしたものが齟齬をきたしてるみたいです。

【Ubuntu】pip install –upgrade pip コマンドを実行すると、その後、ImportError: cannot import name main というエラーが発生する場合の対応方法 | ラボラジアン

下記を参考に復旧します。

Python pip3 - pip upgradeした後 「cannot import name 'main' 」error - KOKENSHAの技術ブログ

mor@DESKTOP-H6IEJF9:~$ sudo python3 -m pip uninstall pip
WARNING: The directory '/home/mor/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Uninstalling pip-19.3.1:
  Would remove:
    /home/mor/.local/bin/pip
    /home/mor/.local/bin/pip3
    /home/mor/.local/bin/pip3.6
    /home/mor/.local/lib/python3.6/site-packages/pip-19.3.1.dist-info/*
    /home/mor/.local/lib/python3.6/site-packages/pip/*
Proceed (y/n)? y
  Successfully uninstalled pip-19.3.1
mor@DESKTOP-H6IEJF9:~$ sudo apt install python3-pip --reinstall

もう一度pip3を動かしてみます。

mor@DESKTOP-H6IEJF9:~$ pip3 --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
mor@DESKTOP-H6IEJF9:~$ aws --version
aws-cli/1.16.269 Python/3.6.6 Linux/4.4.0-18362-Microsoft botocore/1.13.5
mor@DESKTOP-H6IEJF9:~$

ふー、とりあえず元に戻せたようです。

まあ、最終的に aws cli のバージョンの問題ではなくMFAの設定の問題だったので、 pip3 も aws cli もいまのままとしておきます。

とはいえ、いずれはどこかで、pip3 の再インストールからしないといけないようですね。