別の記事で書きました、 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 <listcomp> 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 <module> 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 自身でアップデートしたものが齟齬をきたしてるみたいです。
下記を参考に復旧します。
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 の再インストールからしないといけないようですね。